【问题标题】:Most correct way to run php at the linux shell在 linux shell 上运行 php 的最正确方法
【发布时间】:2012-04-18 01:45:09
【问题描述】:

有没有从命令行使用 php 的正确方法...或者更确切地说...一种方法比另一种更正确?

如果您创建一个文件,请使用以下代码说 test.php:

#!/usr/bin/php
<?php
print "This is a test".PHP_EOL;
print "This is another test!!";
?>

然后 chmod +x text.php(使其在 linux 上可执行)。

然后您可以通过以下方式运行...... ./test.php 或者 php test.php

我更喜欢只使用 ./test.php,但经常在示例中看到 php test.php

是 shebang 行的以下正确语法 #!/usr/bin/php 还是这更正确 #!/usr/bin/php -q

我都见过,并且看到 -q 标志是为了让 html 内容安静,但想知道是否 使用 cli 兼容性编译的 php 确实需要 -q 标志???
谢谢你的帮助:)

【问题讨论】:

  • ./test.phpphp test.php 是同一个东西,只是前者需要可执行。
  • 同意,我只是想知道一种方法是否更适合 php。在我看来,一种方法并不比另一种更好,这取决于您对代码的处理方式。

标签: php linux shell


【解决方案1】:
#!/usr/bin/php

在解释器脚本的第一行,“#!”是用来解释文件内容的程序的名称。例如,如果第一行包含

"#!/bin/sh"

,然后文件的内容作为shell脚本执行。

在您的情况下,这意味着使用 /usr/bin 位置中的 php 文件执行脚本。

使用php test.php 意味着您正在使用php 运行test.php,因此您不需要第一行。至于 ./test.php 你的文件需要是可执行文件并且第一行是必需的。

关于 -q 标志请看this 特别是在

抢 2007 年 3 月 23 日 11:48

如果你看到 -q 会有更好的扩展。这是另一个one

【讨论】:

  • 您的最后一个链接回答了有关 -q 标志的问题。 “这只涉及针对 CGI SAPI 构建的 PHP 解释器。”使用他们给出的示例进行测试,似乎带有cli的php在运行时不需要-q标志。谢谢。 :)
【解决方案2】:

如果你是为自己的目的编写小的 php 脚本,#! 很好。

如果它们要在某种世界可见的盒子上(例如网络服务器),那么我会说不太好 - 因为你已经让它们可执行,它们现在是一个安全风险。

我倾向于将 #! 用于 perl、sh(它们总是很少的私有、非生产的东西)和 php somefile.php 用于 PHP(可能会或可能不会最终在服务器上)。

【讨论】:

  • 我写了很多 perl 和 bash/shell 脚本/程序,我理解 shebang 行,以及使任何东西可执行的安全隐患。命令行中的脚本/程序不会“面向网络”,并且类似于 shell 脚本。我肯定倾向于使用 shebang 行的 chmod+x,所以我可以去掉“.php”并仍然执行它,以防我决定用其他语言重新编码,我仍然可以使用相同的名称。谢谢。
  • 在这种情况下:没有区别(但为什么要删除扩展名?这只会变得很痛苦,尤其是如果您使用>1种语言)
  • 如果你有一个可执行文件,并把它放在 /usr/local/bin/myprogram 中,你可以只用“myprogram”而不是“myprogram.php”来调用它。如果在某个时候您决定用另一种语言(例如 C)重写它,您的名称可以保持不变,并且如果它用于其他应用程序,则不必为新名称重写它们。我放入 /usr/local/bin/ 的大多数可执行文件都省略了扩展,无论是 perl/bash/ksh 等。
  • 我明白这一点,但根据我的经验,这永远不会发生 - 一旦它被编写并工作,它就会保持原样;-) 但是,如果它适合你的情况,这是一个正当的理由!
猜你喜欢
  • 2019-09-05
  • 2017-09-21
  • 1970-01-01
  • 1970-01-01
  • 2011-06-17
  • 1970-01-01
  • 2014-01-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多