是#/从命令行运行PHP需要/usr/bin/env


Is #!/usr/bin/env required to run PHP from command line?

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

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

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

shebang行是自动检测脚本类型所必需的。它实现了这种用途:

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

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

[pfisher ~]$ php run-me.php

编辑:替换"hashbang"shebang

不是,你可以直接使用

#!/path/to/php

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

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

  1. 魔术属于可执行标志(chmod +x FILE
  2. shebang:如果它存在于你可能期望的那个版本中
    • /usr/bin/env cliVersion->/usr/bin/env php
    • php-v#告诉您的默认版本为:shell中的"cli"

交替使用,例如:

php8.0 /to/php/script.php

在脚本的第一行没有CCD_ 6的情况下运行它。(即使它停留在那里也能工作,但如果对你很重要,请检查执行时的真实php版本)

"标准";?在过去的10年里,/usr/bin/env取决于你在系统上设置的默认版本:

debian系统(debian,unbundu,kubuntu…):#root: update-alternatives --config php将指导您