【问题标题】:PHP: How to get internal arguments?PHP:如何获取内部参数?
【发布时间】:2013-03-11 15:02:15
【问题描述】:

给定命令:

/usr/bin/php -c /path/to/custom/php.ini /path/to/script.php

我想获得内部选项:

-c /path/to/custom/php.ini

我尝试过的方法不起作用:

  • $argv 包含['/path/to/script.php']
  • getopt('c') 包含[]
  • $_ENV 不包含它
  • $_SERVER 不包含它

我还查找了 PHP_* 常量(例如 PHP_BINARY),但找不到这些参数。

有没有办法得到这些论点?请注意,我不是试图获取加载的 ini 文件,而是获取此处可能存在的任何参数。

【问题讨论】:

  • 会建议将 var_export($_SERVER) 作为第一个调用端口,这也不是脚本参数,所以我怀疑你会看到它,我似乎记得你只会看到任何出现的 args在脚本之后。另外,您是否仅尝试获取自定义 INI?或传递给php的任何参数?如果您只想要 ini,请查看 php.net/manual/en/function.php-ini-loaded-file.php
  • echo shell_exec('ps -p '.getmypid().' -o args=');

标签: php command-line-arguments


【解决方案1】:

-c /path/to/custom/php.ini 是在启动脚本之前传递给 PHP 解析器、解释器和其他内部组件的选项。

/path/to/script.php 是一个实际参数,不仅传递给 PHP 可执行文件,还传递给您的脚本。

/usr/bin/php -c /path/to/custom/php.ini /path/to/script.php A B C 等以下参数也将传递给您的脚本。

很遗憾,-c 选项不是其中之一。

您可以使用get_cfg_var 在执行的PHP 脚本中获取使用过的php.ini 文件。

echo get_cfg_var('cfg_file_path');

如果您传递 -c 选项,您将获得 php.ini 文件的路径。否则你会得到默认的 php.ini 文件。

【讨论】:

    【解决方案2】:

    不幸的是,由于命令行 BASH 参数的解析方式,您将无法在脚本调用之前访问这些参数。现在,/usr/bin/php 程序有

    argv[0]=/usr/bin/php
    argv[1]=-c
    argv[2]=/path/to/custom/php.ini
    argv[3]=/path/to/script.php
    

    这就是你的论点落地的地方。另一方面,您的脚本有:

    argv[0]=/path/to/script.php
    

    只是因为参数是从右到左处理的,并且在你的脚本调用之后没有参数。

    【讨论】:

      【解决方案3】:

      PHP 没有执行此操作的内部方法,因此您将不得不依赖某些系统信息和权限。

      $pid = getmypid();
      $ps = `ps aux | grep $pid`;
      $command = substr($ps, strpos($ps, '/usr/bin/php'));
      $args = explode(' ', $command); //not pretty, should probably use preg
      

      【讨论】:

      • 除非 -H 作为 php 参数传递,否则它会这样做。也不需要你可以将-p pid 传递给ps 以获得特定的pid - 不需要greping。
      • ps aux | grep pid | grep -v grep | awk '{for(i=11;i<=NF;i++) printf $i" ";printf "\n"}'
      【解决方案4】:

      我会使用如下的东西,因为它不需要任何解析。

      $ (ARGS="-c /path/to/custom/php.ini"; /usr/bin/php $ARGS /path/to/script.php $ARGS)
      

      【讨论】:

      • 其他一些脚本可能会在命令行上调用它。外部脚本不太可能将选项作为参数传递。
      • @HaralanDobrev,是的,应该在受控环境中使用
      猜你喜欢
      • 2016-01-07
      • 2021-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多