2015-04-02 63 views
1

我使用php創建一個包含一些圖像的ziparchive。這工作正常exept當我嘗試重命名文件。這是工作的代碼:php ziparchive重命名文件爲空

$zip_archive->open(tempnam("tmp", "zip"), ZipArchive::OVERWRITE); 
foreach ($images as $image) { 
    $path = $image['path']; 
    $title = $image['title']; 
    if(file_exists($path)){ 
    $zip_file->addFile($path, pathinfo($path, PATHINFO_BASENAME)); 
    } 
} 
$zip_archive->close(); 

$圖像是一個數組,可能看起來像這樣:

$images = array(
    'path' => array(
     'folder/title1.jpg', 
     'folder/title2.jpg' 
    ), 
    'title' => array(
     'new_name1.jpg', 
     'new_name2.jpg' 
    ) 
) 

我想命名的圖像作爲其標題。

$zip_file->addFile($path, $title); 

但最新情況是,標題名稱爲zip的文件是空的。我究竟做錯了什麼?

+0

$形象是一個數組或路徑?你存儲在$圖像什麼? – RaMeSh 2015-04-02 11:05:15

+0

你能否詳細說明你的問題。什麼是$ imge和$ title。 – RaMeSh 2015-04-02 11:19:11

+0

$ images是一個數組。每個條目也是一個包含兩個條目的數組:路徑和標題,它們都是字符串。路徑是我想要存儲在ziparchive中的文件/圖像的絕對路徑。標題包含ziparchive中文件/圖像的新名稱。 – diealtebremse 2015-04-02 13:02:27

回答

0

如果我運行這個

$images = array(
    'path' => array(
     'folder/title1.jpg', 
     'folder/title2.jpg' 
    ), 
    'title' => array(
     'new_name1.jpg', 
     'new_name2.jpg' 
    ) 
); 

$i = 0; 
foreach($images as $image) 
    var_dump($image, $i++); 

我得到

array(2) { 
    [0]=> 
    string(17) "folder/title1.jpg" 
    [1]=> 
    string(17) "folder/title2.jpg" 
} 
int(0) 
array(2) { 
    [0]=> 
    string(13) "new_name1.jpg" 
    [1]=> 
    string(13) "new_name2.jpg" 
} 
int(1) 

這意味着這些

$path = $image['path']; 
$title = $image['title']; 

NULL

您有兩種方法來解決這個問題:

  • 改變數組看起來像

    $images = array(
        [0] => array(
         'path' => 'folder/title1.jpg', 
         'title' => 'new_name1.jpg' 
        ), 
        [1] => array(
         'path' => 'folder/title2.jpg' 
         'title' => 'new_name2.jpg', 
        ) 
    ); 
    

    在這種情況下您最初的代碼應工作

  • 更改訪問陣列的方式,做這樣的事情

    for($i = 0;$i < count($images['path']);$i++) 
    { 
        $path = $image['path'][$i]; 
        $title = $image['title'][$i]; 
    } 
    

    這樣你就可以確定圖像的路徑和標題會有相同的索引,但是我不建議不要這樣做,因爲數組必須是有序的。

我建議你改變數組,你的代碼應該確定這樣