php解压文件权限不够,PHP – ZipArchive()权限问题与清理

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

我正在运行简单的代码:

$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( ) . '
';

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函数.您正在尝试使用取消链接删除目录,但取消链接会删除文件.您应该使用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() . '
';

rename($f->getRealPath(), "$dest/" . $f->getFilename());

} else if (!$f->isDot() && $f->isDir()) {

rmove($f->getRealPath(), "$dest/$f");

}

}

rmdir($src);

}

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

如果仍然无法删除该文件夹的内容,则可能没有足够的权限.我认为这不太可能,但在这种情况下你可以试试chmod.

标签:php,permissions,ziparchive

来源: https://codeday.me/bug/20190710/1425028.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值