PHP – ZipArchive()权限问题与清理
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PHP – ZipArchive()权限问题与清理,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2225字,纯文字阅读大概需要4分钟。
内容图文
![PHP – ZipArchive()权限问题与清理](/upload/InfoBanner/zyjiaocheng/768/476dbad0ade24f8899f483ef659abaa7.jpg)
我一直在 – 我认为权限问题 – 解压缩文件(这部分没问题)并将内容移动到写文件夹.
我正在运行简单的代码:
$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函数.您正在尝试使用取消链接删除目录,但取消链接会删除文件.您应该使用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()权限问题与清理全部内容,希望文章能够帮你解决PHP – ZipArchive()权限问题与清理所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。