finfo_open()で見たことないエラーがいっぱい出てた

この記事はだいぶ前に書かれたものなので情報が古いかもしれません
サーバーを引っ越してから、こんなエラーが頻繁に出るようになった。


Failed to load magic database at ‘/usr/share/misc/magic’


もうね、とにかくいっぱい出てた。ここ最近のエラーログの実に9割くらいがこのエラーだったと言っても良い。いやごめん。9割は言い過ぎた。8割くらい。

これがね、ものすごい美人なお姉さんにエロい声で「いっぱい出たねー」って語尾にハートマークをつけて言ってもらえるならまだ良いよ。でも今回は機械ですからね。同じ機械でも、アニメに出てくるようなメイドロボットなら可愛い声で「いっぱい出てますよご主人様」とか言ってくれるのかもしれないけど、ただのエラーログですからね。味気なんて欠片もない。

頻発しているわりに、特にシステムに影響が出ていないっぽいのがまたね……いや、エラーなんだから影響が出てはいるんだろうけど、運用上、特に何の問題も発生してないっていうのがね……なかなか気づけなかった原因と言いますか。

まあ、とりあえず直ったんで、同じようなエラー出てる人がいたときのために、ここにそれを残しておきます。



ちなみに、先に言っておくと、僕はこのエラーが何なのかよく分かってない。文面から察するにmagicデータベースってやつのロードに失敗してるってことなんでしょうが、magicデータベースってのがまずよく分からん。

もっと言うと、僕は今まで「finfo_open()」っていう関数がPHPにあることすら知らなかった。画像のアップロードとか、ライブラリを使って何も考えずに当たり前のようにやってましたけど、実際はこんな関数を使って画像の情報を取得したりしていたんですね。

んで、このfinfo_openなんですが、第二引数でmagicデータベースを指定することができるんですね。さっきも言ったように、僕自身よく分かってない部分が多いから詳細な説明は省略していくけど。

この第二引数に何も指定しなかった場合、デフォルトでは「/usr/share/misc/magic」ってやつが指定されているみたいなんです。や、もしかしたらサーバーの環境とかによって微妙に違うのかもしれないけど。

で、今回はそのデフォルトが指定されているはずのmagicデータベースがロードできなかったと、何かそんな感じですね。



じゃあどうするか。

一言で言えば「だったらロードできるmagicデータベースを指定すればええやん」ってことですよね。つまり第二引数に明示的にmagicデータベースを入れるということ。

でもmagicデータベースってやつが何かよく分かってない僕としては、ロードできるmagicデータベースって何があんだよって話だったので、とりあえずサーバーの中から「magic」っていうファイルを洗い出して、端から試してみました。

何でそんなやり方をしたのかってーと、こちらの仕事を早く片付けて遊ぶための技術ノートさんの記事を参考にさせていただいたからです。しぇいしぇい。

//コマンド実行
# find / -name magic

//実行結果
/usr/share/file/magic
/usr/share/magic
/usr/share/misc/magic
/etc/httpd/conf/magic

unixのfindってコマンドを使うと、指定したディレクトリの中から条件に合ったファイルを探すことができます。今回は「magic」って名前のファイルですね。さらに指定ディレクトリが「/」なんで、サーバーの中の全ファイルを漁ったわけです。

僕の場合は上の四つが該当しました。

そしたらあとはもう、ただの総当たりよ。一つずつ引数に入れてみて、エラーが出ないやつを検証してみた感じ。

finfo_open(FILEINFO_MIME, '/usr/share/file/magic');
finfo_open(FILEINFO_MIME, '/usr/share/magic');
finfo_open(FILEINFO_MIME, '/usr/share/misc/magic');
finfo_open(FILEINFO_MIME, '/etc/httpd/conf/magic');

僕の場合は、四つ目、最後の「/etc/httpd/conf/magic」を指定したときに、エラーが出なくなりました。

あ、ちなみに第一引数の「FILEINFO_MIME」ってのは、Fileinfo定数とかいうやつらしいです。






みんなもこのエラーが出たら、まずはfindでサーバー内を漁って、試してみるのが良いんじゃないかなぁ。

ただあれですね。僕は結局これが何なのか理解せずにやっちゃってますから、後々他のところで影響が出るんじゃないかという可能性は、ゼロではないですね。

しかしあれですねぇ……今までレンタルサーバーしか使ったことなくて、先月末に初めて自分でサーバーを構築したんですけども、あの日からこっち、毎日何かしらの、今まで見たことないエラーだの挙動だのに振り回されている気がしますねぇ。

サーバーの設定とかちゃんとやった上でウェブサイトを運用している人はマジでえれーよ。ほんと尊敬するわ。俺にはムリやわ。もう泣きそう。
 もしかしたら何か関連しているかも? 
 質問や感想などお気軽にコメントしてください