PHP cli 脚本不输出任何内容

2022-08-30 18:20:41

所以我有一个php脚本,我使用以下命令执行:

php -f my_script.php myArguments

该脚本正在使用 svn 进行版本控制。我刚刚更新了它,粘贴了命令以将其运行到终端中,然后执行了它。但是,没有输出。不是失败的消息,不是打印任何东西,什么都没有。它看起来永远不会开始。有点像下面这样:

me:/srv/scripts# php -f my_script.php myArguments
me:/srv/scripts#

其他脚本将正常运行。

我很难想出一个SSCCE,因为我无法真正共享导致这种情况的代码,并且我无法故意复制此行为。然而,我现在已经见过两次了。如果我保存更改,还原文件,然后将它们粘贴回去,它很有可能会运行良好。

但是,我担心不知道是什么导致了这种奇怪的行为。有没有一个空格字符或什么东西告诉PHP不要启动,或输出任何东西?

以下是我看到此行为后尝试的内容:

  • 修改脚本,使其简单echo 'hello'

  • 在脚本的开头放废话,所以是无法解析的。

  • 从工作脚本粘贴代码

  • 沮丧地把头撞在墙上

  • 在另一个终端/腻子 ssh 连接中尝试。

这是它变得有趣的地方:它实际上可以在不同的终端中工作。它按预期做了一切。

那么有没有人知道可能导致这种情况的原因,或者我应该尝试的事情来确定问题?

编辑:

“不同终端”仍然是终端应用,只是一个新的。

我有足够的权限来执行该文件,但即使我没有,它也应该吐出一条消息,说我没有。

我故意引入了语法错误,希望我能让PHP吐出解析错误。仍然没有输出。


答案 1

display_errors可能会在运行时之前被禁用。您可以使用 -d 开关手动打开它:

php -d display_errors=1 -f my_script.php myArguments

答案 2

我遇到了同样的问题,并且没有太多的强制PHP或检查语法的帮助display_errors-l

我终于解决了我们的问题,也许你可以找到一些关于这个解决方案的帮助

在不使用 php.ini的情况下测试脚本:

php -n test_script.php

这将帮助您磨练真正的原因 - PHP配置,其他人的脚本或您的脚本

在我的情况下,这是其他人的脚本的问题,该脚本是通过php.ini中的指令添加的。(或者更具体地说,几个文件和函数稍后,因为我钻练了所有代码,在我去的时候添加调试 - 在旁注中,你可能会发现在尝试调试这种类型的问题时使用无价的)auto_prepend_filefwrite(STDOUT, "debug text\n");

有人添加了一个正在通过预置文件运行的函数,但使用该符号来抑制特定函数调用中的错误。(您可能遇到类似的问题,但与php没有特别关系.ini如果您的测试脚本中有任何包含,则引入其他代码)@

该函数失败并导致PHP无声死亡,与我的测试脚本无关

你会发现各种各样的警告,关于使用符号如何导致我遇到的确切问题,也许你遇到了,http://php.net/manual/en/language.operators.errorcontrol.php@

类似症状的繁殖:

采用功能齐全的 PHP 环境,并通过在脚本顶部添加此内容来中断 CLI 输出@xxx_not_a_real_function_name_xxx();

因此,您可能只是对php.ini有问题,或者您(或其他人)可能已经没有意识到它在调试中造成的严重(令人沮丧和耗时)的后果。@


推荐