我正在使用fopen来访问我的PHP文件:
$readFd = @fopen($file, 'r+');
我想在此文件中搜索函数调用parent::process();
如果存在,我会在此之后插入一个新的函数调用。
我尝试过使用preg_replace但它似乎与parent::process();
不匹配
例如,我需要的结果就是这个。
public function process() {
parent::process();
$this->newFunction();
}
然后写入我正在使用的文件:
fwrite($readFd, $content);
我想我必须遗漏一些重要的正则表达式。 希望有人能指出我正确的方向。
答案 0 :(得分:2)
我会使用php函数fgets逐个读取文件中的每一个,直到你到达你需要的行。然后你的指针将在那一行之后,你可以在那里写自己的行。
修改强>
我错了,当你在特定点写一些文件时,那一点之后的所有内容都会丢失。所以我做了一些测试并想出了这个:
$handle = fopen($file,"r+");
$lines = array();
while(($line = fgets($handle)) !== false) {
$lines[] = $line;
if(strpos($line, 'parent::process()')) {
$lines[] = '$this->newFunction();';
}
}
fseek($handle, 0); // reset pointer
foreach($lines as $line) {
fwrite($handle, $line);
}
fclose($handle);
我希望这能解决你的问题。
答案 1 :(得分:0)
我提出了解决方案但是你的代码似乎要短得多,所以我明天会尝试你的解决方案。
if(! $readFd = @fopen($file, "r+"))
return FALSE;
$buffer = fread($readFd, 120000);
fclose($readFd);
$onDuplicate = FALSE;
$lines = explode("\n", $buffer);
foreach($lines AS $key => $line) {
if(strpos($line, "newFunction()")) {
$onDuplicate = TRUE;
}
if(strpos($line, "parent::process()")) {
$lines[$key] = "\t\tparent::process();\n\t\t//\$this->newFunction();\n";
}
}
if(! $onDuplicate) {
$readFd = fopen($file, "w");
$buffer = implode("\n", $lines)."\n";
fwrite($readFd, $buffer);
fclose($readFd);
} else {
var_dump('changes are already applied');
}
感谢您的帮助!