php7中对preg_replace内的e不再支持

2023-10-13 02:20
文章标签 支持 不再 replace php7 preg

本文主要是介绍php7中对preg_replace内的e不再支持,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景

最近开了一个新的系统,直接用的之前的代码,新系统中升级了php版本,改用php7,之前用的是php5.6,然后一顿操作,代码copy过来,环境打开,然后,然后,然后就一片空白,傻眼了,最开始以为是配置问题,然而并不是,试了另一个系统php7发现那个是用的smarty模板引擎,而现在这个系统是tpc,然后就一路断点找问题。最后问题找到了,

$template = preg_replace("/$varRegexp/es", "tpc_addquote('<?=\\1?>')", $template);

这条命令的结果居然是空,百度发现问题在preg_replace 的/e这里。

解决方案

说一下解决方案,因为不再支持了所以需要使用替代方法,改用preg_replace_callback替换就好。

        $template = preg_replace_callback("/$varRegexp/s",function ($r) use ($lang) {return tpc_addquote('<?=' . $r[1] . '?>');},$template);

好记性不如烂笔头

当找到这个问题的时候想起之前遇到的一个问题,之前的另一个系统中升级后发现db类报错了,当时就是解决了问题,并不知道为什么,想起是不是也是这个问题,找到修改记录。原来如此~~

//更改前
$joinStr = preg_replace("/__([A-Z_-]+)__/esU",C("DB_PREFIX").".strtolower('$1')",$joinStr);//更改后$joinStr = preg_replace_callback("/__([A-Z_-]+)__/",function ($matches) {return '_' . strtolower($matches[0]);},$joinStr);

再记录另一个问题

当时使用到phpexcel

然后到php7中就报错,phpexcel/calculation/functions.php 中581行的break

直接上代码吧

 

 

这篇关于php7中对preg_replace内的e不再支持的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/200112

相关文章

负债不再是障碍?银行信贷“白名单“揭秘

谈及银行信贷产品,常闻有言称存在无需考量负债与查询记录之奇品,此等说法十有八九为中介诱人上钩之辞。轻信之下,恐将步入连环陷阱。除非个人资质出类拔萃,如就职于国央企或事业单位,工龄逾年,五险一金完备,还款能力卓越,或能偶遇线下产品对查询记录稍显宽容,然亦非全然无视。宣称全然不顾者,纯属无稽之谈。 银行非慈善机构,不轻易于困境中援手,更偏爱锦上添花之举。若无坚实资质,即便求助于银行亦难获青睐。反

PHP7扩展开发之数组处理

前言 这次,我们将演示如何在PHP扩展中如何对数组进行处理。要实现的PHP代码如下: <?phpfunction array_concat ($arr, $prefix) {foreach($arr as $key => $val) {if (isset($prefix[$key]) && is_string($val) && is_string($prefix[$key])) {$arr[

PHP7扩展开发之字符串处理

前言 这次,我们来看看字符串在PHP扩展里面如何处理。 示例代码如下: <?phpfunction str_concat($prefix, $string) {$len = strlen($prefix);$substr = substr($string, 0, $len);if ($substr != $prefix) {return $prefix." ".$string;} else

深入理解PHP7之REFERENCE

REFERENCE 上一章说过引用(REFERENCE)在PHP5的时候是一个标志位, 而在PHP7以后我们把它变成了一种新的类型:IS_REFERNCE. 然而引用是一种很常见的应用, 所以这个变化带来了很多的变化, 也给我们在做PHP7开发的时候, 因为有的时候疏忽忘了处理这个类型, 而带来不少的bug. 最简单的情况, 就是在处理各种类型的时候, 从此以后我们要多考虑这种新的类型, 比如

PHP7扩展开发之类型处理

前言 这次,我们将演示如何在PHP扩展中如何对类型进行一些操作。如,判断变量类型。要实现的PHP代码如下: <?phpfunction get_size ($value) {if (is_string($value)) {return "string size is ". strlen($value);} else if (is_array($value)) {return "array si

PHP7扩展开发之依赖其他扩展

前言 有的时候,我们的扩展要依赖其他扩展。比如,我们PHP的mysqli扩展就依赖mysqlnd扩展。这中情况下,我们怎么使用其他扩展呢?这个就是本文讲述的内容。 我们新建立一个扩展,名字叫 demo_dep , 依赖之前的say扩展。 在demo_dep扩展中,我们实现demo_say方法。这个方法调用say扩展的say方法。 代码 基础代码 确保say扩展的头文件正确安装到了php

PHP7扩展开发之函数方式使用lib库

前言 首先说下什么是lib库。lib库就是一个提供特定功能的一个文件。可以把它看成是PHP的一个文件,这个文件提供一些函数方法。只是这个lib库是用c或者c++写的。 使用lib库的场景。一些软件已经提供了lib库,我们就没必要再重复实现一次。如,原先的mysql扩展,就是使用mysql官方的lib库进行的封装。 在本文,我们将建立一个简单的lib库,并在扩展中进行封装调用。 代码 基础

PHP7扩展开发之对象方式使用lib库

前言 上一篇文章,我们使用的是函数方式调用lib库。这篇文章我们将使用对象的方式调用lib库。调用代码如下: <?php $hello = new hello(); $result = $hello->get(); var_dump($result); ?> 我们将在扩展中实现hello类。hello类中将依赖lib库。 代码 基础代码 这个扩展,我们将在say扩展上增加相关代码。sa

PHP7扩展开发之流操作

前言 啥是流操作?简单来讲就是对一些文件,网络的IO操作。PHP已经把这些IO操作,封装成流操作。这节,我们将使用PHP扩展实现一个目录遍历的功能。PHP示例代码如下: <?phpfunction list_dir($dir) {if (is_dir($dir) === false) {return;} $dh = opendir($dir);if ($dh == false) {ret

PHP7扩展开发之配置项

前言 我们经常使用的一些扩展,有的会在php.ini文件中会有一些配置项。这些配置项控制扩展的行为。如 opcache扩展,经常使用的配置项如下: [opcache]; 模块地址zend_extension=opcache.so; 开关打开opcache.enable=1; 开启CLIopcache.enable_cli=1; 可用内存, 酌情而定, 单位为:Mbopcache