この記事では、致命的エラー: session_start(): ストレージ モジュールの初期化に失敗しました: ファイルの問題の解決策を紹介します。
元の解決策: 致命的なエラー: session_start(): ストレージ モジュールの初期化に失敗しました: ファイルの問題
以前コンパイルしてインストールした LNMP 環境 + phpmyamdin4.02 バージョンで、今日突然この問題が発生しました:
致命的なエラー: session_start(): ストレージ モジュールの初期化に失敗しました: /data/www/phpmyadmin/libraries/session.inc.php の 83 行目のファイル (パス: )
大まかな意味は、セッションの初期化時にストレージ パスが間違っているということです。最初の反応は、php.ini の設定ファイルを確認することです:
コードは次のとおりです | コードをコピー |
|
デフォルトでは、その前にセミコロンがあります。これは、以前に設定したときにすでに有効になっていることを意味します。では、なぜ依然としてエラーが報告されるのでしょうか? , そこでインターネットでいくつかの情報を探しましたが、どれも同じだと感じました:
1. error.log (Apache2.2logs) ファイルをチェックして、エラー レポートがあるかどうかを確認します。見つかりません。
2. php.ini の session.save_handler の値が files であるかどうかを確認し、そうでない場合は files に変更します
3. php.ini ファイル内で session.save_path がコメント化されているかどうかを確認し、コメント化されている場合は、先頭の「;」を削除します。
4. save_path の後のパスを「D:phptemp」などの既存のパスに変更します。
5. 一時フォルダーの属性が読み取り可能か書き込み可能かを確認します。6. APACHE サーバーを再起動します。わかりました
転載するときにその仲間たちが自分で試したかどうかは知りません(ここでスプレーしますが、私はそれが一番嫌いなので、自分で試すこともせずに広めただけです。私は責任を負いません)全部!)
上記のプロセスによると、トラブルシューティングの結果、まったく解決策がないことが判明しましたが、Puyu のサーバーは Apache ではなく nginx でした。
次に、スクリプト test.php を書きました:
コードをコピー | |||||||||||||
代码如下 | 复制幣 |
[セッション] ;データの保存/取得に使用されるハンドラー。 ; http://php.net/session.save-handler session.save_handler = ファイル; save_handler に渡される引数。 ファイルの場合はパスです ;データファイルが保存される場所。注: Windows ユーザーはこれを変更する必要があります ; PHPのセッション関数を使用するための変数です。 ; ;パスは次のように定義できます: ; ; session.save_path = "N;/パス" ; ;ここで、N は整数です。 すべてのセッションファイルを に保存する代わりに ; /path、これは N レベルの深さのサブディレクトリを使用します、そして ;セッション データをそれらのディレクトリに保存します。 こんな方に便利です ;または、お使いの OS で 1 つのディレクトリに多数のファイルがあることに問題があり、 ;多くのセッションを処理するサーバーのためのより効率的なレイアウト。 ; ;注 1: PHP はこのディレクトリ構造を自動的に作成しません。 ; その目的のために、ext/session ディレクトリ内のスクリプトを使用できます。 ;注 2: 必要に応じて、以下のガベージ コレクションに関するセクションを参照してください ; セッションストレージにはサブディレクトリを使用します ; ;ファイル ストレージ モジュールは、デフォルトでモード 600 を使用してファイルを作成します。 ; を使用して変更できます ; ; session.save_path = "N;MODE;/パス" ; ;ここで、MODE はモードの 8 進数表現です。これに注意してください ;プロセスの umask は上書きされません。 ; http://php.net/session.save-path session.save_path = "/tmp" ; Cookieを使用するかどうか。 ; http://php.net/session.use-cookies session.use_cookies = 1 ; http://php.net/session.cookie-secure ;session.cookie_secure = ;このオプションにより、PHP は保存と維持のために Cookie を取得して使用するようになります ;セッションID。戦闘に非常に役立つため、この作戦を推奨します ;独自のセッション ID を指定および管理しない場合のセッション ハイジャック。それは ;セッションハイジャック防御のすべてが終わりではありませんが、良いスタートです ; http://php.net/session.use-only-cookies session.use_only_cookies = 1 ;セッションの名前 (Cookie 名として使用)。 ; http://php.net/session.name session.name = PHPSESSID ;リクエストの起動時にセッションを初期化します。 ; http://php.net/session.auto-start session.auto_start = 0 ; Cookie の存続期間 (秒単位)、または 0 の場合はブラウザーが再起動されるまでの存続期間。 ; http://php.net/session.cookie-lifetime session.cookie_lifetime = 0 ; Cookie が有効なパス。 ; http://php.net/session.cookie-path session.cookie_path = / ; Cookie が有効なドメイン。 ; http://php.net/session.cookie-domain session.cookie_domain = ; httpOnly フラグを Cookie に追加するかどうか。これにより、JavaScript などのブラウザー スクリプト言語からアクセスできなくなります。 ; http://php.net/session.cookie-httponly session.cookie_httponly = ;データをシリアル化するために使用されるハンドラー。 php は PHP の標準シリアライザーです ; http://php.net/session.serialize-handler session.serialize_handler = php ; 「ガベージコレクション」プロセスが開始される確率を定義します ;セッションの初期化ごとに。確率は を使用して計算されます ; gc_probability/gc_divisor。ここで、session.gc_probability は分子です ; gc_divisor は方程式の分母です。この値を 1 に設定します ; session.gc_divisor の値が 100 の場合、確率は約 1% です ; gc はあらゆるリクエストで実行されます。 ;デフォルト値: 1 ;開発値: 1 ;生産値: 1 ; http://php.net/session.gc-probability session.gc_probability = 1 ; 「ガベージ コレクション」プロセスが毎回開始される確率を定義します ;セッションの初期化。確率は次の式を使用して計算されます: ; gc_probability/gc_divisor。ここで、 session.gc_probability は分子であり、 ; session.gc_divisor は方程式の分母です。この値を 1 に設定します ; session.gc_divisor の値が 100 の場合、確率は約 1% になります ; gc はあらゆるリクエストに対して実行されます。この値を 1000 に増やすと、次のようになります ;与えられたリクエストに対して gc が実行される確率は 0.1% です。大容量実稼働サーバーの場合、 ;これはより効率的なアプローチです。 ;デフォルト値: 100 ;開発値: 1000 ;生産価値: 1000 ; http://php.net/session.gc-divisor session.gc_divisor = 1000 ;この秒数が経過すると、保存されたデータは「ゴミ」とみなされ、 ;ガベージ コレクション プロセスによってクリーンアップされます。 ; http://php.net/session.gc-maxlifetime session.gc_maxlifetime = 1440 ;注意: セッションファイルの保存にサブディレクトリオプションを使用している場合 ; (上記の session.save_path を参照)、ガベージ コレクションは*行われません* ; 自動的に起こります。 ゴミは自分で出す必要があります ; シェル スクリプト、cron エントリ、またはその他の方法を介して収集します。 ; たとえば、次のスクリプトは と同等です。 ; session.gc_maxlifetime を 1440 に設定します (1440 秒 = 24 分): ; /path/to/sessions -cmin +24 を見つけます | xargs rm ; PHP 4.2 以前には、次のことを可能にする文書化されていない機能/バグがあります ; register_globals の場合でも、グローバル スコープでセッション変数を初期化します。 ;無効になっています。 PHP 4.3 以降では、この機能が使用されている場合に警告が表示されます。 ;機能と警告を個別に無効にすることができます。このとき、 ;この警告は、bug_compat_42 が有効になっている場合にのみ表示されます。この機能 ;正しく処理しないと、重大なセキュリティ上の問題が発生します。それは ;運用サーバーではこの機能を使用しないことをお勧めします。でもあなた ;開発サーバーでこれを有効にし、警告も有効にする必要があります。あなたなら ;開発サーバーではこの機能を有効にしないでください。有効になっても警告は表示されません ;使用されており、これによって発生するデバッグ エラーを追跡するのは困難な場合があります。 ;デフォルト値: オン ;開発値: オン ;生産価値: オフ ; http://php.net/session.bug-compat-42 session.bug_compat_42 = オフ ;この設定は、 を初期化するときに PHP によって警告されるかどうかを制御します。 ;セッション値をグローバル空間にコピーします。 session.bug_compat_42 を事前に有効にする必要があります ;これらの警告は PHP によって発行できます。詳細については、上記のディレクティブを参照してください。 ;デフォルト値: オン ;開発値: オン ;生産価値: オフ ; http://php.net/session.bug-compat-warn session.bug_compat_warn = オフ ; HTTP リファラーをチェックして、ID を含む外部に保存された URL を無効にします。 ;セッションが成立するには、HTTP_REFERER にこの部分文字列が含まれている必要があります ;有効とみなされます。 ; http://php.net/session.referer-check session.referer_check = ;ファイルから読み取るバイト数 ; http://php.net/session.entropy-length session.entropy_length = 0 ;セッションIDを作成するためにここで指定します。 ; http://php.net/session.entropy-file ; /dev/urandom がないシステムでは /dev/arandom を使用できます ; Windows では、entropy_length 設定を設定すると、 ; Windows ランダム ソース (CryptoAPI を使用) ;session.entropy_file = /dev/urandom ; HTTP キャッシュの側面を決定するには、{nocache,private,public,} に設定します ;または、アンチキャッシング ヘッダーの送信を避けるために、これを空のままにしておきます。 ; http://php.net/session.cache-limiter session.cache_limiter = キャッシュなし ;ドキュメントは n 分後に期限切れになります。 ; http://php.net/session.cache-expire session.cache_expire = 180 ; trans SID サポートはデフォルトでは無効になっています。 ; trans sid を使用すると、ユーザーのセキュリティが危険にさらされる可能性があります。 ;このオプションは注意して使用してください。 ; - ユーザーはアクティブなセッション ID を含む URL を送信できます ; 経由で他の人に。メール/IRC/など ; - アクティブなセッションIDを含むURLが保存される可能性があります ; 公的にアクセス可能なコンピューター内。 ; - ユーザーは同じセッション ID を使用してサイトにアクセスできます ; ブラウザの履歴やブックマークに保存されている URL を常に使用します。 ; http://php.net/session.use-trans-sid session.use_trans_sid = 0 ;セッション ID の生成に使用するハッシュ関数を選択します。 ;可能な値 ; 0 (MD5 128 ビット) ; 1 (SHA-1 160 ビット) ;このオプションは、 でサポートされているハッシュ関数の名前に設定することもできます。 ;ハッシュ拡張子。利用可能なハッシュのリストは hash_algos() によって返されます ;機能 ; http://php.net/session.hash-function session.hash_function = 0 ;変換時に各文字に格納されるビット数を定義します ;バイナリ ハッシュ データを読み取り可能なものに変換します。 ;可能な値: ; 4 (4 ビット: 0 ~ 9、a ~ f) ; 5 (5 ビット: 0-9、a-v) ; 6 (6 ビット: 0 ~ 9、a ~ z、A ~ Z、「-」、「,」) ;デフォルト値: 4 ;開発値: 5 ;生産価値: 5 ; http://php.net/session.hash-bits-per-character session.hash_bits_per_character = 5 ; URL リライターは、定義された HTML タグのセットで URL を検索します。 ;フォーム/フィールドセットは特別です。ここにそれらを含めると、リライターは ;非表示の を追加します。それ以外の場合は追加される情報を含むフィールド ; URLに。 XHTML に準拠したい場合は、フォームのエントリを削除してください。 ;たとえ値が後に続かなくても、すべての有効なエントリには「=」が必要であることに注意してください。 ;デフォルト値: "a=href,area=href,frame=src,form=,fieldset=" ;開発値: "a=href,area=href,frame=src,input=src,form=fakeentry" ;プロダクション値: "a=href,area=href,frame=src,input=src,form=fakeentry" ; http://php.net/url-rewriter.tags url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry" |
これは 1 台の VPS 上に配置されているため、上には複数の項目があり、1 つの項目が璞玉で打たれたため、この項目を公開します
目的認証機能はOKです。
以下は次の通りです:
复制幣 | |
$sessSavePath = "/data/sessions/"; |
前述のこのコードは、session_start() の初期化の前にセッション会議が存在するかどうかを判断するためのファイルです。
これより、phpmyadmin エリアに保存されている文章/phpmyadmin/libraries/session.inc.php做了下修正:
复制幣 | |
if (! isset($_COOKIE[$session_name])) {
// セッションの最初の開始時にエラーをチェックします |