2014-07-02 2 views
4

Я изо всех сил, чтобы переопределить конфигурацию PHP CLI, с моей пользовательской php.iniКак переопределить конфигурацию PHP CLI, с пользовательскими php.ini

Мой заказ php.ini

max_execution_time = 90 
memory_limit = 256M 
safe_mode = Off 

Запуск PHP CLI

php -c /home/env/php.ini -r 'phpinfo();' | grep 'memory_limit' 

выходы

memory_limit => 256M => 256M 

Однако пользовательский php.ini, похоже, не переопределяет max_execution_time или safe_mode, поскольку он выводит 0 и On, а не 90 и Off.

Запуск этой простой скрипт

#!/usr/bin/php -c /home/env/php.ini 
<?php echo 'memory_limit: ' . ini_get('memory_limit'); 

выводит конфигурацию консоли по умолчанию (128M), а не 256M, как ожидалось.

Запуск Этот простой скрипт

#!/usr/bin/php -d max_execution_time=90 
<?php echo 'max_execution_time: ' . ini_get('max_execution_time'); 

выходы 90, как и ожидалось.

До сих пор мне удалось переопределить только одну конфигурационную директиву во время выполнения, поэтому любая помощь очень ценила, как переопределить несколько конфигурационных директив.

Edit:

php -a 
php > parse_ini_file('/home/env/php.ini'); 

выходы без ошибок, поэтому я предполагаю, что мой заказ php.ini нормально. Я бы только что обнаружил, что выполнение

#!/usr/bin/php -c /home/env/php.ini 
<?php echo 'memory_limit: ' . ini_get('memory_limit'); phpinfo(); 

говорит, что загруженный файл конфигурации => (none). Кажется, это проблема. PHP CLI, похоже, не загружает мой файл php.ini, даже если путь верен, и синтаксис тоже кажется слишком хорошим.

Решение:

Это не представляется возможным переопределить несколько директивы конфигурации во время выполнения с притон, по крайней мере, для меня. Но удаление shebang и выполнение следующей команды решили проблему для меня.

php -d max_execution_time=90 -d memory_limit=256M -d safe_mode=Off -f test.php 
+0

'#!/Usr/bin/php -c/home/env/php.ini' '

+0

Как выполнить тестовый файл? Например, в нижней части вашего вопроса? – hek2mgl

+0

@ hek2mgl Мой тестовый файл выполняется с консоли: $ ./cli.php – longtimejones

ответ

0

Попробуйте поместить строку «safe_mode = Off» в качестве первой строки в вашем пользовательском файле. Если я правильно помню, PHP анализирует значения в ini-файле в порядке их возникновения.

Это означает, что отключите safe_mode в каждом php.ini, если вам разрешено делать это на вашем сервере и больше не полагайтесь на эту функцию. После этого используйте функцию ini_set в своем коде, чтобы изменить все, что вам нравится, сколько вам нравится. Я считаю, что лучше иметь конфигурацию, которая требуется скрипту в самом скрипте, а не через дополнительные параметры командной строки или ini-файлы.

Fyi, безопасный режим PHP удаляется с PHP версии 5.4, поэтому отключение его в старой версии - это хорошая практика иметь меньше проблем при обновлении до более новой версии.

+0

Спасибо за предоставление возможного решения. Однако я больше не имею доступа к этому конкретному серверу. Но ваш ответ кажется довольно разумным. – longtimejones

1

Я также пытался установить max_execution_time также с помощью CLI, и я не смог это сделать.

От documentation Я понимаю, что он жестко закодирован и не может быть изменен в среде CLI.

Во всяком случае, я нашел timeout команду полезным:

timeout 60 php -d memory_limit=1024M script.php 

(запустить скрипт в течение 60 секунд максимум).

Смежные вопросы