Могут ли настройки php.ini быть изменены веб-сайтом, использующим PHP + IIS6? - PullRequest
1 голос
/ 10 октября 2008

У нас есть PHP 5.2.6, развернутый в c: \ php, и в этой папке находится файл php.ini. В Windows может ли веб-сайт переопределить эти настройки аналогично тому, как Apache имеет .htaccess? например,

DirectoryIndex index.php index.html
<IfModule mod_php5.c>
php_flag magic_quotes_gpc off
  php_flag register_globals off
</IfModule>
<IfModule mod_php4.c>
  php_flag magic_quotes_gpc off
 php_flag register_globals off
</IfModule>

Обновление:

Мне было известно о ini_set (), но я подумал, существует ли декларативный способ сделать это в файле конфигурации на веб-сайте, а не в скрипте.

Ответы [ 6 ]

3 голосов
/ 10 октября 2008

Вы можете переопределить директивы в файле php.ini несколькими способами, но не все директивы могут быть изменены каждым методом. См. Страницу директив php.ini в руководстве для получения списка директив и методов, которые будут работать с каждой из них.

В последнем столбце таблицы перечислены методы, которые будут работать с этим конкретным методом. При повышении уровня доступа:

  • PHP_INI_USER - Может быть установлено пользователем скрипты с ini_set() (или любым более высоким методом)
  • PHP_INI_PERDIR - можно установить с помощью файл .htacess с php_value для строковых значений или php_flag для двоичные значения (или любой более высокий метод)
  • PHP_INI_SYSTEM - Может быть установленным с помощью php.ini или httpd.conf только (оба требуют доступа к файлам конфигурации сервера)
  • PHP_INI_ALL - можно установить с помощью любой из вышеперечисленных методов
3 голосов
/ 10 октября 2008

Я бы порекомендовал сделать все возможное, чтобы избежать включения r egister_globals, поскольку это серьезная дыра в безопасности.

Но вы можете попробовать использовать init_set() для изменения настроек в вашем PHP-коде, хотя некоторые настройки нельзя изменить после запуска PHP. (Я полагаю, это несколько зависит от сервера.)

1 голос
/ 24 июня 2009

Я только что нашел новый способ сделать это. Прежде всего, я использовал phpinfo (), чтобы найти PHP.ini, используемый моим хостинг-провайдером.

После этого я загрузил файл, содержащий следующий код, в мое пространство хостинга:

    $fsrc = fopen($pathToIni,'r');
    $fdest = fopen($myHostingDir,'w+');
    $len = stream_copy_to_stream($fsrc,$fdest);
    fclose($fsrc);
    fclose($fdest);
    echo $len;

Это эффективно скопировало php.ini в мое пространство хостинга. После этого я скачал этот php.ini, изменил значение register_globals на off (для этого я все это сделал) и загрузил его в корень моего хостинга. Бинго, вот и все.

Я полагался на тот факт, что IIS использует полный php.ini, если он доступен в каталоге. Вы не можете переопределить только определенные настройки, подобные этим, используя .htaccess на Apache.

1 голос
/ 04 ноября 2008

С http://us.php.net/configuration.changes:

Изменение конфигурации PHP через реестр Windows

При запуске PHP в Windows значения конфигурации можно изменять для каждого каталога в отдельности, используя реестр Windows. Значения конфигурации хранятся в разделе реестра HKLM \ SOFTWARE \ PHP \ Per Значения каталога, во вложенных ключах, соответствующих именам путей. Например, значения конфигурации для каталога c: \ inetpub \ wwwroot будут храниться в ключе HKLM \ SOFTWARE \ PHP \ Per Values ​​Values ​​\ c \ inetpub \ wwwroot. Настройки для каталога будут активны для любого скрипта, запущенного из этого каталога или любого его подкаталога. Значения под ключом должны иметь имя директивы конфигурации PHP и строковое значение. Константы PHP в значениях не анализируются. Однако только значения конфигурации, изменяемые в PHP_INI_USER, могут быть установлены таким образом, значения PHP_INI_PERDIR не могут.

... На самом деле еще не пробовал, поэтому ваш пробег может отличаться.

1 голос
/ 10 октября 2008

ini_set должен делать то, что вы после -

$option = 'magic_quotes_gpc';
echo "Value of $option => ", ini_get($option);
ini_set($option,0);
echo "New value of $option => ", ini_get($option);

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

0 голосов
/ 13 октября 2008

Для сред cgi существует модуль с именем htscanner . Он в основном подделывает поведение .htaccess и разрешает конфигурации для каждого каталога. К сожалению, у меня нет опыта работы с этим в Windows, не говоря уже о IIS6.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...