自分でphp7をコンパイルしました(974f6c2a705)。 symfonyを使用してphp7 + php-fpm + nginxを実行すると、次のエラーが発生します。
(セッションにsnc redisバンドルを使用:)
Warning: session_write_close(): Failed to write session data (user). Please verify that the current setting of session.save_path is correct (/tmp)
(ネイティブセッションサポートを使用:)
Warning: session_write_close(): Failed to write session data (user). Please verify that the current setting of session.save_path is correct (/[...]/app/cache/dev/sessions)
phpにはフォルダーへの読み取り/書き込みアクセス権があるため、問題はsymfonyに関連しているようです。
このコードだけを実行すると、うまくいきます:
session_start();
$_SESSION['x'] = 4234;
session_write_close();
symfonyがセッションの作成に失敗する理由や提案はありますか?
PHP7では、カスタムセッションハンドラーのセッション処理がより厳密になっています。 symfonyのwriteメソッド用のカスタムセッションハンドラーは、何らかの理由でfalseを返します。以前は、これはエラーをトリガーしませんでしたが、現在はエラーをトリガーします。
どのカスタムセッションハンドラーを使用しているかについては多くの情報がないため、ほとんどの場合trueを返すように見えるため、可能であれば別のカスタムセッションハンドラーを設定することをお勧めします。
以下に、さまざまなセッションハンドラーSymfonyを示します。これらのほとんどは、MemcacheのハンドラーとWriteCheckSessionHandlerを除いて、明示的にtrueを返すようです。
編集:
Snc Redis Bundleセッションハンドラーについて言及したので、本当に最新バージョンを使用していますか? 1年前、書き込み時に常にtrueを返すように変更されました。
https://github.com/snc/SncRedisBundle/blob/master/Session/Storage/Handler/RedisSessionHandler.php
[〜#〜]更新[〜#〜]
バグをPHP=)に送信して、将来のバージョンでより有用なエラーメッセージを見つけられるかどうかを確認します(投票するか、バグレポートにコメントを残してください)。
一部の検索結果でリストの一番上に表示され、Symphonyを使用していないためにこのスレッドが見つかった場合-これは私の場合に発生しました。セッションハンドラの書き込みメソッドが_bool - true on success
_を返すことを確認してください。
Php session_set_save_handler のドキュメントではこれについて触れていません。ただし、 SessionHandlerInterface のドキュメントには記載されています。
戻り値(通常、成功した場合はTRUE、失敗した場合はFALSE)。この値は、処理のためにPHPに内部的に返されます。
以前のバージョンのPHPでは、何も返さなくてもエラーにはなりませんでした。 PHP 7.0)なので、何も返さないとエラーが発生します:Warning: session_write_close(): Failed to write session data (user). Please verify that the current setting of session.save_path is correct (/tmp)
。
PHPの将来のバージョンでは、やや明確なメッセージが発行されるように見えます。_Failed to write session data using user defined save handler.
_
Symphonyを使用している場合-Chris Banksからの回答は、元の問題に対するより完全でより有用なソリューションを提供します。
問題が解決したことをうれしく思います-これらのエラーを受け取った誰かがこのスレッドにつまずく場合、明確にするために別のメモを追加したいと思います:エラーは明らかにフレームワークドライバーやその構成の問題で始まり、これが最新に更新される理由ですブランチは問題を解決しました。 PHPがSymfony Redisセッションドライバを使用しようとしたため、設定の問題により、php.iniのsess.save_pathに戻されたため、エラーメッセージ自体が発生しました。これが理由です= PHPディレクトリに書き込めませんでした-php.ini sess.save_path(ファイル)でユーザーsave_handler(Redis)を使用しようとしました。デフォルトにフォールバックする場合は、 php.iniのsess.save_handler設定も使用する必要がありますどちらにしても、この場合のエラー自体は実際の問題を示していません。
Apache PHP7からPHP7-FPMに移行したときにも同じ問題が発生しました。私にとっての唯一の修正は、Symfonyアプリのvarディレクトリに移動し、そこにあるすべてのファイルを削除し、必要に応じてvarの権限を修正することでした。chmod777。その後、アプリのURLをリロードし、準備完了です。その後、symfonyはすべてのキャッシュ、ログ、セッションなどを再作成します。