如何从不同的目录require_once?(How to require_once from dif

2019-07-19 14:51发布

我试图从不同的文件夹中的PHP文件需要我的“库”文件,但试图从一个子文件夹访问它们时,它提供的错误。 例如,我有这样的目录:

+ home    
- file1.php

 ++ subfolder
  - file2.php

 ++ libraries
  - code_generator.php
  - database_library.php

code_generator.php还取决于其他图书馆:

(LINE 25) require_once(realpath("./libraries/database_library.php"));
//this works fine when called from file1.php, but not from file2.php

我尝试调用code_generator从./subfolder/ file2.php喜欢:

chmod("../libraries/codegenerator.php", 0777);  // for the error at the end of this question
require_once("../libraries/code_generator.php");

当我运行file2.php,它产生2个错误:

**Warning**: require_once(C:\xampp\htdocs\home\subfolder): failed to open stream: Permission denied in C:\xampp\htdocs\home\libraries\code_generator.php on line 25

**Fatal error**: require_once(): Failed opening required '' (include_path='.;C:\xampp\php\PEAR') in C:\xampp\htdocs\home\libraries\code_generator.php on line 25

*第25行是require_once(realpath("./libraries/database_library.php"));

Answer 1:

该文件存在。

错误消息如下:

警告 :require_once(C:\ XAMPP \ htdocs中\家\子文件夹):未能打开流:

和:

需要失败开放'

错误消息从不说谎(很好,几乎没有),因此,您呼叫:

require_once('');

真实路径返回丢失的文件错误

如果你传递的路径不存在的文件真实路径将返回false:

$return = realpath('this/doesnt/exist.foo'); // $return is false

因此,传递到真实路径的说法不是指一个文件,该文件的路径是不工作的原因。

不要过度使用真实路径

如果您删除了使用真实路径,你会发现错误消息可能是显而易见的。 在猜测你想包括C:\xampp\htdocs\home\subfolder\libraries\database_library.php -因为有缺失. 在此:

线25是require_once(realpath("./libraries/database_library.php"));

相反,如果你只是定义了一个根路径:

define('ROOT', 'C:\xampp\htdocs\home\\');

然后你可以使用这个常量与绝对的信心,这些样的问题不会发生:

require_once(ROOT . "libraries/database_library.php");

如果你得到的路径错误,错误信息将使其明显的问题是什么。



Answer 2:

您可以使用PHP超全局变量 $ _ SERVER [“DOCUMENT_ROOT”]让你的服务器的根目录,例如完整路径。 在/ var / WWW /网站/公众。

代码看起来是这样的:

require_once $_SERVER['DOCUMENT_ROOT'] . '/libraries/database_library.php';

这样,您就不需要手动设置文档根路径; PHP会一直把它捡起来给你,并使其在$ _ SERVER [“DOCUMENT_ROOT”]在任何PHP文件,它是你的服务器的根目录中可用。



文章来源: How to require_once from different directories?