0

在清理一些旧的 php 脚本时,当我尝试使用变量时,我注意到 require/include 语句的一些奇怪行为。

在实时服务器上,以下代码可以正常工作..

<?php
$test = "http://localhost/elearning/trunk/mypage.php";
require "$test";
?>

..但是在我的 XAMPP 安装((基本包)版本 1.6.7)中,我收到以下错误:

警告:require() [function.require]:在 C:\Documents and Settings\username\Desktop\xampp-win32-1.6.7\xampp\htdocs\elearning\trunk\test 的服务器配置中禁用 URL 文件访问.php 在第 22 行

警告:需要(http://localhost/elearning/trunk/mypage.php)[function.require]:无法打开流:在 C:\Documents and Settings\username\Desktop\xampp-win32 中找不到合适的包装器-1.6.7\xampp\htdocs\elearning\trunk\test.php 在第 22 行

致命错误:require() [function.require]: 无法打开所需的“ http://localhost/elearning/trunk/mypage.php ”(include_path='.;C:\Documents and Settings\username\Desktop\xampp-win32 -1.6.7\xampp\php\pear\') 在第 22 行 C:\Documents and Settings\username\Desktop\xampp-win32-1.6.7\xampp\htdocs\elearning\trunk\test.php

如果我将http://localhost/elearning/trunk/mypage.php(直接从错误中)复制+粘贴到我的浏览器中,则会加载 mypage.php。这是我的配置错误还是我的方法错误?

4

4 回答 4

3

出于安全考虑,您不能在某些服务器上使用以 http:// 开头的路径。您想要使用的是目录路径。

您可以通过执行类似的操作来获取当前目录路径
echo $_SERVER['DOCUMENT_ROOT'];

这将为您提供服务器根文件夹中的目录路径。那是您要用于包含/需要内容的路径。


如果你不是很明白,试试这个。

有两种类型的路径:

万维网路径:
http ://example.com/directory/file.php

服务器目录路径:
/home/usr/www/site/html/

服务器目录路径是您的文件在服务器硬盘上的位置。就像您计算机的硬盘一样,除非您移动文件,否则它永远不会改变。另一方面,万维网路径(每个人用来访问您的网站的路径)可以根据您使用的域、您的文档根目录指向的位置、Mod 重写等而改变。

注意:文档根目录是服务器提供文件的最顶层目录。因此,如果您的文档根目录中有 index.php,它会在网络上显示为: http ://example.com/index.php 。

当 PHP 查找文件时,它使用服务器目录路径,因为它在服务器上运行。当从用户计算机运行的 Javascript 想要查找文件时,它使用万维网路径来访问它,因为它不是从服务器访问它。

我真的希望在那里的某个地方,有些东西是有意义的。

于 2009-07-31T01:20:46.797 回答
1

尝试要求“./mypage.php”而不是整个目录

于 2009-07-31T00:59:35.123 回答
1

当您使用这样的 URL 表示法时,PHP 不够聪明,无法知道您是从同一台服务器中包含的,因此它认为您正在从单独的服务器中获取文件(这可能很危险)。

您的服务器配置设置为不允许加载这些外部文件(从错误消息“服务器配置中禁用 URL 文件访问”可以看出),因此它失败了。

由于您在同一台服务器上,您可以简单地使用相对路径,例如:

require_once 'mypage.php'
于 2009-07-31T01:21:02.333 回答
0

不要使用这样的路径...使用相对路径或绝对路径。

例子

require 'mypage.php'
于 2009-07-31T01:02:03.170 回答