うーん、これは今まで見たことのない問題です。
PHP を使用して FTP ファイルをストリーミングし、あるサーバーから自分のサーバーにコピーしようとしてfopen()
います。feof()
通常のhttp://
URL を使用する場合、これは問題なく機能します。ただし、ftp://
プロトコルを使用すると、次のエラーが表示されます。
fopen(ftp://.../streaming/planted2.mp4) [0function.fopen0]: failed to open stream: FTP server reports 550 /streaming/planted2.mp4: not a plain file.
URLが正しいことを確認しました。
ブラウザの検索バーにポップすると、常に正しく読み込まれます。
このエラーに続いて、ラッパーでfeof()
またはを使用しようとすると、それぞれの関数がリソースを期待しているが、代わりにブール値が提供されているというエラーが発生します。が失敗していfread()
なければ、このようなことはありません。fopen()
ファイルは非常に大きいため (場合によっては数ギガバイト)、ストリーミングが必須です。また、サーバーの構成により、一部の出力をバッファリングするために各チャンクをループする方法が必要です。そうしないと、サーバーが停止します。これは、Rackspace に代わって奇妙な構成です。それが私が使用している理由ですfeof()
。
それでは、これ以上苦労することなく、私の質問は次のとおりです: 550 エラーは何を意味し、「プレーン ファイル」とは何ですか? ダウンロードしようとしているサーバーの構成に問題がある場合、私の制限を考えると、どのような選択肢がありますか?
編集
これはサーバーの問題であると判断しました。ただし、問題はまだ解決されていません。
上司とサーバー管理者に連絡したところ、サーバー担当者は、私が遊んでいた Linux ベースのサーバーではなく、別の Windows ベースのサーバーでこれをテストするように言いました。私のスクリプトは Windows サーバーで動作するので、スクリプトに誤りがないことを確認しました。
残念ながら、私の上司はまだ問題を解決して、Linux ボックスで動作しない理由を突き止めてほしいと言っています。理由がまったくわからず、どこを見ればよいかわかりません。どんなヒントでも大歓迎です!