Это моя функция, чтобы распаковать файлы.
Теперь это работает для этого, если у меня есть ZIP-файл содержит только изображения и
это не работает, если у меня есть заархивированный файл с папкой, содержащей изображения
public function uploadZipImages($Orderpid, $OrderId)
{
$valid_image_type = array('jpg,png');
$valid_zip_type = array('zip');
$folder = DIR_WS_IMAGES_ORDERS . $OrderId . '/block_images';
(isset($_POST['clearImages']) && ($_POST['clearImages'] == 1 || $_POST['clearImages'] == '1')) ? (exec('rm -rf '.$folder.'/*')) : (true);
(!is_dir($folder)) ? (mkdir($folder, 0777)) : (true);
foreach ($_POST['bulk_images'] as $block)
{
$total_count = count($block);
$zipimagename = $block;
$extension= substr(strrchr($zipimagename,'.'),1);
for($i = 0; $i < $total_count; $i++)
{
$str_filename = preg_replace("[^A-Za-z0-9.-]", "_", $zipimagename);
$file_name = $folder . '/' . $str_filename;
move_uploaded_file(DIR_WS_IMAGES_ORDERS.$OrderId.'/'.$zipimagename, $file_name);
if (in_array($extension, $valid_image_type) || in_array($extension, $valid_zip_type))
{
if (in_array($extension, $valid_zip_type))
{
exec('unzip ' . DIR_WS_IMAGES_ORDERS.$OrderId.'/'.$zipimagename . ' -d ' . $folder . '/');
unlink($file_name);
}
}
}
}
}
Я знаю, что должен измениться где-то здесь exec('unzip ' . DIR_WS_IMAGES_ORDERS.$OrderId.'/'.$zipimagename . ' -d ' . $folder . '/');
Проверяя, как распаковать, пока я не нашел jp, jpeg / png. Как это сделать?
Вы можете попробовать добавить параметр -j для распаковки
exec('unzip ' . DIR_WS_IMAGES_ORDERS.$OrderId.'/'.$zipimagename . ' -j -d ' . $folder . '/');
Других решений пока нет …