0

我有一个文件位于:

/Library/WebServer/Documents/wordpress/wp-content/themes/directorypress/sidebar-left-big.php

我在子目录中有另一个文件:

/Library/WebServer/Documents/wordpress/wp-content/themes/directorypress/template_directorypress/_gallerypage.php

在 _gallerypage.php 我有 php 包括:

<?php include('../sidebar-left-big.php'); //left sidebar, category navigation and ads ?>

我得到的错误:

Warning: include(../sidebar-left-big.php) [function.include]: failed to open stream: No such file or directory in /Library/WebServer/Documents/wordpress/wp-content/themes/directorypress/template_directorypress/_gallerypage.php on line 9

Warning: include() [function.include]: Failed opening '../sidebar-left-big.php' for inclusion (include_path='.:') in /Library/WebServer/Documents/wordpress/wp-content/themes/directorypress/template_directorypress/_gallerypage.php on line 9

在我看来,我做的一切都是正确的。

我认为问题可能是 _gallerypage.php 是通过包含在另一个文件中加载的,因此 ../ 相对于该文件会导致错误。但是错误并没有说明它认为 sidebar-left-big.php 的路径在哪里。

4

3 回答 3

1

采用include dirname(__FILE__).'/../sidebar-left-big.php';

于 2012-07-22T10:06:36.540 回答
0

的,你是对的。

当您包含_gallerypage.php来自另一个文件的 时,它确实采用相对于自身的路径。所以,你应该解决这个问题。

最好的方法,可能是避免这些困难。有很多方法可以做到这一点。就像,一个人会在一个常量中定义一个全局根,并根据它在任何地方包含所有东西。

例如:

define("BASE" , "/wordpress"); //Define a base directory

//now whenever you are including and requirng files, include them on the basis of BASE

require(BASE."/admin/.../some.php");
于 2012-07-22T10:09:22.623 回答
0

使用以下代码段并将其保存为 PHP 应用程序根目录中的文件(例如 config.php)。然后您可以继续在所有其他 PHP 文件中引用此文件以使用变量 BASE_PATH 和 TOP_LEVEL_DIR

<?php

/**
 * @def (string) DS - Directory separator.
 */
define("DS","/",true);

/**
 * @def (resource) BASE_PATH - get a base path.
 */
define('BASE_PATH',realpath(dirname(__FILE__)).DS,true);
define('TOP_LEVEL_DIR', public_base_directory());

?>

<?php
function public_base_directory()
{
    //get public directory structure eg "/top/second/third"
    $public_directory = dirname($_SERVER['PHP_SELF']);
    //place each directory into array
    $directory_array = explode('/', $public_directory);
    //get highest or top level in array of directory strings
    $public_base = max($directory_array);

    return $public_base;
}
?>
于 2013-04-30T00:24:06.273 回答