Как установить директиву Php auto_prepend_file для каждого каталога? - PullRequest
7 голосов
/ 22 ноября 2010

Справочная информация: у меня есть некоторый код, который проверяет, есть ли у пользователя допустимый сеанс, перед обработкой страницы php, которую я хотел бы установить как auto_prepend_file.Однако мне нужно исключить страницу, на которой пользователь пытается войти в систему, из-за необходимости действительного сеанса.Я хотел бы иметь возможность установить значение auto_prepend_file для каждого каталога.

Среда: PHP 5.2.6m Apache 2, запускающая php как cgi, а не как mod_php, в Windows (если это имеет значение) и на машине, над которой у меня полный контроль (не размещенная среда)

Использование файла htaccess отсутствует b / c Я не использую mod_php.Я не смог изменить в php.ini, чтобы установить auto_prepend_file, сервер выдает внутреннюю ошибку.И ini_set () не работает, потому что он / она уже загрузил файл проверки сеанса, прежде чем я могу изменить значение auto_prepend_file.

Я не вижу способа установить auto_prepend_file для каждого каталога, если вы не используете mod_php / htaccess.Я что-то пропустил?

Ответы [ 3 ]

6 голосов
/ 22 ноября 2010

Вы упоминаете, что не можете использовать файлы .htaccess, но можете ли вы внести изменения в httpd.conf и сделать что-то вроде этого:

<Directory "c:/wamp/www/dev/">
    Php_value auto_prepend_file c:/wamp/www/dev/prepend.php
</Directory>

РЕДАКТИРОВАТЬ - просто понял, что это не работаеткогда работает как CGI.Я думаю, что одна вещь, которая будет работать, если вы создадите копию своего файла php.ini, поместите его в каталог и поместите туда директиву prepend, например:

auto_prepend_file = c:/wamp/www/dev/prepend.php
2 голосов
/ 22 ноября 2010

Используйте файлы .user.ini.

http://php.net/manual/en/configuration.file.per-user.php

0 голосов
/ 26 января 2011

Существует отличный учебник под названием: Автоматически включать файлы с PHP и Apache , который объясняет, как это сделать с помощью директивы apache и PHP для добавления кода.в конце.Сначала определите файл, который будет перехватывать страницу до ее вывода, и добавьте все, что вы хотите:

<?php
{
  $script = <<<GA
<script type="text/javascript">
  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-xxxxxxxxx-y']);
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();
</script>
GA;
  $replace = array('</body>','</BODY>');
  $page = str_replace($replace, "{$script}\r</body>", $page);
//   $replace2 = array('</title>','</TITLE>');
//   $page = str_replace($replace2, " - My Awesome Site</title>", $page);
  return $page;
}
ob_start("appendToFile");
?>

Затем добавьте директиву Apache на ваш виртуальный хост.Вам нужно предварять файл PHP, чтобы использовать метод ob_start():

<Directory "/path/to/folder">
    AddType application/x-httpd-php .html .htm
    php_value auto_prepend_file /absolute/path/to/apache-prepend.php
</Directory>
...