PHP: Как получить внутренние аргументы?
С учетом команды:
/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
, но любые аргументы, которые могут присутствовать здесь.
Ответы
Ответ 1
У 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
Ответ 2
-c /path/to/custom/php.ini
- это опция, переданная парсеру PHP, интерпретатору и другим внутренним компонентам, даже после запуска script.
/path/to/script.php
- фактический аргумент, передаваемый не только исполняемому файлу PHP, но и ваш script.
Следующие аргументы, такие как /usr/bin/php -c /path/to/custom/php.ini /path/to/script.php A B C
, также будут переданы вашему script.
К сожалению, параметр -c
не является одним из них.
Вы можете получить использованный php.ini
файл в исполняемом PHP скрипт с помощью get_cfg_var
.
echo get_cfg_var('cfg_file_path');
Если вы передаете параметр -c
, вы получите путь к файлу php.ini. В противном случае вы получите файл php.ini по умолчанию.
Ответ 3
К сожалению, из-за того, что аргументы командной строки BASH разобраны, вы не сможете получить доступ к аргументам перед вызовом script. Прямо сейчас, программа /usr/bin/php
имеет
argv[0]=/usr/bin/php
argv[1]=-c
argv[2]=/path/to/custom/php.ini
argv[3]=/path/to/script.php
И где ваши аргументы приземляются. С вашей стороны script есть:
argv[0]=/path/to/script.php
Просто потому, что аргументы обрабатываются справа налево, и после вашего вызова script нет аргументов.
Ответ 4
Я бы использовал что-то следующим образом, поскольку он не требует синтаксического анализа.
$ (ARGS="-c /path/to/custom/php.ini"; /usr/bin/php $ARGS /path/to/script.php $ARGS)