我正在使用php创建一个包含一些图像的zipcarchive。当我尝试重命名文件时,这很好。这是有效的代码:
$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是一个数组,可能看起来像这样:
$images = array(
'path' => array(
'folder/title1.jpg',
'folder/title2.jpg'
),
'title' => array(
'new_name1.jpg',
'new_name2.jpg'
)
)
我想把图片命名为标题。
$zip_file->addFile($path, $title);
但实际情况是,zip中以标题为名称的文件是空的。我做错了什么?
如果我运行这个
$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]; }
通过这种方式,您可以确保图像的路径和标题具有相同的索引,但不建议这样做,因为必须对数组进行排序。
我建议您更改数组,您的代码应该可以这样