【質問の背景】
私はPHP初心者であり、社内システムの改修を担当することになりました。
改修のために検証環境に本番環境の資材を適用しようとしました。
改修前は問題なくシステムにログインできていましたが、本番環境のソースを検証環境のファイルに上書きしたところ、
システムのログイン画面にwarningが表示されるようになりました(どのディレクトリを上書きしたのかは後述します)。
そこで、以前の状態に戻すためにバックアップとして保存していたファイルに切り戻しました。
しかし、切り戻したソースでログイン画面にアクセスしたところ、パーミッションのエラーが表示されてしまいました。
パーミッションを確認したところ、パーミッションは正しく付与されていいました。
社内に詳しい人がいないため、
切り戻し後に発生したエラーの解消方法または調査方法を教えていただきたいです。
前提:
Linux接続ユーザ: root権限
システムの固有名詞に関わる名称は「****」で表記します
<環境情報>
クライアント端末はWindows 10
OS:CentOS release 6.9 (Final)
Apatch:Apache/2.2.15 (CentOS) ※起動確認済み
PHPバージョン:5.6.28
Cakeバージョン:3.2.8
そのほか
config: /var/www/html/****(システム名)/config/
「検証環境」と「本番環境」とは:ソースが乗っているサーバーとDBの接続先が異なる
構成はそれぞれ同じ
Nginx+PHP-FPMの構成か否か:Nginx+PHP-FPMの構成ではない
補足
ps aux | grep nginx
上記を実行し、nginxプロセスは見つかりませんでした。
【切り戻しまでの操作手順】
バックアップの取得:
WinSCPを使用して、検証環境の既存のフォルダ(/var/www/html/****)をコピーし、
社内ネットワーク上のファイルサーバーに貼り付けてバックアップを作成しました。
本番環境のソースを上書き:
検証環境上のファイルに本番環境のソースを上書きしましたが、warningが表示されたため、
誤った方法であると判断し、切り戻しを実行しました。
【切り戻し方法】
WinSCP上で、上書きしてしまったフォルダ(/var/www/html/****)を「****_bk」として退避しました。
ファイルサーバーに退避していた元のフォルダ(****)をコピーし、WinSCP上の「/var/www/html/」配下に貼り付けました。
結果として、システムのログイン画面(http://<IPアドレス>/****/users/login)にアクセスしたところ、
複数箇所でwarning(パーミッションのエラー)が表示され、正常にログイン画面が表示されません。
画面に表示されるエラーメッセージ
Warning (512): /var/www/html/****/tmp/cache/persistent/ is not writable [CORE/src/Cache/Engine/FileEngine.php, line 429] Warning: file_put_contents(/var/www/html/****/logs/error.log) [function.file-put-contents]: failed to open stream: Permission denied in /var/www/html/****/vendor/cakephp/cakephp/src/Log/Engine/FileLog.php on line 134 Warning (512): /var/www/html/****/tmp/cache/models/ is not writable [CORE/src/Cache/Engine/FileEngine.php, line 429] Cache engine Cake\Cache\Engine\FileEngine is not properly configured. RuntimeException Documentation API If you want to customize this error message, create src/Template/Error/error500.ctp toggle vendor stack frames Warning (2): file_put_contents(/var/www/html/****/logs/error.log) [function.file-put-contents]: failed to open stream: Permission denied [CORE/src/Log/Engine/FileLog.php, line 134] Warning: file_put_contents(/var/www/html/****/logs/error.log) [function.file-put-contents]: failed to open stream: Permission denied in /var/www/html/****/vendor/cakephp/cakephp/src/Log/Engine/FileLog.php on line 134
試したこと
ChatGPT(バージョン3.0)を使用して、エラーの意味、原因、解決方法についての質問応答を繰り返しました。
その結果、パーミッションのエラーだということを理解し、以下の内容を試しました。
① エラーメッセージに表示されているディレクトリとファイルのパーミッションを確認しました。
確認方法はWinSCPのプロパティ設定です。
結果として、権限は正しく付与されていました。
② Teratermを使用して、コマンドでパーミッションを更新しました。
なお、「error.log」は元々「644」のパーミッションでしたが、今回「755」に変更しました。
他の2つのディレクトリは元々755のパーミッションでした。
chmod -R 755 /var/www/html/****/tmp/cache/persistent/ chmod -R 755 /var/www/html/****/logs/error.log chmod -R 755 /var/www/html/****/tmp/cache/models/
<パーミッション更新後の結果>
再度システムのログイン画面にアクセスしましたが、エラーの内容は変わりませんでした。
③ ログの確認を行いました。
/var/www/html/****/logs/error.log:今回の問題に関する記録はありませんでした
(最後の記録は私がアクセスする前の無関係なログでした)。
また、該当システムのフォルダではないログの確認:/var/log以下のログを確認しましたが、エラーログは見つかりませんでした。
④ その他、試したり確認したりしたこと
・ACLの設定を確認しました(getfaclコマンドの実行)が、問題はありませんでした。
・実行ユーザーを確認しました(root)。
・Teratermを使用して、フォルダの構成に問題はないか確認しました。
【補足情報】
使用ツール
・WinSCP
・Teraterm
クライアント:Windows 10
以上です。ここまで読んでくださりありがとうございます。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー