【发布时间】:2011-03-09 14:43:33
【问题描述】:
我会保持简单。为什么在我的 PHP 脚本顶部调用 session_start(),我在底部得到这个输出:
Fatal error: Exception thrown without a stack frame in Unknown on line 0
发生了什么事?
编辑:一些进一步的细节,因为我已经进一步隔离了问题。
index.php(摘录):
<?php
session_start();
require_once('inc/database.php');
require_once('inc/gallery.php');
...
database.php:
<?php
try {
$dsn = 'mysql:host=localhost;dbname=tees_db';
$pdo = new PDO($dsn, '[username removed]', '[password removed]');
}
catch (PDOException $e) {
header('HTTP/1.1 503 Service Unavailable');
die('There was an error connecting to the database.');
}
gallery.php(摘录):
<?php
class Gallery {
private $pdo;
public function __construct() {
global $args, $pdo, $request;
$this->pdo = $pdo;
}
...
}
$gallery = new Gallery();
当我尝试将全局 $pdo 变量分配为类属性时,问题出现在 Gallery 类中。当$pdo 只是一个 PDO 实例时,为什么这会导致致命错误?
编辑 2: 我发现关闭浏览器并重新启动(终止会话)会抑制错误。只有在调用inc/confirm.php 时才会触发该错误。
inc/confirm.php 是用于 18 岁以上确认的脚本。内容很少:
session_start();
if (isset($_GET['mod'])) {
$mod = $_GET['mod'];
$_SESSION[$mod] = '1';
}
header('Location: '.$_SERVER['HTTP_REFERER']);
exit;
如您所见,只需在 $_SESSION 数组中保存一个键并重定向回原始页面。那里没有关于异常或类解构器的内容。
【问题讨论】:
-
bugs.php.net/bug.php?id=33598 ?你确定是 session_start() 吗?
-
我没有
__destruct方法,更不用说一个抛出异常了;我已经通过删除它将它隔离到session_start()调用,这也抑制了错误。 -
但如果 session_start 失败,它会在页面顶部显示错误......
-
你把它太简单了。尝试为您的问题添加更多详细信息。错误可能在于调用 session_start() 的上下文中。尝试更好地描述它或在 session_start() 之前的行中发布回溯。
标签: php session fatal-error