Vagrantで仮想マシンを用い、NFSでソースコードを同期した際に遭遇したトラブルです。
バージョン
PHP:5.4.28以上
同期設定
ソースコードを保管しているディレクトリをNFSで同期しました。
調査結果
当該プログラムは、セッションファイルが、同期したディレクトリに作成される仕様でした。
NFSで同期した際、共有した全てのファイルとディレクトリの所有者は、ホストでvagrant upを実行したユーザー(以下ホストユーザー)となります。グループも同様(以下ホストグループ)です。
PHPはVer5.4.28から、セッションファイルの所有者が、root、またはWebサーバーの実行ユーザーでないと、セッションファイルの作成は出来ますが、書き込みは出来なくなりました。
ソースコードをゲストOSとNFSで同期した場合、Webサーバー実行ユーザー(通常は”vagrant”)と、セッションファイルの所有者であるホストユーザーが一致しません。その為、セッションファイルは作成されるものの、書き込みが出来ず空となってしまっていた訳です。
対応
PHP標準のセッション保管ディレクトリを用いて対応しました。
下記のコマンドでシンボリックリンクを作成します。
1 2 | $ rm -rf <当該プログラムのセッション保管ディレクトリ> $ ln -s /var/lib/php/session/ <当該プログラムのセッション保管ディレクトリ> |
これでセッションファイルの所有者が、Webサーバー実行ユーザーとなり、書き込み出来るようになります。
宮崎県在住。
プログラムを書いて暮らしています。趣味はルアーフィッシング、ギター。