【问题标题】:PHP cli only works with "-n"PHP cli 仅适用于“-n”
【发布时间】:2014-12-06 04:50:20
【问题描述】:

我被 PHP CLI 问题困扰了好几天:

我没有输出,只有一个空行和我运行时等待指令的光标:

php -r "echo 1;"

但是当我使用 -n 运行这一行时(不会使用 php.ini 文件),一切正常:

php -nr "echo 1;"

我真正的问题是我的composer 快捷方式(/bin/composer)不再起作用,我现在每次都必须写php -n /bin/composer

我在 Debian Wheezy 上工作,我的 PHP 版本是最新的 (5.4.4-14)。

我重新安装了 php 很多次都没有成功。拜托,你能帮帮我吗?

【问题讨论】:

  • 您是否尝试过检查与 PHP 相关的错误系统日志?您的 php.ini 文件之一似乎有问题。如果系统日志没有显示任何内容,您可以查看您的 ini 文件注释掉行,直到找到解决方案。
  • @LoganBailey 确实,我检查了 PHP 错误日志并没有记录任何错误(除非我故意触发一个很奇怪的错误,因为这意味着我的 php 行被很好地解释了)。我还从另一台服务器复制了另一个 PHP ini 文件,该文件可以在完全相同的 PHP 版本上正常工作,但它没有改变任何东西。
  • 运行php -r "echo 1;"后的退出码是什么? (之后运行echo $?)。
  • 非常感谢@DrewHammond,你找到了它:我刚刚删除了 php-common 和 php5-cli(我没有尝试卸载 php-common,我的错)并重新安装,它成功了!我不知道如何在堆栈溢出中接受您的答案,所以我会发布一个答案并在其中参考您。
  • @AlbanPommeret “......所以我会发布一个答案并在其中提及你。”你不应该这样做。发帖者不应抄袭他人的 cmets 作为答案。让回答者这样做。然后检查他们的答案和赞成票。如果他们没有发布答案,请鼓励用户发布作为答案。

标签: php linux composer-php


【解决方案1】:

重新安装 php5-cliphp5-common 软件包以及您需要的任何其他依赖项例如您上面提到的libssh2-php.

sudo apt-get install --reinstall php5-common php5-cli

【讨论】:

    【解决方案2】:

    1.作曲家

    请尝试将 Composer 重新安装到您的 /bin 文件夹。

    将 Composer 全局安装到 /bin/composer

    curl -sS https://getcomposer.org/installer | php
    
    mv composer.phar /bin/composer
    

    如果移动失败,请使用 sudo。

    运行作曲家

    然后运行/bin/composer,而不是php composer.pharphp -n /bin/composer

    如果无法执行,chmod +x /bin/composerthe documentation for more information


    2。 PHP CLI

    php -r "echo 1;" 应该在换行符上返回“1”。

    如果这没有发生,那么您可能需要查看 CLI 的 PHP.ini 文件。

    当应用-n 开始工作时(未使用ini + 使用默认设置),这表明配置有问题。

    获取加载的ini的路径:php --iniphp -i | grep 'Configuration File'

    在 Debian 上,该位置应该是 /etc/php5/cli/php.ini

    然后查找可能会影响输出的 ini 指令,例如 output_buffering 与implicit_flush 的组合。 CLI 上的 output_buffering 默认关闭。如果 output_buffering 意外打开,而implicit_flush 关闭并且您不手动刷新缓冲区,您将看不到任何输出。

    确保打开错误处理指令和日志记录:display_errorsdisplay_startup_errorslog_errors

    【讨论】:

    • 谢谢 Jens-André 但我认为我的问题与 Composer 无关,因为我的 php 命令行也受到了影响。如果我运行php -n /bin/composer,Composer 就像一个魅力。我在运行 symfony 应用程序/控制台时也遇到了同样的问题。不过,我很欣赏您详细介绍了 Composer 安装过程以便在全球范围内使用它。
    • 我只是想指出这一点,因为你写了“我真正的问题是我的作曲家快捷方式..”。您不需要使用“php -n /bin/composer”,因为 phar 文件是可执行的。使用 composer 的命令是“/bin/composer”。我在答案中附加了“PHP -r”与“PHP -nr”问题的提示。
    • 没问题,我知道 composer.phar 是自我可执行的,因为它的 shebang 行。我的问题是它在没有“-n”参数的情况下执行,所以由于我的 PHP cli 问题,它什么也不做。当我说我的问题来自 Composer 时,我可能误会了,对不起。我之所以这么说,是因为当我使用 composer 时,这个问题对我来说特别烦人。
    • 我刚刚按照您的建议检查了我的 php.ini 文件中的 output_buffering,您说得对,我的 output_buffering 为 4096 而不是 Off。我的implicit_flush 已关闭。我尝试修改它们的值,但没有任何结果。我确信这个 php.ini 文件是 cli 使用的文件,因为当我格式化它时,我得到 php.ini 错误。此外,这个 php.ini 文件也在另一台服务器上使用,当我运行 php 命令时,这个文件就像一个魅力。无论如何,谢谢你帮助我。
    • 这个ini在另一台服务器上工作对我来说很神秘。最后一件事,在我没有想法之前:您可能会进行清理或从头开始重建 PHP.ini。换句话说:从一组减少的 CLI 指令开始,这些指令可以工作。然后继续扩展工作 ini。从错误处理开始,然后添加扩展,不包括缓冲。所有“未包含”指令都将使用其默认设置。希望你弄清楚!祝你好运,)
    猜你喜欢
    • 2014-12-23
    • 1970-01-01
    • 2014-06-09
    • 2011-09-09
    • 1970-01-01
    • 2016-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多