PHP:如何获取内部参数?

PHP:如何获取内部参数?,php,command-line-arguments,Php,Command Line Arguments,发出命令: /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')包含[] $\u ENV不包含它 $\u服务器不包含它 我还查找了PHP.*常量(例如PHP.\u BINARY),但找不到这些参数的常量 有没有办法得到这些论点?请注意,我

发出命令:

/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')
    包含
    []
  • $\u ENV
    不包含它
  • $\u服务器
    不包含它
我还查找了
PHP.*
常量(例如
PHP.\u BINARY
),但找不到这些参数的常量


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

-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)也将传递给脚本

不幸的是,
-c
选项不是其中之一

您可以通过使用
get\u cfg\u var
在执行的php脚本中获取已使用的
php.ini
文件

echo get_cfg_var('cfg_file_path');

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

不幸的是,由于命令行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

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

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

我将使用以下内容,因为它不需要任何解析

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

建议将var\u export($\u SERVER)作为第一个调用端口,而且,这不是脚本参数,因此我怀疑您是否会看到它,我似乎记得您只会看到脚本后面的任何参数。另外,您是否仅尝试获取自定义INI?或者任何传递给php的参数?如果只需要ini,请查看echo shell_exec('ps-p'.getmypid().-o args=')
除非将
-H
作为php参数传递,否则它将执行。也不需要。对于特定的pid,您可以将
-p pid
传递到
ps
,无需进行灰显。
ps aux | grep pid | grep-v grep | awk'{for(i=11;iSome其他脚本可能会在命令行上调用它。外部脚本不太可能将选项作为参数传递。@HaralanDobrev,是的,它应该在受控环境中使用