所以我有一个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吐出一个解析错误.仍然没有输出.
在运行时之前可能会禁用display_errors.您可以使用-d开关手动打开它:
php -d display_errors=1 -f my_script.php myArguments
我遇到了同样的问题,没有多少强制PHP display_errors
或检查语法有-l
帮助
我终于解决了我们的问题,也许你可以找到一些帮助解决这个问题
不使用php.ini测试脚本:
php -n test_script.php
这将帮助您了解真正的原因 - PHP配置,其他人的脚本或您的脚本
在我的情况下,这是一个问题,其他人的脚本是通过auto_prepend_file
php.ini中的指令添加的.(或者更具体地说,之后的几个文件和函数,因为我在所有代码中添加了调试,因为我去了 - 在旁注中,您可能会发现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的问题,或者你(或其他人)可能已经使用它@
没有意识到它在调试中导致的严重(和令人沮丧和耗时)的后果