错误的路径使用'require'

时间:2016-02-08 17:24:31

标签: php filepath

自从我的网站从本地移动到在线后,我使用需要时出现路径问题。

我的网页可以像这样调用 bootstrap.php

require 'inc/bootstrap.php';

boostrap.php 看起来像这样:

<?php
spl_autoload_register('app_autoload');

function app_autoload($class){
require "class/$class.php";
}

这在当地很有效。

现在,在线,我收到以下消息:

Warning: require_once(/home/website/www/class/functions.php): failed to open stream: No such file or directory in /home/website/www/inc/bootstrap.php on line 6

Fatal error: require_once(): Failed opening required '/home/website/www/class/functions.php' (include_path='.:/usr/share/php:/usr/share/pear') 
in /home/website/www/class/functions.php on line 6

所以我想,我应该在 boostrap.php 中设置绝对路径:

<?php
spl_autoload_register('app_autoload');

function app_autoload($class){
$path = $_SERVER['DOCUMENT_ROOT'] . "class/$class.php";
require_once "$path";
}

但我得到完全相同的错误。 我不明白为什么它仍然在/home/website/www/inc/bootstrap.php中查看并且没有遵循/home/website/www/class/functions.php的绝对路径?

修改

在使用绝对路径测试不同的解决方案后,我仍然收到“/home/website/www/bootstrap.php中没有这样的文件或目录的错误:所以它仍在查找文件而不是目录。” / p>

可能是因为我使用双重要求?我首先要求 description.php boostrap.php (这很好),然后我需要 class.php 来自 boostrap。 php (哪个doesent采取绝对路径,但路径对应文件 boostrap.php

解答:

好的,它最终适用于此配置:

使用require的第一个文件:

    require_once(dirname(__FILE__). '/inc/bootstrap.php');

和boostrap.php:

    require_once(dirname(__FILE__). "/../class/$class.php");

1 个答案:

答案 0 :(得分:0)

  1. 正如在评论中所说,使用绝对路径而不是'inc / ...'是安全的,因为它与当前的类执行路径有关,即:

    define ('BASE_PATH', dirname(__FILE__).'/../');
    

    然后使用BASE_PATH。{your_path}来访问文件。

  2. 我建议使用require_once来避免多次包含。