- 締切済み
fpassthruを使用したダウンロード時に、内部サーバーエラー
現在、PHP関数のfpassthruを使用して、ファイルのダウンロードダイアログを開く処理を作成しています。 サーバーは、LinuxでApacheと組み合わせて使用しています。 今までは、問題無くダイアログを表示できたのですが、今回サーバーを新しく用意した所、新しいサーバーでダウンロードを行うと、HTTP500の内部サーバーエラーが発生します。 エラー箇所を調べた所、fpassthruの行でエラーが発生している様です。 古いサーバーとは、PHPやApacheのバージョンが若干異なり、設定もまったく同じでは無いのですが、なぜエラーになるか分かりません。 Apacheの、httpd.confの設定が問題の様な気がしますが、どの部分が影響しているか判断できません。 どなたか原因の分かる方、教えて頂けないでしょうか?
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- kusukusu
- ベストアンサー率38% (141/363)
ソース全体を見ないと何も言えないですが、コマンドライン版PHPであれば、CGIの様に、フルパスで指定してやる必要があります。 /user/lib/php 等
- kusukusu
- ベストアンサー率38% (141/363)
どこかで見たことがあるソースかとと思えば、以前PHPLIBの権限でお話しした方ですね(^^; 勘ですが、HTTP500エラーが出ると言うことは、「以前はDOS版だったけど、今回はコマンドライン版だった」と言うことはあり得ませんか?
補足
おっしゃる通り、PHPLIBの件でお世話になった者です。 kusukusuさんのおかげで、なんとか無事に出来上がったのですが、いざ本番環境に乗せてみると、HTTP500の冷たい文字が表示され、困っています。 実は、本番環境は私が用意していないので、何版かは分からないのですが、確認してみます。 ただ、以前動かしていた物は、RedHatのGUIベースの物でした。 確認してみないと分かりませんが、今回はコマンドライン版の可能性はあります。 但し、Debianにコマンドライン版があるか否かは、調べていないので分かりませんが... ちなみに、コマンドライン版だと不都合が出るのでしょうか?
- kusukusu
- ベストアンサー率38% (141/363)
う~ん。。。これだけではたぶん誰も何も言えないと思います(^^; どんなコードですか?
補足
出張に出ていたので、コードを載せるのが遅くなりました。 $downfileは、ファイルのパスが入っていると思って下さい。 ------------------------------------------ $fs=filesize($downfile); header("Content-Disposition: inline; filename=\"".basename($downfile)."\""); header("Content-Type: application/octet-stream"); header ("Content-Length: $fs"); $fp=fopen($downfile,"rb"); @fpassthru($fp); ------------------------------------------ コードとしては、こんな感じです。 ApacheとPHPについては、新旧のサーバーでバージョンを合わせていますが、LinuxはRedHatとDebianの違いがあります。 また、httpd.confやphp.iniも、それぞれのOSに合わせて、環境設定が異なります。 設定ファイルも、問題のありそうな箇所は、見比べてみましたが、どこが悪いか判断がつきません。
お礼
kusukusuさん ありがとうございました。 いろいろ試してみましたが、結論から行くと良く分からないと言う事になりました。 今回は仕方ないので、RedHatで行く事にします。 RedHatとDebianの違いと言ってしまえばそれまでですが、残念な結果になりました。 質問を出してから時間も立ちますし、とりあえず今回の質問は締め切りたいと思います。