在清理一些旧的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
警告:require(http://localhost/elearning/trunk/mypage.php)[function.require]:无法打开流:在C:\ Documents and Settings \ username \ Desktop \ xampp-win32-1.6.7中找不到合适的包装器第22行的xampp \ htdocs \ elearning \ trunk \ test.php
致命错误:require()[function.require]:无法打开所需的“http://localhost/elearning/trunk/mypage.php”(include_path ='。; C:\ Documents and Settings \ username \ Desktop \ xampp-win32-1.6.7 \第22行的C:\ Documents and Settings \用户名\ Desktop \ xampp-win32-1.6.7 \ xampp \ htdocs \ elearning \ trunk \ test.php中的xampp \ php \ pear \')
如果我将http://localhost/elearning/trunk/mypage.php(直接从错误中)复制+粘贴到我的浏览器中,mypage.php会加载。这是我的配置或我的方法中的错误吗?
答案 0 :(得分:3)
由于安全性,您无法在某些服务器上使用以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想要查找文件时,它使用万维网路径来访问它,因为它不是从服务器访问它。
我真的希望在那里的某个地方有所作为。
答案 1 :(得分:1)
尝试要求“./mypage.php” 不是完整的目录
答案 2 :(得分:1)
当你使用像这样的URL表示法时,PHP并不聪明地知道你是从同一台服务器包含的,因此它认为你是从一个单独的服务器中获取文件(这可能很危险)。
您的服务器配置设置为禁止加载这些外部文件(显而易见的错误消息“在服务器配置中禁用了URL文件访问”),因此它失败了。
由于您位于同一台服务器上,因此您只需使用相对路径,例如:
require_once 'mypage.php'
答案 3 :(得分:0)
不要使用这样的路径......使用相对路径或绝对路径。
实施例
require 'mypage.php'