如何批量替换相对地址为绝对地址(利用bat批处理实现)


Posted in PHP onMay 27, 2013

如果你的url链接是相对路径“static/mapi.css”,你想把他批量替换成绝对路径“http://dev.baidu.com/wiki/static/map/cloud/static/mapi.css”。那么,你可以这样做:

写一个PHP文件,把需要替换的网址写进去。
这个代码的意思就是,把#BASE_URL#替换成 http://api.map.baidu.com/lbsapi/cloud/ 。
这句话的意思是,把resource文件里的内容替换一遍,然后放到cloud文件夹里。FileUtil::copyDir("resource","cloud",true);

<?php 
//需要替换的关键字 
$GLOBALS["patterns"] = array( 
"/#BASE_URL#/" 
); 
//替换后的内容,和上面的匹配规则一一对应 
$GLOBALS["replacements"] = array( 
"http://api.map.baidu.com/lbsapi/cloud/" 
//"http://172.22.168.178/lbsapi/" 
//"http://dev.baidu.com/wiki/static/map/cloud/" 
); 
/** 
* 操纵文件类 
* 
* 例子: 
* FileUtil::copyDir('b','d/e'); 测试复制文件夹 建立一个d/e文件夹,把b文件夹下的内容复制进去 
* FileUtil::copyFile('b/1/2/3.exe','b/b/3.exe'); 测试复制文件 建立一个b/b文件夹,并把b/1/2文件夹中的3.exe文件复制进去 
* FileUtil::createDir('a/1/2/3'); 测试建立文件夹 建一个a/1/2/3文件夹 
* FileUtil::unlinkFile('b/d/3.exe'); 测试删除文件 删除b/d/3.exe文件 
*/ 
class FileUtil { 
/** 
* 建立文件夹 
* 
* @param string $aimUrl 
* @return viod 
*/ 
function createDir($aimUrl) { 
$aimUrl = str_replace('', '/', $aimUrl); 
$aimDir = ''; 
$arr = explode('/', $aimUrl); 
foreach ($arr as $str) { 
$aimDir .= $str . '/'; 
if (!file_exists($aimDir)) { 
mkdir($aimDir); 
} 
} 
} 
/** 
* 删除文件 
* 
* @param string $aimUrl 
* @return boolean 
*/ 
function unlinkFile($aimUrl) { 
if (file_exists($aimUrl)) { 
unlink($aimUrl); 
return true; 
} else { 
return false; 
} 
} 
/** 
* 复制文件夹 
* 
* @param string $oldDir 
* @param string $aimDir 
* @param boolean $overWrite 该参数控制是否覆盖原文件 
* @return boolean 
*/ 
function copyDir($oldDir, $aimDir, $overWrite = false) { 
$aimDir = str_replace('', '/', $aimDir); 
$aimDir = substr($aimDir, -1) == '/' ? $aimDir : $aimDir.'/'; 
$oldDir = str_replace('', '/', $oldDir); 
$oldDir = substr($oldDir, -1) == '/' ? $oldDir : $oldDir.'/'; 
if (!is_dir($oldDir)) { 
return false; 
} 
if (!file_exists($aimDir)) { 
FileUtil::createDir($aimDir); 
} 
$dirHandle = opendir($oldDir); 
while(false !== ($file = readdir($dirHandle))) { 
if ($file == '.' || $file == '..') { 
continue; 
} 
if (!is_dir($oldDir . $file)) { 
FileUtil::copyFile($oldDir . $file, $aimDir . $file, $overWrite); 
} else { 
FileUtil::copyDir($oldDir . $file, $aimDir . $file, $overWrite); 
} 
} 
return closedir($dirHandle); 
} 
/** 
* 复制文件 
* 
* @param string $fileUrl 
* @param string $aimUrl 
* @param boolean $overWrite 该参数控制是否覆盖原文件 
* @return boolean 
*/ 
function copyFile($fileUrl, $aimUrl, $overWrite = false) { 
if (!file_exists($fileUrl)) { 
return false; 
} 
if (file_exists($aimUrl) && $overWrite == false) { 
return false; 
} elseif (file_exists($aimUrl) && $overWrite == true) { 
FileUtil::unlinkFile($aimUrl); 
} 
$aimDir = dirname($aimUrl); 
FileUtil::createDir($aimDir); 
copy($fileUrl, $aimUrl); 
//替换变量 
$apiFilePointer = fopen($aimUrl, 'r'); 
$apiFileContent = fread($apiFilePointer, filesize($aimUrl)); 
//只在js、html、css文件进行替换 
if (preg_match('/(\.js|\.html|\.css|\.htm)$/', $aimUrl)) { 
$apiFileContent = preg_replace($GLOBALS["patterns"], $GLOBALS["replacements"], $apiFileContent); 
} 
fclose($apiFilePointer); 
echo $aimUrl."\r\n"; 
$apiFilePointer = fopen($aimUrl, 'w+'); 
fwrite($apiFilePointer, $apiFileContent); 
fclose($apiFilePointer); 
//替换变量 
return true; 
} 
} 
FileUtil::copyDir("resource","cloud",true); 
?>

再写一个bat批处理文件,来运行这个PHP。
php release.php
现在,只需点击bat文件,全部页面里的相对地址就会变成绝对地址了。
PHP 相关文章推荐
php下判断数组中是否存在相同的值array_unique
Mar 25 PHP
php的字符串用法小结
Jun 08 PHP
php中将地址生成迅雷快车旋风链接的代码[测试通过]
Apr 20 PHP
php 定界符格式引起的错误
May 24 PHP
PHP 修复未正常关闭的HTML标签实现代码(支持嵌套和就近闭合)
Jun 07 PHP
php笔记之:初探PHPcms模块开发介绍
Apr 26 PHP
php断点续传之如何分割合并文件
Mar 22 PHP
PHP队列用法实例
Nov 05 PHP
php求数组全排列,元素所有组合的方法
May 05 PHP
Yii2.0中的COOKIE和SESSION用法
Aug 12 PHP
PHP实现的62进制转10进制,10进制转62进制函数示例
Jun 06 PHP
php将字符串转换为数组实例讲解
May 05 PHP
php 深入理解strtotime函数的使用详解
May 23 #PHP
如何使用PHP计算上一个月的今天
May 23 #PHP
解析php二分法查找数组是否包含某一元素
May 23 #PHP
PHP下打开phpMyAdmin出现403错误的问题解决方法
May 23 #PHP
php设计模式之观察者模式的应用详解
May 21 #PHP
php设计模式之命令模式的应用详解
May 21 #PHP
浅谈PHP与C#的值类型指向区别的详解
May 21 #PHP
You might like
解析php中array_merge与array+array的区别
2013/06/21 PHP
php中读写文件与读写数据库的效率比较分享
2013/10/19 PHP
php防止sql注入代码实例
2013/12/18 PHP
CodeIgniter读写分离实现方法详解
2016/01/20 PHP
CL vs ForZe BO5 第二场 2.13
2021/03/10 DOTA
JavaScript setTimeout和setInterval的使用方法 说明
2010/03/25 Javascript
javascript中为某个元素指定事件的三种方式
2014/08/07 Javascript
Javascript限制网页只能在微信内置浏览器中访问
2014/11/09 Javascript
把Node.js程序加入服务实现随机启动
2015/06/25 Javascript
js脚本分页代码分享(7种样式)
2015/08/19 Javascript
JavaScript对HTML DOM使用EventListener进行操作
2015/10/21 Javascript
基于Node.js的WebSocket通信实现
2017/03/11 Javascript
vue.js删除列表中的一行
2018/06/30 Javascript
Angular项目如何升级至Angular6步骤全纪录
2018/09/03 Javascript
Layui表格行工具事件与数据回填方法
2019/09/13 Javascript
vue el-table实现行内编辑功能
2019/12/11 Javascript
[01:20]DOTA2 齐天大圣至宝动态展示
2016/12/13 DOTA
Python3字符串学习教程
2015/08/20 Python
python开发之基于thread线程搜索本地文件的方法
2015/11/11 Python
使用python读取.text文件特定行的数据方法
2019/01/28 Python
python通过链接抓取网站详解
2019/11/20 Python
pytorch 实现在一个优化器中设置多个网络参数的例子
2020/02/20 Python
python实现四人制扑克牌游戏
2020/04/22 Python
Python‘==‘ 及 ‘is‘相关原理解析
2020/09/05 Python
PyCharm2020.3.2安装超详细教程
2021/02/08 Python
CSS3实现的炫酷菜单代码分享
2015/03/12 HTML / CSS
工程总经理工作职责
2013/12/09 职场文书
消防安全管理制度
2014/02/01 职场文书
表彰会主持词
2014/03/26 职场文书
党组织公开承诺书
2014/03/29 职场文书
党性教育心得体会
2014/09/03 职场文书
毕业生实习证明
2014/09/19 职场文书
2014年教研工作总结
2014/12/06 职场文书
求职信范文怎么写
2015/03/19 职场文书
解决linux下redis数据库overcommit_memory问题
2022/02/24 Redis
MySQL Server 层四个日志
2022/03/31 MySQL