如何通过 .htaccess 设置 PHP 包含路径?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/6508429/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to set the PHP include path via .htaccess?
提问by www.data-blogger.com
I want to set the PHP include path to another directory. I tried putting this in an .htaccess file, but that didn't work. The only thing I see is the include path's I set in httpd.conf, but not the one I tried to add.
我想将 PHP 包含路径设置为另一个目录。我试着把它放在一个 .htaccess 文件中,但这没有用。我唯一看到的是我在 httpd.conf 中设置的包含路径,但不是我尝试添加的路径。
<IfModule mod_php5.c>
php_value include_path ".:/var/www/mywebsite/"
</IfModule>
What am I doing wrong?
I did a2enmod mod_php5
, but it was already running, so I suppose PHP5 is already running as Apache module.
我究竟做错了什么?我做了a2enmod mod_php5
,但它已经在运行,所以我想 PHP5 已经作为 Apache 模块运行了。
[EDIT] In my vhost config I have this:
[编辑] 在我的 vhost 配置中,我有这个:
<Directory ~ "^/var/www/.*">
AllowOverride All
Options FollowSymLinks -Indexes -MultiViews
php_value include_path ".:./include:./.include/:/var/www/.include/:/var/www/"
</Directory>
More info (phpinfo()
):
更多信息 ( phpinfo()
):
Loaded Modules core mod_log_config mod_logio prefork http_core mod_so mod_alias mod_auth_basic mod_auth_mysql mod_authn_file mod_authz_default mod_authz_groupfile mod_authz_host mod_authz_user mod_autoindex mod_cgi mod_deflate mod_dir mod_env mod_mime mod_negotiation mod_php5 mod_reqtimeout mod_rewrite mod_setenvif mod_status
include_path .:./include:./.include/:/var/www/.include/:/var/www/ .:/usr/share/php:/usr/share/pear
Regards, Kevin
问候, 凯文
采纳答案by George Cummins
Apache must be configured to allow settings to be overridden via .htaccess. Check your Apache config file (httpd.conf) for an override for your directory:
Apache 必须配置为允许通过 .htaccess 覆盖设置。检查您的 Apache 配置文件 (httpd.conf) 是否覆盖您的目录:
<Directory "/directory/containing/your/htaccess/file">
AllowOverride All
</Directory>
Place this within the vhost definition for your site.
将其放置在您站点的虚拟主机定义中。
If this is a global change, you should change the include_path setting in your php.ini file instead of using .htaccess.
如果这是全局更改,您应该更改 php.ini 文件中的 include_path 设置,而不是使用 .htaccess。
Both of these changes will require an Apache restart.
这两项更改都需要重新启动 Apache。
EDIT:
编辑:
This is a quote from the Apache Core features page:
这是Apache Core features 页面的引用:
"Suppose that the filename being accessed is /home/abc/public_html/abc/index.html. The server considers each of /, /home, /home/abc, /home/abc/public_html, and /home/abc/public_html/abc in that order. In Apache 1.2, when /home/abc is considered, the regular expression will match and be applied. In Apache 1.3 the regular expression isn't considered at all at that point in the tree. It won't be considered until after all normal s and .htaccess files have been applied. Then the regular expression will match on /home/abc/public_html/abc and be applied."
“假设被访问的文件名是/home/abc/public_html/abc/index.html。服务器考虑/、/home、/home/abc、/home/abc/public_html和/home/abc/public_html中的每一个/abc 按此顺序。在 Apache 1.2 中,当考虑 /home/abc 时,正则表达式将匹配并被应用。在 Apache 1.3 中,在树中的那个点根本不考虑正则表达式。它不会直到所有正常的 s 和 .htaccess 文件都被应用后才考虑。然后正则表达式将匹配 /home/abc/public_html/abc 并应用。”
I think, based on this information, that your php_value include_path
statement is being evaluated afterthe .htaccess file. If that is the case, the value you use for include_path
in the .htaccess is being overwritten. Can you try removing the include_path
line from <Directory>
temporarily to test this theory?
我认为,根据这些信息,您的php_value include_path
语句是在 .htaccess 文件之后进行评估的。如果是这种情况,您include_path
在 .htaccess 中使用的值将被覆盖。你可以尝试暂时删除这include_path
条线<Directory>
来测试这个理论吗?
回答by benqus
have you tried this in your PHP code (on the top of your code):
你有没有在你的 PHP 代码中尝试过这个(在你的代码顶部):
<?php
$path = "../folder/folder/file_name.inc.php";
require_once($path);
?>
回答by Greenisha
You can try to use chdir() in your php file to use another location as base location for all file functions, including includes =)
您可以尝试在 php 文件中使用 chdir() 来使用另一个位置作为所有文件函数的基本位置,包括包含 =)