给出命令:
/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
文件,而是获取此处可能存在的任何参数。
答案 0 :(得分: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
答案 1 :(得分:2)
-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
选项不是其中之一。
您可以使用php.ini
在已执行的PHP脚本中获取已使用的get_cfg_var
文件。
echo get_cfg_var('cfg_file_path');
如果您传递-c
选项,您将获得php.ini文件的路径。否则你会得到默认的php.ini文件。
答案 2 :(得分:0)
不幸的是,由于如何解析命令行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 :(得分:0)
我使用如下内容,因为它不需要任何解析。
$ (ARGS="-c /path/to/custom/php.ini"; /usr/bin/php $ARGS /path/to/script.php $ARGS)