PHP,替换多个文件中的文本
需求:
需要对两个目录中的文件内容进行查找替换,两个目录查找替换的内容不一样。
实现中注意几点:
(1)函数递归调用,来检索子目录;
(2)函数名可以以参数形式传递;
(3)用?进行非贪婪匹配;
(4)每行匹配查找、整个文件内容匹配查找
<?php
//loopdir('dir1', 'repfile1');
loopdir('dir2', 'repfile2');
function loopdir($dir, $fun){
$dp = opendir($dir);
chdir($dir);
readdir($dp); //排除当前目录 "."
readdir($dp); //排除上层目录 "."
while( $v = readdir($dp) ){
if( is_dir($v) ) loopdir($v, $fun);
else $fun($v);
echo $v."<br>";
}
chdir("..");
}
function repfile1($filename){
$content = file_get_contents($filename);
if( empty($content) ){
echo "can't open file to read: ".$filename;
return ;
}
//加?号是进行非贪婪匹配,以免匹配的块太大
$content = preg_replace('/if \(!validateEmail\((.*?)"Email address is not valid(.*?})/s',
'if (!validateEmail(\\1"Email address is not valid\\2else if (!isNyhEmail(\\1"Can not add NYH email addresses.\\2',
$content);
writenewfile($filename, $content);
}
function repfile4615($filename){
$fpr = fopen($filename, 'r');
if( empty($fpr) ){
echo "can't open file to read: ".$filename;
return ;
}
$newContent = '';
while( $line = fgets($fpr) ){
$line = preg_replace('/^(.*)\$var_kitchen_dishwasher = "kitchen".\$kitchen_ind."_dishwasher";/s',
'\\1$var_kitchen_dishwasher = "kitchen".\$kitchen_ind."_dishwasher";
\\1$var_kitchen_oven = "kitchen".$kitchen_ind."_oven";
\\1$var_kitchen_fridge = "kitchen".$kitchen_ind."_fridge";', $line);
$newContent .= $line;
}
fclose($fpr);
writenewfile($filename, $newContent);
}
function writenewfile($filename, $content){
$fpw = fopen($filename, 'w');
if( empty($fpw) ){
echo "can't open file to write: ".$filename;
return ;
}
fwrite($fpw, $content);
fclose($fpw);
}
?>
相关文档:
=================================
mb_substr($str, 0, 1, "gbk");
如果提供了第四个参数,php会解析这个参数
1. 将这个参数转换成字符串.
2. 调用mbfl_name2no_encoding获得编码器序号
3. 第二步会调用mbfl_name2encoding,这个函数在循环中使用了strcasecmp
strcasecmp是忽略大小写的字符串匹配,性能很低,
......
最简单的谁都会的调试(是么?):
本来安装php是没问题 也能用了 但是又从书上抄了一些代码来发现不能用, 那就用眼睛仔细的对着书本纠正一下代码哈 肯定是你抄错了 要么是印刷错了
比如 1(yi)跟l(el) 0(ling)跟O(大写o)等
别笑哈 真的有人抄错过 还让我过去帮忙调试 过去我录入进去(他的没保存) 就全对了
言归正传
Q: "为 ......
class A extends father{
function __construct() {
echo "abstract<br>";
parent::base(); //父类方法
&nb ......
有关变量的传地址赋值
PHP 3 中,变量总是传值赋值。PHP 4
提供了另外一种方式给变量赋值:传地址赋值。使用传地址赋值,即简单地追加一个(&)符号到将要赋值的变量前(源变量)。中国自学编程网,www.zxbc.cn
这意味着新的变量简单的引用了原始变量,改动新的变量将影响到原始变量,反之亦然。
<?p ......