如何为每个目录设置Php auto_prepend_file指令?

时间:2010-11-22 17:16:15

标签: php apache .htaccess apache2

背景:我有一些代码在处理我想设置为auto_prepend_file的php页面之前检查用户是否有有效会话。但是,我需要排除用户尝试从需要有效会话登录的页面。我希望能够在每个目录的基础上设置auto_prepend_file值。

环境:PHP 5.2.6m Apache 2,在Windows上运行php作为cgi而不是mod_php,在Windows上运行(如果这很重要),在我完全控制的机器上运行(不是托管环境)

使用htaccess文件是b / c我没有使用mod_php。我无法改变php.ini来设置auto_prepend_file,服务器抛出内部错误。并且ini_set()不起作用b / c它已经加载了会话检查文件,然后才能更改auto_prepend_file的值。

如果你没有使用mod_php / htaccess,我没有看到在每个目录的基础上设置auto_prepend_file的方法。我错过了什么吗?

3 个答案:

答案 0 :(得分:6)

你提到你不能使用.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

答案 1 :(得分:2)

答案 2 :(得分:-2)

有一个很棒的教程叫做Automatically Include Files with 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指令添加到虚拟主机。您需要 prepend 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>