PHP 类Smarty_Compiler.class.php中有一句话报错了,要怎么改?
答案:3 悬赏:40 手机版
解决时间 2021-01-23 18:27
- 提问者网友:酱爆肉
- 2021-01-22 22:03
PHP 类Smarty_Compiler.class.php中有一句话报错了,要怎么改?
最佳答案
- 五星知识达人网友:北城痞子
- 2021-01-22 23:34
preg_replace函数仍然可以使用,你这里出错是因为你的旧的php版本在使用preg_replace时,其第一个参数,即$pattern,使用/e修饰符,而php在5.5.0版本以后preg_repalce函数已经废弃使用/e修饰符,如果使用/e修饰符的话,就会报一个E_DEPRECATED级别的错误。
你贴出来的代码,第一个参数$search.'e',明显使用了/e修饰符,你这里有2个选择,一个是根据提示,使用preg_replace_callback替换preg_replace,另外一个最简单也是大多数情况下的方法就是将将你的第一个参数直接写成$search,不要.'e'这个操作。追问我可不敢贸然把这个e去掉,但是我也不 理解这个e是干嘛用的追答如下为preg_replace函数的原型,mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1[, int &$count ]] )
当使用/e修饰符时,preg_replace会将第2个参数$replacement 返回的字符串当做一个php代码来执行。比如说$replacement 为$_POST['na'];而$_POST['n']返回的值为phpinfo(),那么$replacement 最终的字符串就是执行phpinfo()函数返回的字符串;
你要确保这里的preg_replace的第二个参数,即"'"
. $this->_quote_replace($this->left_delimiter) . 'php'
. "' . str_repeat(\"\n\", substr_count('\\0', \"\n\")) .'"
. $this->_quote_replace($this->right_delimiter)
. "'"字符串不是类似phpinfo()这样的一个可执行的php的代码的话,你可以先echo 这个字符串(第二个参数),看一下是否是可执行的php代码,如果不是,则可以直接将.'e'去掉。
你贴出来的代码,第一个参数$search.'e',明显使用了/e修饰符,你这里有2个选择,一个是根据提示,使用preg_replace_callback替换preg_replace,另外一个最简单也是大多数情况下的方法就是将将你的第一个参数直接写成$search,不要.'e'这个操作。追问我可不敢贸然把这个e去掉,但是我也不 理解这个e是干嘛用的追答如下为preg_replace函数的原型,mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1[, int &$count ]] )
当使用/e修饰符时,preg_replace会将第2个参数$replacement 返回的字符串当做一个php代码来执行。比如说$replacement 为$_POST['na'];而$_POST['n']返回的值为phpinfo(),那么$replacement 最终的字符串就是执行phpinfo()函数返回的字符串;
你要确保这里的preg_replace的第二个参数,即"'"
. $this->_quote_replace($this->left_delimiter) . 'php'
. "' . str_repeat(\"\n\", substr_count('\\0', \"\n\")) .'"
. $this->_quote_replace($this->right_delimiter)
. "'"字符串不是类似phpinfo()这样的一个可执行的php的代码的话,你可以先echo 这个字符串(第二个参数),看一下是否是可执行的php代码,如果不是,则可以直接将.'e'去掉。
全部回答
- 1楼网友:刀戟声无边
- 2021-01-23 02:15
没错啊,可能是你的边界符没写全造成的。追问先前是没报错,我升级PHP版本后才报的错,报错时建议用preg_replace_callback代替,如果用preg_replace_allback要怎么改啊?
- 2楼网友:独行浪子会拥风
- 2021-01-23 01:08
你的模板文件语法有错误追问有语法问题的话旧版就会报错了,这是升级PHP后才有的问题。我很确定模板文件不存在语法问题追答报错内容贴出来追问"Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback() instead in...."
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