如何正确引用本地主机上 PHP、CSS 等的子目录(在 xampp 中)中的文件?
Posted
技术标签:
【中文标题】如何正确引用本地主机上 PHP、CSS 等的子目录(在 xampp 中)中的文件?【英文标题】:How do I properly reference files in subdirectories (in xampp) for PHP, CSS, etc. on localhost? 【发布时间】:2012-11-12 09:31:56 【问题描述】:我在 win7 上运行 XAMPP 来测试使用 php/mysql/AJAX 的相当简单的网站,但遇到了无法正确引用文件的问题。
我知道C:\xampp\htdocs
与http://localhost/
“等效”,并且我在C:\xampp\htdocs\lorem_ipsum
中有一个项目子目录(即http://localhost/lorem_ipsum/
)。其中还有一些文件夹(一个用于 php 脚本,一个用于 css 样式表等)。
我在引用这些子目录中的文件时遇到问题。
例如,在 lorem_ipsum/index.php 我使用以下行:
require_once 'http://localhost/lorem_ipsum/php/login.php'
导致错误的原因:
Warning: require_once(): http:// wrapper is disabled in the server configuration by allow_url_include=0 in C:\xampp\htdocs\lorem_ipsum\index.php on line 13
Warning: require_once(http://localhost/lorem_ipsum/php/login.php): failed to open stream: no suitable wrapper could be found in C:\xampp\htdocs\lorem_ipsum\index.php on line 13
Fatal error: require_once(): Failed opening required 'http://localhost/lorem_ipsum/php/login.php' (include_path='.;C:\xampp\php\PEAR') in C:\xampp\htdocs\lorem_ipsum\index.php on line 13
通过谷歌搜索,我发现这是某种“文件共享/安全”问题,但我完全不知道这意味着什么或如何解决它(我还是个初学者)。
当我使用以下 CSS 时,例如:
background-image:url('http://localhost/lorem_ipsum/images/bg.png')
背景是白色的,而不是“bg.png”。如果我使用'./images/bg.png'
,则相同。
我尝试了各种不同的方法来引用这些文件,但都没有奏效。我还尝试关闭任何防火墙,但也没有用。
我的终极问题是:为什么所有问题都与文件引用有关?
次要问题:PHP 和 CSS 错误是否相关,还是我把它们都搞砸了?我怎样才能阻止这种情况发生? apache/php 中是否有需要更改的设置,或者我只是编码错误?
【问题讨论】:
您需要通过绝对或相对于当前目录来要求它。不要使用 HTTP 来请求文件 【参考方案1】:在 PHP 中,您应该从指定的 Document_Root 引用文件(在您的情况下为 C:\xampp\htdocs)。所以试试
require_once "/lorem_ipsum/phplogin.php";
如果文件被正确托管,css 中的 url 应该 工作。但你也可以尝试这样的相对路径:
background-image:url('/lorem_ipsum/images/bg.png');
【讨论】:
当您也想将网站移至某个真实主机时,使用亲戚会有所帮助。这样你就不必重写代码库,因为它们在服务器上的文件结构比你做的要不同。 啊哈!当我之前尝试使用相对路径时,它不起作用,我想出了原因 - 由于某种原因 include_path 被设置为不是 htdocs 文件夹的东西。set_include_path('.;C\xampp\htdocs\lorem_ipsum');
和 require_once '/php/login.php';
似乎可以工作,当然现在我需要最终调试 login.php :) 至于 CSS ......仍然不起作用。我想知道 CSS 是否有一种“set_includes_path”? .css 文件位于 /lorem_ipsum/css 中,如果这很重要的话。 (我知道index.php正确引用了css文件,这是唯一不起作用的css)
CSS 不使用任何包含路径的概念。它将路径与您的根 url 进行比较并发出另一个 HTTP 请求。确保您可以通过http://localhost/lorem_ipsum/images/bg.png
访问您的文件。如果这不起作用,那是你的问题,而不是文件路径的陈述方式
是的,按照您的建议,我可以很好地访问文件。我也确定正确引用了 CSS,因为我在 .css 文件中所做的所有其他更改都适用。猜猜我会多修改一些东西,看看我是否无法在意想不到的地方找到问题。【参考方案2】:
给require_once命令定义变量,因为HTTP://协议在PHP ini上的很多服务器上是不允许的,以减少一些冲突和麻烦。
<pre>
<?
require_once(dirname(__FILE__) . "php/login.php")
//next script here.....
?>
</pre>
或者你可能想要 make include 命令:
<pre>
<?
include "php/login.php";
//do something here..
?>
</pre>
参考:http://www.php.net/manual/en/function.require-once.php / http://www.php.net/manual/en/function.include.php
对于 css 是:
<pre>
background-image:url('images/bg.png')
</pre>
【讨论】:
以上是关于如何正确引用本地主机上 PHP、CSS 等的子目录(在 xampp 中)中的文件?的主要内容,如果未能解决你的问题,请参考以下文章
如何在本地主机上使用 htaccess 制作 seo url? [关闭]