从文件中读取(需要)

时间:2016-01-27 09:32:47

标签: php require

我有类似这样的事情:http://i.imgur.com/KPulyBg.png我正在制作" admin"文件夹和内部我有" admin.php",但问题是我想阅读" core / init.php"从那里。现在我在admin.php

中有这个
<?php
require '../includes/header.php';
?>

<?php
$user = new User();
if(!$user->isLoggedIn()){
    Redirect::to(404);
}
else if(!$user->hasPermission('admin')){
    Redirect::to(404);
}
?>
<div id="content">

</div>

<?php
require '../includes/footer.php';
?>

在&#34; includes / header.php&#34;内;我有php require_once&#39; core / init.php&#39 ;;但我得到了我的管理页面:

Warning: require(core/init.php): failed to open stream: No such file or directory in C:\xampp\htdocs\OOP\includes\header.php on line 2

Fatal error: require(): Failed opening required 'core/init.php' (include_path='.;C:\xampp\php\PEAR') in C:\xampp\htdocs\OOP\includes\header.php on line 2

我知道我必须添加../但是我在我的index.php页面上得到了这个错误,该页面必须在没有它的情况下运行,因为它不在文件夹中,它只从包含文件夹运行页眉和页脚。 / p>

3 个答案:

答案 0 :(得分:0)

您可以尝试使用 $_SERVER["DOCUMENT_ROOT"] 代替&#34; ../" 我认为这将解决您关于require操作的问题

<?php
require ($_SERVER["DOCUMENT_ROOT"].'/includes/header.php');
?>

<?php
$user = new User();
if(!$user->isLoggedIn()){
    Redirect::to(404);
}
else if(!$user->hasPermission('admin')){
    Redirect::to(404);
}
?>
<div id="content">

</div>

<?php
require ($_SERVER["DOCUMENT_ROOT"].'/includes/footer.php');
?>

您可以在此处找到有关DOCUMENT_ROOT键的参考:http://php.net/manual/en/reserved.variables.server.php

答案 1 :(得分:0)

正如documentation所解释的那样:

  

根据给定的文件路径包含文件,如果没有给出,则指定$decodeString=base64_decode($imageString); $imageCreated=imagecreatefromstring($decodeString); ob_start(); imagepng($imageCreated); $imgPng = ob_get_clean(); $imgPath = "data:image/png;base64," . base64_encode($imgPng);

     

...

     

如果定义了一个路径 - 无论是绝对路径(从Windows上的驱动器号或\开始,还是/ Unix / Linux系统上的/)或相对于当前目录(以。或..开头) - {{1}将被完全忽略。

这如何适用于您的代码?

include_path - PHP搜索include_path指令require_once 'core/init.php';中的所有路径。它将php.ini附加到列表中的每个路径,并检查以这种方式计算的路径是否存在。很可能它没有。

include_path - core/init.php并不重要;提供的相对路径(require_once './core/init.php';)将附加到当前目录以获取文件的路径;

解决方案是什么?

上述方法都没有在实践中发挥作用。

使用子目录包含文件的最安全方法是使用魔术常量__DIR__和函数dirname()来计算正确的文件路径。

include_path

变为

core/init.php

require '../includes/header.php';

变为

require dirname(__DIR__).'/includes/header.php';

因为require_once 'core/init.php'; 是当前文件(require_once dirname(__DIR__).'/core/init.php'; )所在的目录。

答案 2 :(得分:-1)

根据header.php变量在HEADER_DIR __FILE__中定义。其中__FILE__是php的魔术常量之一,请点击此处获取更多信息:http://php.net/manual/en/language.constants.predefined.php

define('HEADER_DIR', dirname(__FILE__)); 

// then use it in all includes 
require HEADER_DIR . "/../core/init.php";
require HEADER_DIR . "../some_other_folder/some_file.php";