この記事を三行にまとめると
ささいな話をささっとしようFailed opening required
CV:出川哲朗
ささいな話をささっとしよう。
phpで「require_once()」なんかを使ってファイルを読み込むときなんだけど、今まで普通に読み込めてたのに、別のサーバー(例えばテスト環境から本番環境とか)にアップしたらエラーが出るようになったぞ、みたいなことがある。いきなりFatal Errorが出て焦ったりすることがある。
たぶん、そういうときはおよそこんなエラーが出る。
Failed opening required
include_pathの設定が間違ってたりすると起こることがあるんだけど、でも全く同じ環境を用意した他のサーバーでは動くってときは、この設定はたぶん合ってる。
そういうときは、たいていファイルのパーミッションの問題だったりする。
基本的に、アプリケーションを動かすのはapacheさんがやっていると思います。だからファイルの所有者がapacheなら何の問題もない。でも多くの場合、手動でサーバーにアップしたファイルの所有者はFTPユーザーだったりする。んでもって、ファイルのパーミッションが600とか640とかになってると、apacheはそのファイルを操作できない。だからrequireなどで失敗する。
ファイルの所有者をapacheに変えても問題ないのならそうしちゃっても良いけど、後々そのファイルを修正して再度FTPで上げることがある場合にそれをやっちゃうと、今度はFTPユーザーがそのファイルを上書きできなくてエラーになっちゃう。
ってなことで、そんなときはファイルのパーミッションを644にすればOK。もし640だった場合にそのパーミッションを変えたくないって場合は、FTPユーザーのグループにapacheを追加しちゃうっていう手もあるかな。
sshでサーバーに接続して、以下のコマンドを実行すればグループを追加できる。
ここでは仮に、FTPユーザーのユーザー名を「ftp」としてます。
パーミッションが600でそれを変えたくないって場合は……仕方ないね。おとなしく所有者をapacheにするしかない、のかな?
覚えてればなんてことない話なのですが、自作のファイルだったらともかく、どっかから持ってきたSDKライブラリ的なものが動かなかったりすると、ちょっと焦っちゃいますね。「あれ? 何かこれ読み込むときに特別な設定とか必要だったっけ?」みたいな。すぐにパーミッションの問題だって気づかなかったりして、「やばいよやばいよー、本番環境が動かないよー(CV:出川哲朗)」とか口走っちゃったりする。
気をつけたいですね(職場で急に出川さんのモノマネをしたらどうしたんだあいつって思われちゃうから)
phpで「require_once()」なんかを使ってファイルを読み込むときなんだけど、今まで普通に読み込めてたのに、別のサーバー(例えばテスト環境から本番環境とか)にアップしたらエラーが出るようになったぞ、みたいなことがある。いきなりFatal Errorが出て焦ったりすることがある。
たぶん、そういうときはおよそこんなエラーが出る。
Failed opening required
include_pathの設定が間違ってたりすると起こることがあるんだけど、でも全く同じ環境を用意した他のサーバーでは動くってときは、この設定はたぶん合ってる。
そういうときは、たいていファイルのパーミッションの問題だったりする。
基本的に、アプリケーションを動かすのはapacheさんがやっていると思います。だからファイルの所有者がapacheなら何の問題もない。でも多くの場合、手動でサーバーにアップしたファイルの所有者はFTPユーザーだったりする。んでもって、ファイルのパーミッションが600とか640とかになってると、apacheはそのファイルを操作できない。だからrequireなどで失敗する。
ファイルの所有者をapacheに変えても問題ないのならそうしちゃっても良いけど、後々そのファイルを修正して再度FTPで上げることがある場合にそれをやっちゃうと、今度はFTPユーザーがそのファイルを上書きできなくてエラーになっちゃう。
ってなことで、そんなときはファイルのパーミッションを644にすればOK。もし640だった場合にそのパーミッションを変えたくないって場合は、FTPユーザーのグループにapacheを追加しちゃうっていう手もあるかな。
sshでサーバーに接続して、以下のコマンドを実行すればグループを追加できる。
usermod -a -G ftp apache
ここでは仮に、FTPユーザーのユーザー名を「ftp」としてます。
パーミッションが600でそれを変えたくないって場合は……仕方ないね。おとなしく所有者をapacheにするしかない、のかな?
覚えてればなんてことない話なのですが、自作のファイルだったらともかく、どっかから持ってきたSDKライブラリ的なものが動かなかったりすると、ちょっと焦っちゃいますね。「あれ? 何かこれ読み込むときに特別な設定とか必要だったっけ?」みたいな。すぐにパーミッションの問題だって気づかなかったりして、「やばいよやばいよー、本番環境が動かないよー(CV:出川哲朗)」とか口走っちゃったりする。
気をつけたいですね(職場で急に出川さんのモノマネをしたらどうしたんだあいつって思われちゃうから)