【问题标题】:Is #!/usr/bin/env required to run PHP from command line?从命令行运行 PHP 是否需要 #!/usr/bin/env?
【发布时间】:2012-01-05 05:01:11
【问题描述】:

通常当我看到要从命令行运行的 PHP 时,它会在文件顶部有这样一行 #!/usr/bin/env php...

#!/usr/bin/env php
<?php
    // code
?>

我想知道这是否仅适用于在 Linux/Unix 系统上运行文件时,还是在 Windows 上运行时也需要?

【问题讨论】:

  • 顺便说一句:如果 ?&gt; 出现在文件的末尾,最好在 PHP 代码中跳过它。
  • @Tadeck 是的。除非您有充分的理由,否则切勿添加 ?&gt;

标签: php command-line command-line-interface


【解决方案1】:

自动检测脚本类型需要 shebang 行。它支持这种用法:

[pfisher ~]$ chmod +x run-me.php
[pfisher ~]$ run-me.php

如果您将文件名作为参数传递给 php 解释器,则不需要该行,如下所示:

[pfisher ~]$ php run-me.php

编辑:将 "hashbang" 替换为 shebang

【讨论】:

  • 当然,这只适用于 *nix。在 Windows 上,您必须在命令行中使用 &gt; php run-me.php
  • 另外值得一提的是,由于这一行,您可以重命名脚本文件,使其不包含扩展名。这样你就可以在不知道它是什么语言的情况下执行它:./run-me.
  • @ThatOtherPerson,Windows 有自己的版本:stackoverflow.com/a/6818266/632951
  • shebang |哈希棒? hashbang 我以前从未听说过。但我不是英国人|我们本地人
  • @f b:同意。 Hashbang 是一种回归。
【解决方案2】:

不是,你可以直接使用

#!/path/to/php

通过 env 实用程序运行 php(或其他任何东西)是一种弱安全措施。依赖于平台,将根据各种配置文件“修复”PATH、LIB 和其他环境变量,并可能删除其中的一些危险值(例如 HPUX 上的 env)。

这也是为了限制某些环境下 shell 扩展的范围。 (参见 Linux 上的 man 1 env)。

【讨论】:

  • #!/usr/bin/env php 也被使用,因为 #!/path/to/php 在不同的系统上是不同的,不是吗?
  • 不,/usr/bin/env 没有做任何事情——它在 shebang 中所做的只是在你的$PATH 上搜索 php(或其他),以应对解释器所在的系统有点奇怪,比如/usr/local/bin
  • 实际上它确实做到了我在回答中所说的。去阅读那些系统的手册页。
  • 我有 php7.4 的别名,但 usr/bin/env php -v 给出 5.4.16。如何将 that php 版本更改为 7.4?
  • @samerivertwice 哪个操作系统?在 debian 系统上(debian、unbuntu、kubuntu...):update-alternatives --config php 但这仅属于 cli!
【解决方案3】:
  1. 魔法属于可执行标志 (chmod +x FILE)
  2. shebang:如果它与那个版本一起存在,你可能会期望
    • /usr/bin/env cliVersion -> /usr/bin/env php
    • php -v # 告诉你默认的版本是:'cli' in a shell

另外使用例如:

php8.0 /to/php/script.php

在脚本的第一行不带shebang 运行它。 (即使它留在那里也可以工作,但如果对您很重要,请检查执行时的真实 php 版本)

“标准”?在过去 10 年中是 /usr/bin/env,具体取决于您设置为系统默认的版本:

debian 系统(debian、unbuntu、kubuntu...):#root: update-alternatives --config php 将指导您

【讨论】:

    猜你喜欢
    • 2015-02-01
    • 1970-01-01
    • 2013-01-28
    • 1970-01-01
    • 2013-08-12
    • 1970-01-01
    • 2015-08-01
    • 1970-01-01
    • 2014-02-21
    相关资源
    最近更新 更多