У меня постоянно возникают проблемы с разрешением - я разархивирую файл (эта часть в порядке) и перемещает содержимое в папку для записи.
Я использую простой код:
$zip = new ZipArchive( );
$x = $zip->open( $file );
if ( $x === true ) {
$zip->extractTo( $target );
$zip->close( );
unlink( $file );
rmove( __DIR__ . '/' . $target . '/dist', __DIR__ );
} else {
die( "There was a problem. Please try again!" );
}
, где rmove()
- простая рекурсивная функция, которая перебирает содержимое и применяет rename()
к каждому файлу.
Проблема в том, что разархивирование проходит хорошо, файлы копируются, но не перемещаются - удалите из временной папки. До сих пор я читал, что это может быть вызвано отсутствием разрешения на запись в разархивированные файлы во время переименования.
Как контролировать эти разрешения во время распаковки?
Обновление: содержимое rmove ():
function rmove( $src, $dest ) {
// If source is not a directory stop processing
if ( ! is_dir( $src ) ) return false;
// If the destination directory does not exist create it
if ( ! is_dir( $dest ) ) {
if ( ! mkdir( $dest ) ) {
// If the destination directory could not be created stop processing
return false;
}
}
// Open the source directory to read in files
$i = new DirectoryIterator( $src );
foreach( $i as $f ) {
if ( $f->isFile( ) ) {
echo $f->getRealPath( ) . '<br/>';
rename( $f->getRealPath( ), "$dest/" . $f->getFilename( ) );
} else if ( ! $f->isDot( ) && $f->isDir( ) ) {
rmove( $f->getRealPath( ), "$dest/$f" );
unlink( $f->getRealPath( ) );
}
}
unlink( $src );
}