我试图在一个巨大的xml文件(1GB)之间进行搜索替换。 我发现这个伟大的代码在我的文件上使用str_replace时工作得很好 -
<?php
function replace_file($path, $string, $replace)
{
set_time_limit(0);
if (is_file($path) === true)
{
$file = fopen($path, 'r');
$temp = tempnam('./', 'tmp');
if (is_resource($file) === true)
{
while (feof($file) === false)
{
file_put_contents($temp, str_replace($string, $replace, fgets($file)), FILE_APPEND);
}
fclose($file);
}
unlink($path);
}
return rename($temp, $path);
}
replace_file('myfile.xml', '<search>', '<replace>');
到目前为止一直很好,而且效果很好。
现在我将str_replace更改为preg_replace,将搜索值更改为&#39; / ^ [^] /&#39;所以代码看起来像这样 -
<?php
function replace_file($path, $string, $replace)
{
set_time_limit(0);
if (is_file($path) === true)
{
$file = fopen($path, 'r');
$temp = tempnam('./', 'tmp');
if (is_resource($file) === true)
{
while (feof($file) === false)
{
file_put_contents($temp, preg_replace($string, $replace, fgets($file)), FILE_APPEND);
}
fclose($file);
}
unlink($path);
}
return rename($temp, $path);
}
replace_file('myfile.xml', '/[^<search>](.*)[^</search>]/', '<replace>');
我收到错误&#34; preg_replace unknown modifier&#34; &#39; d&#39;在第16行 第16行是 -
file_put_contents($temp, preg_replace($string, $replace, fgets($file)), FILE_APPEND);