遇到过这样一个改版,就是把项目所有的静态资源全部迁移至第三方,至于为何要放到第三方呢?CDN、减轻服务器压力什么的...好了,这个不是本文讨论要点。:tw-1f31e:
文件迁移了,资源路径当然得改呀!
但是视图文件我一看,卧槽,几百个,算了还是程序来实现修改路径吧!
大致实现原理就是把所有视图文件里面的所有静态资源替换为实际资源路径就行了,
*画外音: 怎么替换? 正则呗,简单粗暴!*
<?php
// +----------------------------------------------------------------------
// | Created by PhpStorm.
// +----------------------------------------------------------------------
// | user : LW放下
// +----------------------------------------------------------------------
// | blog : www.putyy.com
// +----------------------------------------------------------------------
// | email: 10945014@qq.com
// +----------------------------------------------------------------------
// | Date : 2018/11/2 0002 11:30
// +----------------------------------------------------------------------
global $array;
$array = array();
/**
* 读取文件路径
* @param $listChildren
* @param $fPath
*/
function readChildren($listChildren,$fPath){
foreach ($listChildren as $vv){
if(in_array($vv,array('.','..'))){
continue;
}
if(is_dir($fPath.'/'.$vv)){
readChildren(scandir($fPath.'/'.$vv),$fPath.'/'.$vv);
}elseif(is_file($fPath.'/'.$vv)){
global $array;
array_push($array,$fPath.'/'.$vv.PHP_EOL);
//执行替换
replaceSource($fPath.'/'.$vv);
}
}
return;
}
$ignoreDir = array('.','..','admin','membera','tpl','common');
$dir = './';
$list = scandir($dir);
foreach ($list as $v){
if(!in_array($v,$ignoreDir) && is_dir($v)){
//循环读取下层文件
readChildren(scandir($dir.$v),$dir.$v);
}
}
var_dump($array);
以下函数支持替换类型(删除线的地方为替换地方):
*1、 ~~xxx/xxx/xxx.css~~
2、 ~~xxx/xxx/xxx.js~~?vc=xxx
3、 ~~xxx/xxx/xxx.jpg~~?xxxxxxx*
**如有其他需求自己改正则吧! **:tw-1f31e:
/**
* 这里只是把相对路径的skin目录下 css,js,jpg,png,gif,jpeg的url传递给getStyleDomain这个统一获取真实资源地址的类方法 不保证完全替换成功,所以替换完成最好检测一下
* 执行视图文件替换
* @param $viewPath
*/
function replaceSource($viewPath){
$content = file_get_contents($viewPath);
$match = '/(href|src)s*=s*("|')(?:/skin/|/skin/)(.*?[.]{1}(?:js|css|jpg|png|gif|jpeg))/is';
$arr = preg_replace($match,'${1}=${2}<?=$this->getStyleDomain('/skin/${3}')?>',$content);
file_put_contents($viewPath,$arr);
reture true;
}