Php 定义的函数不随 include 一起传递
Php defined functions don't transfer with include
所以,我有一个名为 init.php 的文件,它应该位于我网站上每个页面的顶部。在这种情况下,它在我的 index.php 中。 init.php 里面是一段代码,它包含名为 include 的文件夹中的所有文件。当我尝试调用 index.php 文件中的一个函数时,该文件定义在一个应该包含的文件中,我只是收到一条错误消息 Call to undefined function errors_return()
。知道这里出了什么问题吗?
//index.php
<?php
include "php\init.php";
//errors_return(); is a defined function in functions.php
?>
//init.php
<?php
//error_reporting(0);
foreach (glob("include\*.php") as $filename) {
include $filename;
}
$GLOBALS["errors_log"] = array();
session_start();
?>
//sample of functions.php
<?php
function error($msg = "default error"){
array_push($GLOBALS["errors_log"],$msg);
}
function errors_return(){
if(!empty($GLOBALS["errors_log"])){
foreach($GLOBALS["errors_log"] as $e){
echo '<p style="position:relative;">'.$e.'</p>';
}
}
else {
return null;
}
}
?>
folder structure
root (folder)
index.php
php (folder)
init.php
include (folder)
functions.php
您在代码中的双引号内使用了反斜杠 \
。 PHP 中的反斜杠告诉解释器转义序列开始,反斜杠后的字符将被尝试解释为这样的转义序列。
作为解决方案,请尝试用双反斜杠 \
替换反斜杠,这将转义反斜杠本身并将其解释为普通字符,或者只使用斜杠 /
而不是反斜杠。
您只需将目录分隔符从正斜杠 /
更改为反斜杠 \
。我已经在我的机器上测试过了,它成功了。
所以我发现这里的问题是什么。似乎当 include 发生在 foreach
循环中时,它不在文件本身包含的正确范围内。不过我不知道如何解决这个问题。
foreach (glob("include\*.php") as $filename) {
include $filename; //not included with the file
}
include "sample/dir/sample.php"; //included the with file
所以,我有一个名为 init.php 的文件,它应该位于我网站上每个页面的顶部。在这种情况下,它在我的 index.php 中。 init.php 里面是一段代码,它包含名为 include 的文件夹中的所有文件。当我尝试调用 index.php 文件中的一个函数时,该文件定义在一个应该包含的文件中,我只是收到一条错误消息 Call to undefined function errors_return()
。知道这里出了什么问题吗?
//index.php
<?php
include "php\init.php";
//errors_return(); is a defined function in functions.php
?>
//init.php
<?php
//error_reporting(0);
foreach (glob("include\*.php") as $filename) {
include $filename;
}
$GLOBALS["errors_log"] = array();
session_start();
?>
//sample of functions.php
<?php
function error($msg = "default error"){
array_push($GLOBALS["errors_log"],$msg);
}
function errors_return(){
if(!empty($GLOBALS["errors_log"])){
foreach($GLOBALS["errors_log"] as $e){
echo '<p style="position:relative;">'.$e.'</p>';
}
}
else {
return null;
}
}
?>
folder structure
root (folder)
index.php
php (folder)
init.php
include (folder)
functions.php
您在代码中的双引号内使用了反斜杠 \
。 PHP 中的反斜杠告诉解释器转义序列开始,反斜杠后的字符将被尝试解释为这样的转义序列。
作为解决方案,请尝试用双反斜杠 \
替换反斜杠,这将转义反斜杠本身并将其解释为普通字符,或者只使用斜杠 /
而不是反斜杠。
您只需将目录分隔符从正斜杠 /
更改为反斜杠 \
。我已经在我的机器上测试过了,它成功了。
所以我发现这里的问题是什么。似乎当 include 发生在 foreach
循环中时,它不在文件本身包含的正确范围内。不过我不知道如何解决这个问题。
foreach (glob("include\*.php") as $filename) {
include $filename; //not included with the file
}
include "sample/dir/sample.php"; //included the with file