自从我的网站从本地移动到在线后,我使用需要时出现路径问题。
我的网页可以像这样调用 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");
答案 0 :(得分:0)
正如在评论中所说,使用绝对路径而不是'inc / ...'是安全的,因为它与当前的类执行路径有关,即:
define ('BASE_PATH', dirname(__FILE__).'/../');
然后使用BASE_PATH。{your_path}来访问文件。
我建议使用require_once来避免多次包含。