2017-03-25 12 views
0

私の問題は、サーバーからサンプルファイルをダウンロードしようとしていますが、ローカルホスト上でファイル全体をダウンロードできる場合は、100バイトしか保存されず完全なファイルではありません。curlはプロダクションサーバで100バイトしかダウンロードできないのはなぜですか?

私が使用するコードは次のとおりです。私は本当にそれが本番Linuxサーバ上で動作しない理由として困惑しています

// https://pgli96.oloadcdn.net/dl/l/7Cfk7N6ajhk19Byr/tr6gjooZMj0/big_buck_bunny_240p_5mb.3gp.mp4?mime=true to view the file in browser 
$url = 'https://pgli96.oloadcdn.net/dl/l/H8-l9DTbn5X1eBid/tr6gjooZMj0/big_buck_bunny_240p_5mb.3gp.mp4'; 
set_time_limit(0); 
$fp = fopen (storage_path('app/download/test.mp4'), 'w+'); 
curl_setopt($ch, CURLOPT_TIMEOUT, 50); 
curl_setopt($ch, CURLOPT_FILE, $fp); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_exec($ch); 
curl_close($ch); 
fclose($fp); 

。カールもそこにインストールされます。どんな助けも高く評価されるでしょう!

ありがとうございます。

+0

'CURLOPT_TIMEOUT'オプションを削除すると何が起こりますか? – Psi

+0

これを削除すると、同じ問題が発生します。それは100bytesだけを書きます –

答えて

2

CDNプロバイダは、さまざまな場所からのコールをブロックします。実動システムから同じURLをロードするとき、CDNプロバイダーは、リソースが要求されてからISPが変更されたことを認識します。

私はそのURLを開くと、私は唯一の答え

取得{ "ステータス":403、 "MSG": "ISPはISPを要求する異なるダウンロードを要求:AS20115ダウンロード:AS3320"}

この回答には正確に98バイトが含まれています。最後にCRLFを追加すると、正確に100バイトになります。

ファイルの内容を確認すると、これはリソースの最初の100バイトではなく、私が上で引用した答えとまったく同じです。

だけで、その内容を表示するには(シェル上で)catを使用し、ファイルをチェックするには:

> cat <filename> 

私が推測する、唯一の解決策は、あなたから直接ロードするリソースに対する要求を生成することになりますサーバ(おそらくlynxを使ってそれを行うことができます)

+0

本当に、ありがとう!それがファイル内の内容です。あなたの周りに道があると思いますか?私は 'curl_setopt($ ch、CURLOPT_REFERER、$ _SERVER ['REMOTE_ADDR']);を試しましたが、同じエラーが発生します。 –

+1

エラーメッセージ:「ISPをダウンロードしていません」...このため、CDNは、リソースへのリンクを生成した要求以外のISPを経由してサーバーにアクセスしたことに気付きました。唯一の方法は、サーバーにダウンロードURLを作成することです。 – Psi

+0

lynxについて読んでいます。私にとっては新しいことですが、私はサーバーから要求を生成しようとします。 –

関連する問題