gpt4 book ai didi

PHP - ZipArchive() 清理权限问题

转载 作者:可可西里 更新时间:2023-10-31 23:44:47 27 4
gpt4 key购买 nike

我一直有 - 我认为权限问题 - 解压缩文件(这部分没问题)并将内容移动到写入文件夹。

我正在运行简单的代码:

$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 );
}

最佳答案

据我所知,ZipArchive::extractTo 没有设置任何特殊的写入/删除权限,因此您应该拥有对提取文件的完全访问权限。

您的代码的问题是 rmove 函数。您正尝试使用 unlink 删除目录,但 unlink 会删除文件。你应该使用 rmdir删除目录。

如果我们解决了这个问题,您的 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) && !mkdir($dest)) {
return false;
}
// Open the source directory to read in files
$contents = new DirectoryIterator($src);
foreach ($contents 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");
}
}
rmdir($src);
}

您不必删除循环中的每个子文件夹,最后的 rmdir 将删除所有文件夹,因为这是一个递归函数。

如果您仍然无法删除文件夹中的内容,那么您可能没有足够的权限。我认为这不太可能,但在那种情况下,您可以尝试 chmod

关于PHP - ZipArchive() 清理权限问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52223601/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com