ホームページ >バックエンド開発 >PHPチュートリアル >致命的なエラー: session_start(): ストレージ モジュールの初期化に失敗しました: ファイルの問題の解決策_PHP チュートリアル

致命的なエラー: session_start(): ストレージ モジュールの初期化に失敗しました: ファイルの問題の解決策_PHP チュートリアル

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBオリジナル
2016-07-13 10:30:461083ブラウズ

以前にコンパイルしてインストールした LNMP 環境 + phpmyamdin4.02 のバージョンで、今日この問題が突然発生しました:

コードをコピーします コードは次のとおりです:
致命的なエラー: session_start(): ストレージ モジュールの初期化に失敗しました: files (path: ) in /data/www/phpmyadmin/libraries/session.inc.php on line 83

これは、セッションの初期化時にストレージ パスが間違っていることを大まかに意味します。最初の反応は、php.ini の設定ファイルをチェックすることです:
コードをコピーします コードは次のとおりです:
session.save_path = "/tmp"

デフォルトは、その前にセミコロンがあります。 、これは、以前の構成時に有効になっていないことを意味します。では、なぜ依然としてエラーが報告されるのでしょうか? , そこでインターネットでいくつかの情報を検索しましたが、どれも同じだと感じました:

1. error.log (Apache2.2logs) ファイルをチェックして、エラー レポートがあるかどうかを確認します。見つかりません。
2. php.ini の session.save_handler の値が files であるかどうかを確認します。 そうでない場合は、php.ini ファイルの session.save_path がコメント化されているかどうかを確認します。 ;」。
4. save_path の後のパスを「D:phptemp」などの既存のパスに変更します。
5. temp フォルダーの属性が読み取り可能か書き込み可能かどうかを確認します。
6. APACHE サーバーを再起動します。わかりました
再投稿するときにその人たちが自分で試したかどうかはわかりません(ここでスプレーします、私は自分でテストもせずにそれが最も嫌いなので、ただ広めただけです。私は責任を負いません)全然!)

上記のプロセスに従って、トラブルシューティングを行った後、解決策がまったくないことがわかりましたが、エディターのサーバーはApacheではなくnginxです。
次に、スクリプト test.php を自分で書きました:

コードをコピーします コードは次のとおりです:
$r = session_start();
var_dump($r);
出力される結果は次のとおりです。

コードをコピー コードは次のとおりです:
警告: session_start(): SAFE MODE 制限が有効です。uid が 501 のスクリプトは、/data/ 内の uid 0 が所有する /tmp にアクセスできません。 www/test.php 3行目 致命的エラー: session_start(): ストレージモジュールの初期化に失敗しました: ファイル(パス: ) in /data/www/test.php 3行目

セーフモードでのバグを意味しますphp5. セッションのデフォルトの save_path はシステムの一時ディレクトリです。これには権限の確認が必要です。そして、このスクリプトは /tmp 所有者の uid が 0 では実行できません。uid は 501 であり、www ユーザー グループの権限でもあります。この問題には 2 つの解決策があります:

1. セーフモードをオフにします。2. コマンドラインで chown を実行してファイル/ディレクトリの所有者を変更します。

もちろん、どちらの方法でもサーバー権限が必要です。
以下はサンプル php.ini の設定ファイルです:


コードをコピーします

コードは次のとおりです:

[Session]
 ; Handler used to store/retrieve data.
 ; http://php.net/session.save-handler
session.save_handler = files; Argument passed to save_handler.  In the case of files, this is the path
 ; where data files are stored. Note: Windows users have to change this
 ; variable in order to use PHP's session functions.

 ; The path can be defined as:

 ;     session.save_path = "N;/path"

 ; where N is an integer.  Instead of storing all the session files in
 ; /path, what this will do is use subdirectories N-levels deep, and
 ; store the session data in those directories.  This is useful if you
 ; or your OS have problems with lots of files in one directory, and is
 ; a more efficient layout for servers that handle lots of sessions.

 ; NOTE 1: PHP will not create this directory structure automatically.
 ;         You can use the script in the ext/session dir for that purpose.
 ; NOTE 2: See the section on garbage collection below if you choose to
 ;         use subdirectories for session storage

 ; The file storage module creates files using mode 600 by default.
 ; You can change that by using

 ;     session.save_path = "N;MODE;/path"

 ; where MODE is the octal representation of the mode. Note that this
 ; does not overwrite the process's umask.
 ; http://php.net/session.save-path
 session.save_path = "/tmp"
; Whether to use cookies.
 ; http://php.net/session.use-cookies
 session.use_cookies = 1
; http://php.net/session.cookie-secure
 ;session.cookie_secure =
; This option forces PHP to fetch and use a cookie for storing and maintaining
 ; the session id. We encourage this operation as it's very helpful in combatting
 ; session hijacking when not specifying and managing your own session id. It is
 ; not the end all be all of session hijacking defense, but it's a good start.
 ; http://php.net/session.use-only-cookies
 session.use_only_cookies = 1
