在外部文件夹中加载变量:只能工作一次


Loading variables in external folder: only works once

我成功地使用以下脚本在我的网站上的其他文件夹中加载会话变量:

<?php
require('../includes/configure.php');
ini_set('include_path', DIR_FS_CATALOG . PATH_SEPARATOR . ini_get('include_path'));
chdir(DIR_FS_CATALOG);
require_once('includes/application_top.php');
?> 

这个脚本允许我立即加载我的头模板,其中包括我想要的变量输出:

<?php
include('includes/templates/header.php');
?>

所以,问题是这个脚本在其他三个场景(CMS系统)中完美地工作。。。对于我正在研究的这个特定的,它只是第一次起作用。它确实成功地正确加载了我的标题和变量,但是下次加载页面时它将不起作用

有人能提供解释/解决方案吗?谢谢

当您回答"它不起作用"意味着"我得到了一个空白页面"的评论时,您应该做的第一件事是启用PHP的错误报告。放在脚本的开头:

ini_set('error_reporting', E_ALL);
ini_set('display_errors', 'On'); // shows in the web page instead of just logs

然后你的页面可能不会保持空白,你会收到有用的错误消息。

其次,您应该将include替换为require。这样,如果PHP找不到文件,就会出现致命错误。根据内容的不同,require_once可能更适合。

然后,您应该谨慎对待includes中的相对路径。它们与include所在的脚本不是直接相关的。PHP首先尝试使用include路径和调用脚本的路径(此HTTP查询首先启动的文件)。建议使用完整路径:

require dirname(dirname(__FILE__)) . '/includes/configure.php';
require dirname(__DIR__) . '/includes/configure.php'; // PHP5.3 only

最后一件事:在处理应用程序常量时,不要使用表达式会话变量。"会话"在PHP和一般的web开发中有着特殊的含义。