【问题标题】:pass arguments to php build in server将参数传递给 php build in server
【发布时间】:2015-03-09 14:21:08
【问题描述】:

我正在使用 PHP 内置的 Web 服务器,例如 php -S localhost:8000,我想将一些参数传递给 php 脚本。

我尝试使用$argv,但它返回null

我尝试使用getopt(),但它返回false

在使用内置 Web 服务器时,是否可以将参数传递给 PHP 脚本?如果有,怎么做?

【问题讨论】:

  • 警告 此 Web 服务器旨在帮助应用程序开发。它也可用于测试目的或在受控环境中运行的应用程序演示。它并非旨在成为功能齐全的 Web 服务器。它不应该在公共网络上使用。
  • @JayBlanchard 这不是重复的,因为这是关于内置 Web 服务器,而不是通用 php 脚本
  • 内置网络服务器?内置什么?
  • @Daan 感谢您的警告。我知道,我将它用于一个简单的个人项目

标签: php server


【解决方案1】:

我今天遇到了与此类似的需求(需要“分叉”自身以处理几个 HTTP 请求的 CLI 脚本),并提出了以下仅限 Linux 的解决方案。

您需要使用以下方式调用开发服务器:

php -S localhost:8000 index.php -- your 'command arguments' here

下面的代码(位于index.php 或任何您的路由器中),然后从/proc/self/cmdline 读取完整的进程命令行并丢弃其中的项目,直到到达-- 标记。

对于上面的示例,这将导致4$argc["/path/to/index.php", "your" "command arguments" "here"]$argv

$cmdline = file_get_contents('/proc/self/cmdline');
$argv = str_getcsv($cmdline, "\0");
while (true) {
    $arg = array_shift($argv);
    if ($arg === null || $arg === '--') {
        // Stick whatever on the start to align with normal $argv
        array_unshift($argv, __FILE__);
        if ($arg !== null) {
            // Remove extra empty arg at the end
            array_pop($argv);
        }
        break;
    }
}
$argc = count($argv);

print('<pre>');
var_dump($argc, $argv);
print('</pre>');

【讨论】:

    猜你喜欢
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-17
    • 2012-03-12
    • 2011-08-07
    相关资源
    最近更新 更多