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

Posted

技术标签:

【中文标题】如何为每个目录设置 PHP 的 auto_prepend_file 指令?【英文标题】:How to set Php's auto_prepend_file directive per directory? 【发布时间】:2011-05-13 23:38:42 【问题描述】:

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

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

使用 htaccess 文件已失效 b/c 我没有使用 mod_php。我无法更改 php.ini 中的设置 auto_prepend_file,服务器会引发内部错误。并且 ini_set() 不起作用 b/c 在我可以更改 auto_prepend_file 的值之前它已经加载了会话检查文件。

如果您不使用 mod_php/htaccess,我看不到按目录设置 auto_prepend_file 的方法。我错过了什么吗?

【问题讨论】:

你使用什么网络服务器软件? @Gumbo 好点...刚刚更新为 Apache 2 【参考方案1】:

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

【讨论】:

这在我的系统上对我不起作用...应该起作用吗? 什么可能会阻止它在我的机器上运行?当我输入该行时,我在重新启动 apache 时收到此错误消息:无效命令“Php_value”,可能拼写错误或由未包含在服务器配置中的模块定义 感谢您更新您的回复。【参考方案2】:

使用 .user.ini 文件。

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

【讨论】:

如果你能控制它,升级是值得的。否则,您需要编辑主要的 Apache 配置文件。 这只是一个链接答案,因此它应该被否决或完全删除,它是否对提出问题的人有帮助并不重要,因为一些知识渊博、纪律严明和名声大噪的人告诉我在评论中。我的意思是来吧,你应该提供代码sn-p,可能是整个文件的代码,或者你应该完成整个项目,或者你应该为提问的人一生为他赚钱。是的,应该这样做。【参考方案3】:

有一个很棒的教程叫做: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 指令添加到您的虚拟主机。您需要预先添加 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>

【讨论】:

以上是关于如何为每个目录设置 PHP 的 auto_prepend_file 指令?的主要内容,如果未能解决你的问题,请参考以下文章

如何为数组-php中的每个索引添加一个新项目?

如何为用户实现关注者,如在 twitter 中

如何为网络爬虫设置有效的 cron 作业

如何为每个 PHP 循环创建一个从表数据中设置变量的循环

如何为网页中的每个注册显示自动递增的 id 值?

如何为 PHP 8 设置合适的 Apache 版本