我是MVC的新手,我正在重做很多代码。
我有master.php
(索引),其中包含:
<?php require_once("header.php"); ?>
master.php
和header.php
都在同一个文件夹中,但我收到以下错误:
警告:require_once(1)[function.require-once]:无法打开流:第15行/Users/MyName/Sites/MySite/Views/master.php中没有此类文件或目录
致命错误:require_once()[function.require]:在第15行的/Users/MyName/Sites/MySite/Views/master.php中打开所需的'1'(include_path =':')失败
此前没有发生过。 (文件都在根文件夹中)。我不知道问题是什么,因为它们在同一个文件夹中 - 我不必返回'../'
或引用任何其他文件夹。我在这里缺少什么?
感谢。
答案 0 :(得分:5)
在评论中,您说您的代码是:
<?php require_once("header.php") or die; ?>
请尝试省略“或死” - &gt; ist不是必需的,因为如果找不到文件,require_once将触发致命错误。
编辑: 我测试了它,省去了“或死”,它会起作用。
编辑2:解释为什么会发生这种情况: 上面的代码也可以这样写:
require_once ( ("header.php") or die() );
因为require_once不是函数,而是php中的语句,大括号是可选的,php将上面解释为布尔表达式,其中字符串“header.php”被计算为布尔值“true”。 True会被强制转换为字符串(结果为“1”),并且此字符串将被传递回需要一次。
所以上面的代码被解释为
require_once("1")
以下是逐步解释的方法:
(("header.php") or die()) = (TRUE or die())
(TRUE or die()) = TRUE
(string) TRUE = '1';
希望这会有所帮助;)
答案 1 :(得分:1)
PHP开始在根文件夹中查找“header.php”,但找不到它。如果它与当前脚本位于同一目录中,则应使用魔术常量__DIR__
:
<?php require_once __DIR__ . '/header.php'; ?>
答案 2 :(得分:1)
可能是因为与master.php
不在同一目录中的其他脚本文件包含或要求header.php
。也就是说,当您访问索引时,您知道正在调用/解析哪个文件吗?
查看include()
的{{3}},这也适用于require()
:
首先查看包含文件 for for each include_path条目 相对于目前的工作 目录,然后在目录中 当前脚本例如。如果你的 include_path是库,current 工作目录是/ www /,你 包括include / a.php,还有 在该文件中包含“b.php”,b.php 首先看看/ www / libraries / 然后在/ www / include /
<强>更新强>
要解决一些评论:我没有说include()会改变CWD。我说如果CWD不是master / header.php所在的那个,那可能是问题。
例如,假设您index.php
位于与master.php
和header.php
不同的文件夹中;它包含或要求master.php
使用正确的路径。现在,master.php
有声明:
<?php require_once("header.php"); ?>
但是,此时CWD 不包含 header.php
,因为CWD是index.php
的。
要解决此问题,您需要使用从当前脚本的CWD到require_once
的正确路径调用header.php
,而不是master.php
的路径。
答案 3 :(得分:0)
你需要第15行:
<?php (require_once("header.php")) or die(); ?>
然而,由于找不到header.php时,要求是致命的,那么你应该:
<?php (include_once("header.php")) or die(); ?>
或
<?php require_once("header.php"); ?>