2016-11-07 5 views
0

1つのサーバーから別のサーバーに複数のファイルをアップロードするための小さなスクリプトを作りたいと考えています。問題は、100を超えるURLを追加するとファイルが破損することです。サーバーへの複数のリモートアップロードサーバー

ファイルを破損しないようにするには、それをよりきれいにする方法です。ここで

はスクリプトです:

// Check if form has been submitted 
if(@$_POST['submit']){ 
ini_set("max_execution_time", 0); // no time-outs! 
ignore_user_abort(true); // Continue downloading even after user closes the browser. 
// URLS -- One on each line 
$URL = $_POST['url']; 
// Relative path to Save downloaded images 
// Default is "downloads" 
// Make sure that it is writable (chmoded correctly) 
$folder = $_POST['folder']; 
// Check if User has provided a local folder 
if (!$folder || !isset($folder)){ 
// Generate error if left blank by user. 
die ("Please specify local folder name"); 
} 
// Split all URLS into an array 
$urls = split("\n", $URL); 
// Remove Carriage Returns (useful for Windows-based browsers) 
$urls = str_replace("\r", "", $urls); 
$mh = curl_multi_init(); 
foreach ($urls as $i => $url) { 
$path = pathinfo($url); 
$g=$folder . "/" . $path["basename"] ; 
// Check if file already exists on local folder. 
if(file_exists($g)){ 
// If exists, delete the file so it always contains the latest update. 
unlink($g) or die("Unable to delete existing '$g'!"); 
} 
// Update the user of what's going on 
echo "$i) Downloading: from <b>$url</b> to <a href=\"$g\"><b>$g</b></a><br />"; 
if(!is_file($g)){ 
$conn[$i]=curl_init($url); 
$fp[$i]=fopen ($g, "w"); 
curl_setopt ($conn[$i], CURLOPT_FILE, $fp[$i]); 
curl_setopt ($conn[$i], CURLOPT_HEADER ,0); 
// curl_setopt($conn[$i],CURLOPT_CONNECTTIMEOUT,1000); 
curl_multi_add_handle ($mh,$conn[$i]); 
} 
} 
do { 
$n=curl_multi_exec($mh,$active); 
} 
while ($active); 
foreach ($urls as $i => $url) { 
curl_multi_remove_handle($mh,$conn[$i]); 
curl_close($conn[$i]); 
fclose ($fp[$i]); 
} 
curl_multi_close($mh); 
} // task closed 
?> 
<br /> 
<br /> 
<fieldset> 
<legend> 
<label for="url">Server to Server Upload Script</label> 
</legend> 
<form method=POST> 
<label for="url">Insert Files URL, One Per Line: </label><br /> 
<textarea rows=15 cols=75 id="url" name="url"><?= $URL ?></textarea><br /> 
<label for="folder">Folder Name: </label><input type=text id="folder" name="folder" value="uploads"/> 
<input type=submit name="submit" value="Start Uploading Files!" /> 
</form> 
</fieldset> 
+0

どのような方法では、破損したファイルのでしょうか? 「破損した」ファイルの内容は何ですか? – Vaviloff

+0

ファイルはJPGイメージです – Ali

+0

そして、破損したイメージの内容は何ですか? (テキストエディタで開くことができます)。ターゲットサイトからのエラー応答があると思われます。 – Vaviloff

答えて

0

私はあなたからダウンロードしているサイトが律速スクリプトであると考えています。あなたのスクリプトはおそらく、許可された分より多くの要求を作成します。そのため、後者の要求は空になります。

この問題を解決するには、具体的にあなたのユースケース用に設計された別のcURLファミリ関数を追加するとよいでしょう:curl_multi_select 「curl_multi接続のいずれかにアクティビティがあるまで、[実行フロー]をブロックします(またはタイムアウトに達しました)。あなたはこのようにそれを使用しようとすることができ

do { 
    if (curl_multi_select($mh, 0.25) == -1) { 
     usleep(100); 
    } 

    $n = curl_multi_exec($mh, $active); 
} 
while ($active); 
+0

がこのセクションを追加し、1000画像のURLまで追加すると作業しない – Ali

関連する問題