; Name of the session (used as cookie name).
 ; http://php.net/session.name
 session.name = PHPSESSID
; Initialize session on request startup.
 ; http://php.net/session.auto-start
 session.auto_start = 0
; Lifetime in seconds of cookie or, if 0, until browser is restarted.
 ; http://php.net/session.cookie-lifetime
 session.cookie_lifetime = 0
; The path for which the cookie is valid.
 ; http://php.net/session.cookie-path
 session.cookie_path = /
; The domain for which the cookie is valid.
 ; http://php.net/session.cookie-domain
 session.cookie_domain =
; Whether or not to add the httpOnly flag to the cookie, which makes it inaccessible to browser scripting languages such as JavaScript.
 ; http://php.net/session.cookie-httponly
 session.cookie_httponly =
; Handler used to serialize data.  php is the standard serializer of PHP.
 ; http://php.net/session.serialize-handler
 session.serialize_handler = php
; Defines the probability that the 'garbage collection' process is started
 ; on every session initialization. The probability is calculated by using
 ; gc_probability/gc_divisor. Where session.gc_probability is the numerator
 ; and gc_divisor is the denominator in the equation. Setting this value to 1
 ; when the session.gc_divisor value is 100 will give you approximately a 1% chance
 ; the gc will run on any give request.
 ; Default Value: 1
 ; Development Value: 1
 ; Production Value: 1
 ; http://php.net/session.gc-probability
 session.gc_probability = 1
; Defines the probability that the 'garbage collection' process is started on every
 ; session initialization. The probability is calculated by using the following equation:
 ; gc_probability/gc_divisor. Where session.gc_probability is the numerator and
 ; session.gc_divisor is the denominator in the equation. Setting this value to 1
 ; when the session.gc_divisor value is 100 will give you approximately a 1% chance
 ; the gc will run on any give request. Increasing this value to 1000 will give you
 ; a 0.1% chance the gc will run on any give request. For high volume production servers,
 ; this is a more efficient approach.
 ; Default Value: 100
 ; Development Value: 1000
 ; Production Value: 1000
 ; http://php.net/session.gc-divisor
 session.gc_divisor = 1000
; After this number of seconds, stored data will be seen as 'garbage' and
 ;ガベージ コレクション プロセスによってクリーンアップされます。
; 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
; {nocache,private,public,} に設定しますHTTP キャッシュの側面を判断するため
;または、アンチキャッシング ヘッダーの送信を回避するには、これを空のままにします。
; http://php.net/session.cache-limiter
session.cache_limiter = nocache
;ドキュメントは n 分後に期限切れになります。
; http://php.net/session.cache-expire
session.cache_expire = 180
; trans SID のサポートはデフォルトでは無効になっています。
; trans sid を使用すると、ユーザーのセキュリティが危険にさらされる可能性があります。
;このオプションは注意して使用してください。
; - ユーザーはアクティブなセッション ID を含む URL を送信できます
;   経由で他の人に。メール/irc/etc.
; - アクティブなセッション 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/"; // セッション保存路径 if(is_writeable($sessSavePath) && is_readable($sessSavePath)){ session_save_path($sessSavePath); } if(!empty($cfg_domain_cookie)) session_set_cookie_params(0,'/',$cfg_domain_cookie);

上記のこのコードは、session_start() の初期化の前に、セッション セッションのファイルが存在するかどうかを判断します。
复制代码

代码如下:
if (! isset($_COOKIE[$session_name])) {

// セッションの最初の開始時にエラーをチェックします
// f.e.セッション ディレクトリにアクセスできません - セッション ファイルが作成されていません
$orig_error_count = $GLOBALS['error_handler']->countErrors();

//session_save_path('./tmp'); session_save_path("/data/www/session "); $r = session_start(); if ($r !== true || $orig_error_count != $GLOBALS['error_handler']->countErrors()
) {
setcookie($session_name, ' ', 1);
/*
* セッションの初期化は言語を選択する前に行われるため、
* ここでは翻訳を使用できません。
*/
PMA_fatalError('エラーなしでセッションを開始できません。PHP で示されたエラーを確認してください。および/ ');
}
unset($orig_error_count);
} else {
session_save_path("/data/www/session");
session_start();
}

この問題を解決するために session_start() の前に session_save_path(“/data/www/session”); を追加しました。
@ini_set(‘session.save_path’, ”/data/www/session”) を渡すのを忘れないでください。
この問題は数時間悩んでいましたが、ようやく解決したので、将来役立つかもしれないので記録しました。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/764624.html技術記事以前にコンパイルしてインストールした LNMP 環境 + phpmyamdin4.02 バージョンで、今日突然この問題が発生しました。次のようにコードをコピーしてください: 致命的なエラー: session_start(): ストレージ モジュールの初期化に失敗しました...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。