PHP 5.5 preg_replace_callback回调问题
functiongetFile($filename){if($filename{0}=='/'&&substr($this->fileRoot,-1)=='/'){$fi...
function getFile($filename)
{
if ($filename{0} == '/' && substr($this->fileRoot, -1) == '/') {
$filename = substr($filename, 1);
}
$filename = $this->fileRoot . $filename;
if (!($fh = @fopen($filename, 'r'))) {
$this->err[] = PEAR::raiseError(
$this->errorMessage(IT_TPL_NOT_FOUND) . ': "' .$filename .'"',
IT_TPL_NOT_FOUND
);
return "";
}
$fsize = filesize($filename);
if ($fsize < 1) {
fclose($fh);
return '';
}
$content = fread($fh, $fsize);
fclose($fh);
return preg_replace(
"#<!-- INCLUDE (.*) -->#ime",
"\$this->getFile('\\1')",
$content
);
} // end func getFile
怎样将preg_replace 改成preg_replace_callback? 展开
{
if ($filename{0} == '/' && substr($this->fileRoot, -1) == '/') {
$filename = substr($filename, 1);
}
$filename = $this->fileRoot . $filename;
if (!($fh = @fopen($filename, 'r'))) {
$this->err[] = PEAR::raiseError(
$this->errorMessage(IT_TPL_NOT_FOUND) . ': "' .$filename .'"',
IT_TPL_NOT_FOUND
);
return "";
}
$fsize = filesize($filename);
if ($fsize < 1) {
fclose($fh);
return '';
}
$content = fread($fh, $fsize);
fclose($fh);
return preg_replace(
"#<!-- INCLUDE (.*) -->#ime",
"\$this->getFile('\\1')",
$content
);
} // end func getFile
怎样将preg_replace 改成preg_replace_callback? 展开
展开全部
preg_replace_callback是在有字符以外的替换时使用的,比如有数值比较。
你给的代码preg_replace只是纯字符替换,没必要用preg_replace_callback....
改不是画蛇添足..
你给的代码preg_replace只是纯字符替换,没必要用preg_replace_callback....
改不是画蛇添足..
更多追问追答
追问
preg_replace 在PHP 5.5 中已经丢弃了,不能使用了!只有用preg_replace_callback进行替代,这是画蛇添足?
追答
没有注意到你前贴的表达式内嵌递归执行。因为这写法确实野蛮。
PHP5.5并未废弃preg_replace函数,废弃的只是该函数的表达式中的“e”调节符--不再允许表达式中执行代码。preg_replace仍然非常有效和高效。
改成callback只要把最后一句替换成
return preg_replace_callback(
"#<!-- INCLUDE (.*) -->#im", function ($m){
return $this->getFile($m[1]);
}, $content
);
php 5.4下测试可行,未知5.5版,因为5.5的匿名函数有小改,而5.3以下要另写
this is from shtml.html
this is from shtml1.html
this is from shtml1_1.html
this is from shtml1_1_1.html
this is from shtml1_2.html
this is from shtml2.html
this is from shtml2_1.html
佳达源
2024-10-28 广告
2024-10-28 广告
AR0144CSSM20SUKA0-CPBR这款产品,作为我司产品线中的重要一员,集成了高精度的传感器技术与先进的图像处理算法,广泛应用于安防监控、工业自动化及机器视觉等领域。其卓越的性能与稳定性,确保了在各种复杂环境下的精准数据采集与高效...
点击进入详情页
本回答由佳达源提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询