私が抱えていた(そして今解決した)問題を共有する。
開発マシンで、PHPでIISを実行します。PHP7にアップグレードすると、突然コードが機能しなくなり、このエラーが返されました...
session_start():セッションデータの読み取りに失敗しました:ユーザー(パス:C:\ WINDOWS\temp)
権限の問題のように見えますよね?そのため、php.iniの設定を微調整し、フォルダーのアクセス許可を変更しようとして長い時間を費やしましたが、成功しませんでした。
それから私は何かを実現しました。以下の私の答えをご覧ください。
私はついにメッセージが無意味であることに気付きました-アプリケーションはデータベースを使用して独自のセッションハンドラを実装します。 readメソッドでは、データベースから文字列としてセッションデータを取得します。
class Sess implements SessionHandlerInterface
...
public function read($key)
{
$qKey = U_Data::quote($key);
$dt = U_Data::datetime();
$sql = <<<EOT
SELECT `sess_data` FROM `sess`
WHERE `sess_key` = $qKey
AND `sess_exp_ts` > $dt
ORDER BY `sess_exp_ts` DESC
LIMIT 1
EOT;
return U_Data::getOneVal($sql);
}
U_Data :: getOneValメソッドには、一致するデータがない場合に返す2番目のパラメーターがあります。デフォルトはnullで、PHP5では正常に機能しましたが、PHP7.1ではエラーが発生します。代わりに空の文字列を返すように簡単に変更することで、問題を解決しました。
return U_Data::getOneVal($sql, '');
そこにあります。 session_startが機能しないという警告が表示され、独自のセッションハンドラを実装している場合は、readメソッドでコードを確認してみてください- 常に文字列を返します。
(注:U_Dataは単なる自分のデータユーティリティクラスです)
これにより、他の誰かが頭を悩ます時間を節約できることを願っています!
自分で同じエラーを取得していました。多くのグーグルと呪いの後、それは本当に私の場合、エラー出力に記載されたパスではなく、htdocsルートフォルダ上でのアクセス許可の問題であることを証明しました。ルートフォルダーのアクセス許可は700でしたが、その中の他のすべては755でした(フォルダーのアクセス許可について755を規定するJoomlaのインストールがあります)。ルートフォルダーのアクセス許可を修正すると、最終的に問題のブロックが解除されました。