2015-04-02 3 views
1

Я использую php для создания ziparchive, который содержит некоторые изображения. Это отлично работает, когда я пытаюсь переименовать файлы. Это код, который работает: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

+0

не могли бы вы уточнить свой вопрос. что такое $ imge и $ title. – RaMeSh

+0

$ images - это массив. Каждая запись также представляет собой массив с двумя записями: путь и заголовок, которые являются одновременно строками. Путь - это абсолютный путь к файлу/изображению, который я хочу сохранить в ziparchive. Заголовок содержит новое имя файла/изображения в ziparchive. – diealtebremse

ответ

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]; 
    } 
    

    Таким образом, вы уверены, что путь и заголовок изображения будут иметь один и тот же индекс, но я t не рекомендуется для этого, потому что массив должен быть заказан.

Я предлагаю вам изменить массив, ваш код должен быть хорошо, что путь

Смежные вопросы