【问题标题】:make a PHP script executable from CLI and include-able?使 PHP 脚本可以从 CLI 执行并包含?
【发布时间】:2013-07-25 11:02:43
【问题描述】:

考虑一下:

#!/usr/bin/php
<?php
class Foo {
        static function bar () {
                echo "Foo->bar\n";
        }
}
if (PHP_SAPI === 'cli') {
        Foo::bar();
}
?>

我可以从 CLI 执行此操作,但是当我在例如 CGI 运行的 PHP 脚本中 include 时,shebang 最终会出现在输出中。

我喜欢简单的脚本紧凑:我想我可以将class 部分放在一个单独的“lib”文件中,并为 CLI 使用一个简单的包装器。但我想把它全部放在一个地方,而不必担心包含路径等。

如果没有ob_*-包装include 来捕获shebang(如果这甚至可能的话),这是否可能,或者无论如何将所有这些都塞进一个文件是愚蠢的?欢迎使用替代方案/想法/最佳实践!

编辑:我想将脚本放在我的PATH 中,所以调用我宁愿不使用php file.php 调用它。请参阅我对@misplacedme 的回答的评论

【问题讨论】:

  • 你可以在不需要 shebang 的情况下逃脱,只要确保你的调用完整路径到你的 php 二进制文件就可以了
  • @Dave - 这不是 misplacedme 的回答吗?对不起,如果我错了,我真的不明白“你的电话完整路径”......
  • 我知道这是旧的,@kubi,你似乎并没有经常在这里闲逛,但如果你仍然看到这个,只是想知道:你最后得到了什么? AFAIK 即使在今天也无法解决这个问题(PHP 7.2)。它至少需要一个新的命令行选项(和/或 ini 设置)来告诉 PHP 不要输出 shebang,如果它存在的话。
  • 因为这更多是为了方便和好奇而不是必要性,所以我放弃了这个问题,@Sz。而且我确实经常潜伏在这里。

标签: php


【解决方案1】:

其实很简单。
删除 shebang 并在运行脚本时将其运行为
php scriptname.php/path/to/php scriptname.php
而不是
./scriptname.php

运行php script.php 将只查看当前目录或PATH 中的任何目录。如果您绝对必须以这种方式运行它,请添加它。 export PATH=$PATH:/path/to/php/script/folder(在 bash 中)
除非您在脚本中使用完整路径,否则这将搞砸包含。
无论您做什么,都必须在某处使用完整路径。

【讨论】:

  • 啊,我没有提到我想在我的PATH 中拥有脚本。像cat somefile | php /usr/local/share/foo.bar.php | sed … 这样的东西并不好玩。
  • 通常php包含在你的路径中,或者你可以添加它。您没有这两种选择吗?
  • php 肯定是,但我的脚本不是。 php file 不是只在工作目录中寻找file 吗?
  • 我在帖子中添加了一些额外内容。路径问题确实是一个单独的问题。
  • 是的,这种有点有效...我将调查这对现实世界的案例有何影响。现实世界中奇怪的边缘案例。谢谢!
猜你喜欢
  • 2019-07-20
  • 1970-01-01
  • 2011-10-18
  • 1970-01-01
  • 2016-09-13
  • 2015-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多