0

うーん、これは今まで見たことのない問題です。

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 ボックスで動作しない理由を突き止めてほしいと言っています。理由がまったくわからず、どこを見ればよいかわかりません。どんなヒントでも大歓迎です!

4

1 に答える 1

0

sco unix サーバーからファイルを取得しようとしたときに、この問題に遭遇しました。

サーバー ファイルの場所: /home/user/data/myfile.csv

以下を任意のブラウザに配置すると、ファイルが取得されます。

ftp://user:password@host/data/myfile.csv

ただし、以下を実行すると、あなたと同じエラーが発生します

$f = fopen("ftp://user:password@host/data/myfile.csv", "r");

ただし、フル パスを fopen に入れると、問題なく動作します。

$f = fopen("ftp://user:password@host/home/user/data/myfile.csv", "r");

これで問題が解決するかどうかはわかりませんが、私にとってはうまくいきます。

于 2016-05-10T07:51:40.597 に答える