以下是情况的完整背景:
我最近买了一台新Mac,我是一名php开发人员,所以我下载了MAMP并开始开发。
首先我注意到我的包含没有被包含在内,但是我通过配置php.ini
来改变它。
但是现在,当我尝试使用函数包含文件时,它无法识别该函数。
例如,我有一个名为functions.php
的文件:
<?php
function doit(){
echo "did it";
}
?>
和包含它的文件名为index.php
<?php include("functions.php"); doit();?>
我收到此错误消息
致命错误:在第4行的index.php中调用未定义的函数doit()
答案 0 :(得分:25)
有时当前目录不是您期望的目录,例如当您从包含文件中包含文件时。
我喜欢在我的包含上使用$_SERVER['DOCUMENT_ROOT']
,以便我始终可以从我网站的根目录中完全引用它们:
<?php
include($_SERVER['DOCUMENT_ROOT']."/includes/functions.php");
doit();
?>
如果您的包含目录位于文档根目录之上,则可以使用..
仍然从根目录引用。
答案 1 :(得分:9)
因此,如果有人偶然发现这个论坛,因为他们遇到了同样的问题,请让我解释一下它出错的原因和原因。
如果您不包含目录中的函数(例如c://或file://),而是包含使用http。 include只能返回文件中回显的内容,但不会显示类似变量或函数的内容。所以总是通过目录包含函数和变量
答案 2 :(得分:2)
尝试使用require()而不是include。也许包含失败并且没有显示错误。
答案 3 :(得分:0)
我也遇到过这个问题。
就我而言,我发现它可能是你的“functions.php”文件Permission denied。
请尝试在服务器中“chmod 777 functions.php”。
让functions.php可以在Web服务器中执行。
感谢Thatjuan,Becasue当我更改为使用require()时,服务器显示正确的错误消息。
答案 4 :(得分:0)
对我来说,问题是由于包含文件中的函数名与初始文件中的函数同名。
我使所有的功能名称都独一无二,不再有问题。
答案 5 :(得分:0)
这很奇怪。我有以下几点。
include_once('assets\include\page-essentials\functions-init.php');
include_once('assets\include\page-essentials\functions-api.php');
include_once('assets\include\php\results.php');
include_once('assets\include\page-essentials\url-availability.php');
//require($_SERVER['DOCUMENT_ROOT']."\FBH-2020\assets\include\php\boatfeaturecode.php");
require("\assets\include\php\boatfeaturecode.php");
前三个包括所有包含函数和所有工作的函数(即functions-init.php,functions-api.php和results.php)
需要boatfeaturecode.php的行不起作用,但是带有$ Server ['DOCUMENT_ROOT']的注释行起作用。
我不明白为什么会这样。
这是否是INCLUDE或REQUIRE命令对于它是否有效并不重要。
这是Windows 10上的IIS。目录结构是标准C:\ inetpub \ wwwroot \
我所说的这些文件来自C:\ inetpub \ wwwroot \ FBH-2020 \
包含文件的路径在哪里
C:\ inetpub \ wwwroot \ FBH-2020 \ assets \ ---如前三,四所示,其中包括完美运行。