PHP cli脚本不输出任何内容

时间:2014-08-15 16:48:52

标签: php output command-line-interface

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

php -f my_script.php myArguments

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

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

其他脚本运行得很好。

我很难想出一个SSCCE,因为我无法真正分享造成这种情况的代码,而且我无法故意复制这种行为。但是,我现在已经看过两次了。如果我保存更改,还原文件并将其粘贴回来,很有可能它会运行得很好。

然而,我担心不知道是什么导致了这种奇怪的行为。是否有空白字符或某些东西告诉PHP不要启动或输出任何内容?

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

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

  • 将废话置于脚本的开头,因此无法解析。

  • 从工作脚本中粘贴代码

  • 沮丧地在墙上敲我的头

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

这里有趣的地方:它实际上在不同的终端中工作。它按预期完成所有事情。

那么有没有人有任何想法可能导致这种情况,或者我应该尝试以确定问题?

修改

"不同的终端"仍然是终端应用程序,只是一个新的应用程序。

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

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

3 个答案:

答案 0 :(得分:21)

运行前可能会禁用

display_errors。您可以使用-d switch手动启用它:

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

答案 1 :(得分:10)

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

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

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

php -n test_script.php

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

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

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

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

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

类似症状的再现:

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

所以你可能只是对php.ini有问题,或者你(或其他人)可能使用@没有意识到它在调试中导致的严重(和令人沮丧且耗时)的后果

答案 2 :(得分:0)

由于内存限制问题,我在一个好的脚本上遇到了PHP CLI静默失败的问题。试试:

php -d memory_limit=512M script.php