在清理一些旧的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 \中的服务器配置中禁用了URL文件访问第22行的trunk \ test.php

警告:要求( 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 \')在C:\第22行的Documents and Settings \用户名\ Desktop \ xampp-win32-1.6.7 \ xampp \ htdocs \ elearning \ trunk \ test.php

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

有帮助吗?

解决方案

由于安全性,您无法在某些服务器上使用以http://开头的路径。您想要使用的是目录路径。

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

将从服务器的根文件夹中提供您的目录路径。这是您要用于包含/需要的东西的路径。


如果你不太明白,请试试这个。

路径有两种类型:

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

服务器目录路径:
/家庭的/ usr / WWW /站点/ HTML /

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

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

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

我真的希望在那里的某个地方有所作为。

其他提示

尝试要求“./ mypage.php” 不是完整的目录

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

您的服务器配置设置为禁止加载这些外部文件(显而易见的错误消息“在服务器配置中禁用了URL文件访问”),因此它失败了。

由于您位于同一台服务器上,因此您只需使用相对路径,例如:

require_once 'mypage.php'

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

实施例

require 'mypage.php'
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top