2011-12-17 2 views
9

Как я могу проверить, если конфигурация сервера позволяет мне установить опцию вроде:Как я могу проверить, будет ли ini_set работать на сервере?

ini_set('upload_max_filesize', '8M'); 

в PHP скрипт? Вот список php.ini directives, но я не могу понять, как сделать чек перед tring, чтобы изменить это значение.

+0

Blocking? кто изменит настройки ini на вашем сервере? –

+0

Думаю, вы не можете их заблокировать. Параметры, которые вы можете установить во время выполнения, могут быть установлены. – djot

+0

читайте этот комментарий: http://www.php.net/manual/en/function.in-set.php#30424 – yasar

ответ

10

Проверьте, разрешено ли мне использовать ini_set для некоторых option, как?

ini_set вернет старую ценность при успешном завершении, а false * при сбое. С помощью этих знаний вы можете написать заявление, проверяющее, прошел ли ваш звонок, как показано ниже.

$result = ini_set ("some_option", "some_value"); 
$failure = (version_compare(PHP_VERSION, '5.3.0') >= 0) ? false : ''; 
if ($result === $failure) 
    echo "Unable to use ini_set to change 'some_option'!"; 

(*): Обратите внимание, что возвращаемое значение изменилось в PHP 5.3.0 из '' (пустая строка) в false. Поэтому вам нужно также проверить свою текущую версию PHP.


Другой способ заключается в использовании ini_get_all, который предоставит вам подробную информацию относительно каждой опции доступны, и это access level.

$all_option_details = ini_get_all(); 

/* see the comments in this post regarding PHP_INI_USER vs INI_USER 
* seems like someone writing the relevant PHP documentation fcuked up 
* 
* props to @soulmerge */ 

if ($all_option_details['upload_max_filesize']['access'] & INI_USER) 
    echo "we are allowed to change upload_max_filesize from with ini_set!"; 

Я хотел бы, чтобы отключить использование ini_set для некоторого варианта (ов), как?

Есть несколько способов сделать варианты неизменяемыми временем выполнения (в некотором смысле отключив ini_set), среди которых следующие два, которые вы можете узнать больше по предоставленной ссылке.

php_admin_value значение имя

Устанавливает значение указанной директивы. Это невозможно использовать в файлах .htaccess. Любой тип директивного набора с php_admin_value не может быть переопределен .htaccess или ini_set(). Чтобы очистить ранее установленное значение, используйте значение не как значение.

php_admin_flagимя на | от

Используется для установки булевой директивы конфигурации. Это невозможно использовать в файлах .htaccess. Любой тип директивного набора с php_admin_flag нельзя переопределить .htaccess или ini_set().


Пример (из this документации)

<IfModule mod_php5.c> 
    php_value include_path ".:/usr/local/lib/php" 
    php_admin_flag engine on 
</IfModule> 

<IfModule mod_php4.c> 
    php_value include_path ".:/usr/local/lib/php" 
    php_admin_flag engine on 
</IfModule> 
+0

Я выполняю твой метод, но в моей системе (локальная разработка), эхо, «PHP_INI_USER» дает мне неопределенный _Использование неопределенной константы PHP_INI_USER _... – Polmonino

+0

Согласно документации 'PHP_INI_USER' имеет значение' 1', поэтому мы должны использовать это значение вместо этого (т. Е. Не использовать константу) –

+0

Использование магических чисел вместо констант никогда хорошая идея, если константа отсутствует, для этого должна быть причина. Согласно документации 'ini_get_all()' параметр $ details был введен в PHP 5.3. Похоже, что Polmonino использует более раннюю версию PHP. – soulmerge

-3
echo ini_get (<BLA>); 
ini_set (<BLA>); 
echo ini_get (<BLA>); 
4

Это невозможно знать, что ваш реальный предел, если вы пытаетесь установить желаемое значение. Возможно, установлен патч suhosin, который может помешать вам вообще изменить значение.

Таким образом, ваш единственный вариант для проверки, если это возможно, чтобы попробовать и проверить возвращаемое значение (которое вы должны в любом случае):

$oldValue = ini_get('upload_max_filesize'); 
if (ini_set('upload_max_filesize', '8M') === false) { 
    die("Couldn't update upload file size."); 
} 
if (ini_set('upload_max_filesize', $oldValue) === false) { 
    die("Error resetting upload file size."); 
} 
// you can safely assume that it is possible to set 
// upload_max_filesize to 8M from this line onward. 
+0

+1 для кончика сухозина. – Polmonino

+0

Проверьте мое сообщение для альтернативных методов, вам не нужно называть 'ini_set', чтобы увидеть, возможно ли изменить значение. Кроме того, вы должны написать 'ini_set (...) === false', вышеописанное может потенциально лежать из-за неявных правил преобразования. –

+0

@refp: thx, исправлена ​​обратная проверка – soulmerge

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