1

我在 apache2 (Windows 7) 中建立了一个网站,说我的 DocumentRoot 是 /mysite/content

但我也包含在并行目录中,例如 /mysite/lib

所以我的 index.php 文件说:

require_once("/mysite/lib/myfile.php");

但它不会找到该文件,因为它从文档根目录中获取它。所以它正在寻找

/mysite/content/mysite/lib/myfile.php instead of /mysite/lib/myfile.php

而且我无法创建根目录/mysite,因为包含的文件是指根目录,mysite/content。任何想法如何解决这个问题?

4

5 回答 5

1

您必须更改 php.ini 文件中的包含路径

于 2013-03-05T16:01:48.363 回答
1

当包括尝试使用完全限定的路径名​​时,这样你就不会在需要 php 文件时遇到这些问题。您可以将__DIR__常量与 realpath 结合使用,以建立一种根目录,然后包含您需要的内容。

假设根目录是某事/公共,并且您想从某事/库中包含。假设您在某些/公共的 index.php 中,您将执行以下操作:

$rootPath = realpath(__DIR__ . "/../");
require_once $rootPath . "/libs/somefile.php";

我认为这应该可以帮助您解决问题。在 *nix 系统上,请注意您需要 apache 拥有 libs 目录的权限才能从那里读取。

于 2013-03-05T17:48:23.530 回答
0

这个答案的本质是找到当前 index.php 位置并确定应用程序的基本路径,然后通过使用该基本路径,相对轻松地解决应用程序中的任何内容。

您可以从 php 获取信息:下面的示例路径是针对 xampp 服务器设置的,您可能(可能)得到不同的结果,但它们(我希望)是正确的。

$path = str_replace('\\','/',dirname(__FILE__));

这将为您提供 index.php 的服务器相对路径,例如:'d:/xampp/htdocs/mysite/content'

那么您可以通过以下方式删除“内容”

$path = substr($path, 0, strrpos($path,'/')+1);

现在您将拥有类似应用程序根目录的内容:

'd:/xampp/htdocs/mysite/'

现在你可以通过说来访问 lib:

require_once($path.'lib/myfile.php');

希望这会有所帮助。

于 2013-03-08T08:28:21.877 回答
0

这很可能是您的 php.ini 的问题。

在您的 webroot 中创建一个名为 phpinfo.php 的文件,其内容为:

<?php
phpinfo();

没有别的了。保存它然后在您的网络浏览器中加载它,您正在寻找两件事

  1. 安全模式
  2. open_basedir

如果安全模式已打开,请将其关闭。如果 open_basedir 不是 none,请将其设置为 none。如果您出于某种原因无法编辑 php.ini,则可以在 .htaccess 中设置它:

php_admin_value open_basedir none

来源
http ://www.php.net/manual/en/ini.sect.safe-mode.php#ini.safe-mode-include-dir
http://www.php.net/manual/en/ini .core.php#ini.open-basedir

于 2013-03-08T13:41:55.223 回答
0

在调用之前,您可以使用这样的东西require_once("myfile.php");

$base  = realpath(dirname(__FILE__) . '/../');
$paths = array(
    $base . '/mysite/lib',
    '.',
    get_include_path()
);

set_include_path(implode(PATH_SEPARATOR, $paths));
于 2013-03-11T16:51:09.500 回答