我会保持这个简单。为什么在我的 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();
Gallery
当我尝试将全局$pdo
变量分配为类属性时,问题就出现在课堂上。$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
数组中保存一个键并重定向回原始页面。那里没有关于异常或类解构器的信息。