所以我有一个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吐出一个解析错误。仍然没有输出。
答案 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