2014-03-05 41 views
0

我想從遠程主機(使用URL)複製多個圖像到我的本地框(使用本地框上的XAMPP執行腳本)。我正在使用copy()。當我執行copy()時,只會創建陣列中的最後一個圖像。所以,如果我有5個圖像鏈接,只有第5個圖像被創建,甚至沒有任何事先創建文件。從遠程服務器複製多個圖像

我試過CURLFOpen然後都創建了所有的文件,但是所有的文件都是空白的,除了最後一個文件完全沒有問題。

$txt_file = file_get_contents('urls_for_images.txt'); 
if(!empty($txt_file)){ 
    $image_links = explode("\n", $txt_file); 

    $i = 1;  
    foreach($image_links as $image_link){ 
    $file_info = pathinfo($image_link); 
    copy($image_link, 'images/00' . $i . '_original.' . $file_info['extension']); 
    $i++; 
    } 
} 

我不知道問題出在哪裏發生,但它似乎有些奇怪,我認爲它會在文本文件中的最後一個圖像複製,而不是任何其他人。

感謝您的幫助!

回答

0

i變量從不改變,因此代碼試圖一遍又一遍地複製具有相同名稱的文件,並且只保存最後一個文件。
嘗試修改你的代碼是這樣的:

$txt_file = file_get_contents('urls_for_images.txt'); 

if(!empty($txt_file)){ 
    $image_links = explode("\n", $txt_file); 

    $i = 1; 
    foreach($image_links as $image_link){ 
     $file_info = pathinfo($image_link); 
     copy($image_link, 'images/00' . $i . '_original.' . $file_info['extension']); 
     $i++; 
    } 
} 
+0

當我將代碼複製到此處時,我錯過了添加'$ i ++'的提示。這是在我的機器上的代碼,這不是問題。感謝您的幫助! – user2077115

0

你會只file(),該文件讀入自動數組更好:

$files = file('urls_for_images.txt', FILE_IGNORE_NEW_LINES); 
foreach($files as $remote_file) { 
    $local_file = ....; 
    copy($remote_file, $local_file); 
} 
+0

可以嘗試這個副本(trim($ tmp_name),$ destination)); – Steeve

0

它出現的問題是文本文件哪一行結尾是\r\n,而且只有\n正在爆炸。解決這個問題的最快方法是explode\r\n;或使用默認參數trim從每行的末尾刪除\r

foreach($image_links as $image_link){ 
    $image_link = trim($image_link); 
    $file_info = pathinfo($image_link); 
    ... 
    } 

然而,要做到這一點最乾淨的方法是使用file function,它會自動處理行的結束。我建議你使用這種方法。

相關問題