【发布时间】: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