session_start () вызывает фатальную ошибку - PullRequest
0 голосов
/ 09 марта 2011

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

Ответы [ 2 ]

0 голосов
/ 10 марта 2011

НЕТ ГЛОБАЛОВ !!!!!!!

создать оболочку для вашего соединения с базой данных (синглтон-класс «ОК», если у вас есть только одна БД - если у вас больше, чем модифицированный, требуется (Привет, если вам нужен пример)).

, тогда просто используйте

class Gallery {
    private $pdo;
    public function __construct() {

        $this->pdo = DBObj::getInst();
    }
    ...
}
$gallery = new Gallery();

, если вы можете заняться рефакторингом, но у вас все еще есть пробники, просто привет.на самом деле думаю, что здесь проблема, хотя ...

Я запустил

session_start();

try {
    $dsn = 'mysql:host=localhost;dbname=DB';
    $pdo = new PDO($dsn, 'UN', 'PW');
}
catch (PDOException $e) {
    header('HTTP/1.1 503 Service Unavailable');
    die('There was an error connecting to the database.');
}

class Gallery {
    private $pdo;
    public function __construct() {
        global $args, $pdo, $request;
        $this->pdo = $pdo;
    }

}

$gallery = new Gallery();

и не получил ошибок ...

0 голосов
/ 09 марта 2011

Я предполагаю, что до начала сеанса _seart нет эха или печати. ​​

Если до вызова функции есть пробел, попробуйте удалить его.

Попробуйте ob_clean перед вызовом session_start.я не знаю побочных эффектов.: (

Попробуйте

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...