Подтвердить что ты не робот

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, но любые аргументы, которые могут присутствовать здесь.

4b9b3361

Ответ 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)