Как я могу проверить, будет ли ini_set работать на сервере? - PullRequest
9 голосов
/ 17 декабря 2011

Как я могу проверить, позволяет ли конфигурация сервера установить такой параметр, как:

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

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

Ответы [ 3 ]

11 голосов
/ 17 декабря 2011

Проверьте, разрешено ли мне использовать 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, который предоставит вам подробную информацию о каждой доступной опции, и это уровень доступа .

$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 (). Чтобы очистить ранее установленное значение, не используйте ничего в качестве значения.

1052 *

php_admin_flag имя включено | выключено

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


Пример (взято из этой документации)

<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>
4 голосов
/ 17 декабря 2011

Невозможно узнать, каков ваш реальный лимит, если вы не попытаетесь установить желаемое значение.Например, может быть установлен патч 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 голосов
/ 17 декабря 2011
echo ini_get (<BLA>);
ini_set (<BLA>);
echo ini_get (<BLA>);
...