我成功地使用以下脚本在我的网站上的其他文件夹中加载会话变量:
<?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开发中有着特殊的含义。