背景:我正在构建一个Ajax页面,用户的浏览器将调用该页面来检索已经加载到$ _SESSION中的数据。我想测试Ajax页面是否正常工作,所以我试图对它进行print_r($_SESSION)
。 (注意:print_r()
在主站点上运行正常。)
问题:我无法让我的PHP生成有效的HTML。如果我这样做:
<?php
header("Content-Type: text/html; charset=utf-8");
echo '<?xml version="1.0" encoding="utf-8" ?>';
if (!session_id()) {
session_start();
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <!-- See http://www.w3.org/International/O-charset.en.php-->
<title>Test for Ajax</title>
<link rel="stylesheet" media="screen" type="text/css" title="StyleSheetProjet" href="StyleSheetProjet.css" />
</head>
<body>
<pre>
Content of $_SESSION:
<?php print_r($_SESSION) ?>
</pre>
</body>
</html>
在这种情况下,页面会显示:
Content of $_SESSION:
Array
(
后跟一堆__PHP_Incomplete_Class Object
(因为我认为会话中的对象没有被声明)。
但是,如果我开始:
header("Content-Type: text/html; charset=utf-8");
echo '<?xml version="1.0" encoding="utf-8" ?>';
//Obects in session:
require_once("Class_User.php");
require_once ('Class_Message.php');
if (!session_id()) {
session_start();
}
//(Rest is same as above)
然后浏览器根本不呈现任何内容,甚至不呈现Content of $_SESSION:
。实际上,Web控制台中的html只是<html><head></head><body></body></html>
,其间没有任何内容......
我做错了什么?
修改1:用text/xml
替换header()
中的text/html
。
编辑2:我将两个require_once
替换为:
if (file_exists('Class_User.php')) {
echo "Class_User exists";
} else {
echo "Class_User doesn't exist";
}
if (file_exists('Class_Message.php')) {
echo "Class_Message exists";
} else {
echo "Class_Message doesn't exist";
}
页面确实返回Class_User existsClass_Message exists
,因此它可以清楚地找到文件。
答案 0 :(得分:1)
怀疑原因
require_once("Class_User.php");
和require_once("Class_Message.php");
正在查找相关文件,无法找到它们,因此请停止执行其余代码。检查 Class_User.php 和 Class_Message.php 的路径是否正确。
实际原因(我们发现调试后与OP一起工作)
其中一个类文件是扩展另一个类,由于该文件未包含在项目中,因此执行被阻止。 OP通过为第三个类调用另一个require()
解决了这个问题。