PHP Include函数无法正常工作

3
我正在尝试开发一个网站。我希望网站中的不同部分将以不同文件的形式编写,例如“posts.php”,“recents.php”等。我试图使用函数“include”从目录“/codes/”中包含这些文件。但它并没有起作用。
问题出在于,如果我将<?php include '/codes/posts.php' ?>放入原始HTML页面的中间位置(该页面以PHP格式保存),则添加行之前的代码部分能够工作,但添加行后的部分消失了,我不知道为什么。我做错了什么?

2
你少了一个引号。include '/codes/posts.php'; - Bora
检查脚本中是否调用了exit/die函数。 - Abani Meher
你可能还想启用错误报告,这样你就可以更轻松地看到出了什么问题:http://php.net/manual/zh/function.error-reporting.php - n0wak
我假设@Bora指的是“冒号”(;)而不是引号? - mavili
3
在Linux机器上,这不会尝试从根路径开始启动吗? - Flosculus
尝试去掉第一个斜杠,例如include 'codes/posts.php'; - Paolo Stefan
3个回答

2
在修复分号问题后,还需要考虑以下几点:
如果定义了路径,无论是绝对路径(以 Windows 上的驱动器号或 \ 开始,或者在 Unix/Linux 系统上以 / 开始)还是相对于当前目录(以 . 或 .. 开始),include_path 都将被完全忽略。例如,如果文件名以 ../ 开头,则解析器将在父目录中查找所请求的文件。
请参阅:PHP文档 因此,要么使用 include './codes/posts.php';,从当前工作目录相对寻找文件;要么使用 include 'codes/posts.php',使用 include_path 查找。
提示:最好使用 require_onceinclude_once,以避免多次包含同一函数/类定义,这会导致问题(重复声明函数)。

@EsperoShoumma:没问题,很高兴能帮到你。不过,如果您不介意我说的话,SO(Stack Overflow)上表示感谢的方式是通过点击答案旁边的空心V标志(鼠标悬停时变为绿色)来进行点赞/接受答案。 - Elias Van Ootegem
@EsperoShoumma:在查看了您的个人资料后,我发现您还没有接受过任何答案,请阅读此内容以了解如何接受答案。作为奖励,接受一个答案还可以让您的声望值增加2分。 - Elias Van Ootegem
文档中的“include_path”是什么意思? - LazerSharks
1
@Gnuey:每当文档提到 include_path 时,该文本都是可点击的。但简而言之:PHP在许多地方查找 include 文件:当前目录和一些全局路径,在 include_path 中定义(get_include_pathset_include_path 允许您管理这些)。只需编写脚本 var_dump(explode(PATH_SEPARATOR, get_include_path())); 即可查看将使用哪些目录。 - Elias Van Ootegem
啊,我明白了。非常感谢您的精彩解释! - LazerSharks

1
尝试这个,你忘了添加单引号:

(原文已包含HTML标签)
<?php
// Enable error logging: 
error_reporting(E_ALL ^ E_NOTICE);

// Add a single quote: 
include '/codes/posts.php';
?>

抱歉,我在我的主脚本中添加了代码,忘记在这里添加它们。现在添加它们。 - Espero Shoumma
你收到了什么错误? - Duikboot
没有错误。只是添加行后的其余代码消失了。没有错误报告。 - Espero Shoumma
只需将您定义的关键字替换为-1,即可查看每个错误。 :) - ReSpawN

1
很可能,您遇到了路径问题。 /code/posts.php 是绝对路径,因此,除非您在基目录中有一个名为code的文件夹,否则它无法找到该文件。
您需要设置相对路径,通过删除第一个/code/posts.php),或者声明到主目录的绝对路径。
define("BASEDIR", '/home/username/public_html/'); #typical path on a linux server using cpanel
include BASEDIR . 'code/posts.php';

set_include_path('/var/www/includes/'. PATH_SEPARATOR. get_include_path()); 是一种更好的方式,不需要您一次又一次地硬编码绝对路径。 - Elias Van Ootegem
哦哦哦,这个我以前没见过,我得去看看。它只会影响当前工作的脚本吗? - miah
当自动加载程序被调用或者无法将include/require语句解析为当前脚本的相对路径时,包含路径会被使用。只需尝试echo get_include_path();以查看PHP使用的路径,通常它包含类似于/usr/shared/lib/php:/usr/lib/php和其他一些路径...这就像你在.bashrc文件中拥有的东西(在bash shell上运行$ echo $PATH显示类似的内容)。 - Elias Van Ootegem

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接