所以我有一个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吐出一个解析错误。仍然没有输出。
4条答案
按热度按时间hof1towb1#
display_errors可能在运行前被禁用。您可以使用-d switch手动打开它:
3zwjbxry2#
我也遇到了同样的问题,无论如何也无法将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环境为例,通过在脚本
@xxx_not_a_real_function_name_xxx();
的顶部添加以下内容来中断CLI输出因此,您可能只是遇到了php.ini的问题,或者您(或其他人)可能使用了
@
,但没有意识到它在调试中导致的严重(令人沮丧和耗时)后果zpjtge223#
由于内存限制问题,我经历了PHP CLI在一个好的脚本上无声地失败。尝试使用:
jjjwad0x4#
我最近遇到了这个问题,这是因为我没有把我的测试文件 Package 在
<?php
和?>
标签中。