【问题标题】:broken preg_match function ? (php 7.4.2)损坏的 preg_match 函数? (PHP 7.4.2)
【发布时间】:2020-11-09 14:27:53
【问题描述】:

我有一个很奇怪的问题。

当我在浏览器中打开下面的脚本并执行它时,一切都按预期工作。即使我在命令行中调用脚本,我也有预期的结果。

但是,如果我在后台作业中运行脚本,则脚本会在“preg_match”函数中中止,而不会出现任何错误。我在任何地方都没有错误消息,无论是在日志中还是在其他任何地方。我还检查了该函数是否存在并且确实存在。

脚本似乎只是在 preg_match 中止,并且没有显示任何有关可能错误的消息。所以我只得到输出“CHECKPOINT 1”。

我检查了 PHP 版本,并且到处都是相同的版本(相同的路径)。 pcre的设置也是一样的。

我是否有可能为 preg_match 提供不同的模块或功能?有什么方法可以检查函数中发生了什么?

使用 try & catch 我没有得到任何有关问题的信息。

<?php
class pcre_check
{

    public function setUp() {
    }

    public function perform() {

      echo "CHECKPOINT 1";
      preg_match("/[0-9]{4}/", "6876 ABCDEFGH", $matches, PREG_OFFSET_CAPTURE);
      print_r($matches);
          echo "CHECKPOINT 2";
    }

    public function tearDown() {

    }
}

$test   = new pcre_check();
$test->setUp();
$test->perform();
$test->tearDown();
?>

系统信息:

  • Apache 服务器
  • PHP 7.4.2

相同的脚本可以在生产服务器上在线运行。只有在我的本地服务器上我有这个问题。

似乎正则表达式有问题。函数 preg_replace 也不起作用,但 str_replace 替换普通字符串正在起作用。

【问题讨论】:

  • 您如何捕获后台作业的输出?它是什么类型的后台作业(例如 crontab)?如果 setUp()tearDown() 函数为空,那么调用它们有什么意义?
  • 您是否在 E_ALL 和 php ini display_errors 上设置了错误报告?
  • 后台脚本是 php-resque (github.com/resque/php-resque)。 setUp() 和 tearDown() 是空的,我没有删除它们,但它们在原始脚本中也是空的。
  • 我在终端中看到了我的脚本的输出,我没有收到任何错误。当我设置 error_reporting(E_ALL);和 ini_set('display_errors', '1');仍然没有错误。
  • 顺便说一句,我不得不说,相同的脚本在生产服务器上在线工作。只有在我的本地服务器上我有这个问题。

标签: php preg-match php-7.4


【解决方案1】:

它现在似乎正在工作。我没有发现问题,但是在更新到 macOS Big Sur 之后,它现在似乎可以工作了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-15
    • 1970-01-01
    • 1970-01-01
    • 2014-03-19
    • 2011-02-13
    相关资源
    最近更新 更多