2015-09-28 7 views
2

Можно ли перехватить рассылку каталога, чтобы изменить имя распакованной папки?PHP распаковать файл в каталог, изменить имя распакованной папки

Для этого я использую класс PHP ZipArchive. Распаковка работает нормально, я просто хотел бы добавить временную метку к имени распакованной папки.

$zip = new ZipArchive; 
if ($zip->open($zipFile, ZipArchive::CREATE) === TRUE) { 
    $zip->extractTo($destinationFolder); 
    $zip->close(); 
} else { 
    return FALSE; 
} 

EDIT: для дальнейшего объяснения необходимости, моя функция в настоящее время перезаписи папки с тем же именем в точке разархивирования. Я надеюсь, что эта метка привязана к новой папке, чтобы этого не произошло.

+2

Вы пробовали просто переименовать папку после того, как она была успешно распакована? – amklose

+0

Проблема в том, что это переписывание папок с тем же именем ... привязка к метке времени предотвратила бы это. –

+0

Другим вариантом было бы его распаковать во временную папку, где содержимое не имеет значения и может быть перезаписано по желанию, а затем переместить папку в место последнего отдыха с новым именем. - Как правило, загрузка файлов происходит на веб-сайтах, поэтому, если загрузка отменена на полпути, у вас нет кучи поврежденных файлов, плавающих вокруг. – amklose

ответ

3

Я предполагаю, что вам нужно распаковать файл в определенную папку с текущей датой, на основании этого, вы можете попробовать:

$zipFile = "test.zip"; 
$fnNoExt = basename($zipFile, ".zip"); 
$date = new DateTime(); 
$now = $date->getTimestamp(); 
$destinationFolder = "/some/path/$fnNoExt-$now"; 

$zip = new ZipArchive; 
if ($zip->open($zipFile, ZipArchive::CREATE) === TRUE) { 
    if(!is_dir($destinationFolder)){ 
     mkdir($destinationFolder, 0777); 
    } 
    $zip->extractTo($destinationFolder); 
    $zip->close(); 
} else { 
    return FALSE; 
} 

Он будет получать текущую Timestamp и добавить его к имя папки, если папка не существует, создает ее и распаковывает в нее.


UPDATE:

Я обновил код, чтобы он получает zipFilename без расширения и использовать его для нового дир названия, в данном случае, это создаст новый реж под названием test-1443467510


Примечание:
Убедитесь, что вы имеете права на запись в /some/path/

+0

. Это прекрасно, спасибо! –

+0

Добро пожаловать, рад, что это сработало. –

+0

Еще один вопрос - можно ли просто извлечь файлы из ZIP-файла в эту новую папку вместо того, чтобы распаковать папку вложенной в новую папку? Прямо сейчас он структурирован как 'uploads/new_folder_timestamp/new_folder/files', но просто' uploads/new_folder_timestamp/files' будет идеальным. –