Я буду держать это простым. Почему при вызове session_start()
вверху моего PHP-скрипта я получаю вывод:
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
и перенаправляет обратно на исходную страницу. Ничего об исключениях или деструкторах классов там.