0

これは単純にしておきます。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.php18歳以上の確認に使用されるスクリプトです。内容は最小限です:

session_start();

if (isset($_GET['mod'])) {
    $mod = $_GET['mod'];
    $_SESSION[$mod] = '1';
}

header('Location: '.$_SERVER['HTTP_REFERER']);
exit;

ご覧のとおり、キーを$_SESSION配列に保存して元のページにリダイレクトするだけです。例外やクラスのコンストラクターについては何もありません。

4

2 に答える 2

0

セッション_startの前にエコーや印刷はないと思います。

関数呼び出しの前に空白がある場合は、それを削除してみてください。

session_startを呼び出す前にob_cleanを試してください。私は副作用を知りません。:(

試す

于 2011-03-09T14:48:39.907 に答える
0

グローバルなし!!!!!!!!

データベース接続用のラッパーを作成します(データベースが1つしかない場合、シングルトンクラスは「OK」です-複数ある場合は、変更されたものが必要です(例が必要な場合は大声で))。

それからただ使う

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();

エラーは発生しません...

于 2011-03-10T10:20:07.783 に答える