如何将文件 zip 解压缩到之前由代码 (PHP) 创建的目录中?
How can I extract a file zip into a directory created before by code (PHP)?
我想将文件 zip 解压缩到之前使用 PHP 代码创建的目录中,但它不起作用。我认为这是权限问题,因为如果我手动创建该文件夹,它就可以工作,如果我从我的脚本创建它,它就不起作用!
....
$filename = $_FILES["userfile"]["name"];
$source = $_FILES["userfile"]["tmp_name"];
$name = explode(".", $filename);
$target_path = "Apps\" . $username . "\" . $name[0];
if(move_uploaded_file($source, $target_path))
{
$zip = new ZipArchive();
$x = $zip->open($target_path);
if ($x === true)
{
$zip->extractTo("Apps\".$username); <- ERROR ON THIS LINE
$zip->close();
}
....
这是错误:(警告:ZipArchive::extractTo():没有那个文件或目录)
我该如何解决?
谢谢!
这是您的路径问题,因此请更新您的路径,然后它将完美运行,这是演示代码,可帮助您上传 zip 文件并将此 zip 解压缩到与 zip 文件夹相同的文件中。
<?php
function rmdir_recursive($dir) {
foreach(scandir($dir) as $file) {
if ('.' === $file || '..' === $file) continue;
if (is_dir("$dir/$file")) rmdir_recursive("$dir/$file");
else unlink("$dir/$file");
}
rmdir($dir);
}
if(!empty($_FILES["file_name"]["name"])) {
$filename = $_FILES["file_name"]["name"];
$source = $_FILES["file_name"]["tmp_name"];
$type = $_FILES["file_name"]["type"];
$name = explode(".", $filename);
$accepted_types = array('application/zip', 'application/x-zip-compressed', 'multipart/x-zip', 'application/x-compressed');
foreach($accepted_types as $mime_type) {
if($mime_type == $type) {
$okay = true;
break;
}
}
$continue = strtolower($name[1]) == 'zip' ? true : false;
if(!$continue) {
$message = "The file you are trying to upload is not a .zip file. Please try again.";
}
$path = dirname(__FILE__).'/';
$filenoext = basename ($filename, '.zip');
$filenoext = basename ($filenoext, '.ZIP');
$targetdir = $path . $filenoext;
$targetzip = $path . $filename;
if (is_dir($targetdir)) rmdir_recursive ( $targetdir);
mkdir($targetdir, 0777);
if(move_uploaded_file($source, $targetzip)) {
$zip = new ZipArchive();
$x = $zip->open($targetzip);
if ($x === true) {
$zip->extractTo($targetdir.'/');
$zip->close();
unlink($targetzip);
}
$message = "Your file is uploaded and unpacked.";
} else {
$message = "There is a problem to upload.";
}
}
?>
<?php if(isset($message)) echo "<p>$message</p>"; ?>
<form enctype="multipart/form-data" method="post" action="">
<label>Upload a zip file to upload: <input type="file" name="file_name" /></label>
<br />
<input type="submit" name="submit" value="Upload" />
</form>
希望对您和其他人有所帮助
我已经解决了:
$filename = $_FILES["userfile"]["name"];
$source = $_FILES["userfile"]["tmp_name"];
$name = explode(".", $filename);
$target_path = "Apps/" . $username . "/" . $name[0]. "." .$name[1];
if(move_uploaded_file($source, $target_path))
{
$zip = new ZipArchive();
$x = $zip->open($target_path);
if ($x === true)
{
$zip->extractTo("Apps/" . $username . "/");
$zip->close();
}
}
这是 $target_path 的问题,因为它需要扩展名 ($name[1])
感谢大家!
我想将文件 zip 解压缩到之前使用 PHP 代码创建的目录中,但它不起作用。我认为这是权限问题,因为如果我手动创建该文件夹,它就可以工作,如果我从我的脚本创建它,它就不起作用!
....
$filename = $_FILES["userfile"]["name"];
$source = $_FILES["userfile"]["tmp_name"];
$name = explode(".", $filename);
$target_path = "Apps\" . $username . "\" . $name[0];
if(move_uploaded_file($source, $target_path))
{
$zip = new ZipArchive();
$x = $zip->open($target_path);
if ($x === true)
{
$zip->extractTo("Apps\".$username); <- ERROR ON THIS LINE
$zip->close();
}
....
这是错误:(警告:ZipArchive::extractTo():没有那个文件或目录)
我该如何解决?
谢谢!
这是您的路径问题,因此请更新您的路径,然后它将完美运行,这是演示代码,可帮助您上传 zip 文件并将此 zip 解压缩到与 zip 文件夹相同的文件中。
<?php
function rmdir_recursive($dir) {
foreach(scandir($dir) as $file) {
if ('.' === $file || '..' === $file) continue;
if (is_dir("$dir/$file")) rmdir_recursive("$dir/$file");
else unlink("$dir/$file");
}
rmdir($dir);
}
if(!empty($_FILES["file_name"]["name"])) {
$filename = $_FILES["file_name"]["name"];
$source = $_FILES["file_name"]["tmp_name"];
$type = $_FILES["file_name"]["type"];
$name = explode(".", $filename);
$accepted_types = array('application/zip', 'application/x-zip-compressed', 'multipart/x-zip', 'application/x-compressed');
foreach($accepted_types as $mime_type) {
if($mime_type == $type) {
$okay = true;
break;
}
}
$continue = strtolower($name[1]) == 'zip' ? true : false;
if(!$continue) {
$message = "The file you are trying to upload is not a .zip file. Please try again.";
}
$path = dirname(__FILE__).'/';
$filenoext = basename ($filename, '.zip');
$filenoext = basename ($filenoext, '.ZIP');
$targetdir = $path . $filenoext;
$targetzip = $path . $filename;
if (is_dir($targetdir)) rmdir_recursive ( $targetdir);
mkdir($targetdir, 0777);
if(move_uploaded_file($source, $targetzip)) {
$zip = new ZipArchive();
$x = $zip->open($targetzip);
if ($x === true) {
$zip->extractTo($targetdir.'/');
$zip->close();
unlink($targetzip);
}
$message = "Your file is uploaded and unpacked.";
} else {
$message = "There is a problem to upload.";
}
}
?>
<?php if(isset($message)) echo "<p>$message</p>"; ?>
<form enctype="multipart/form-data" method="post" action="">
<label>Upload a zip file to upload: <input type="file" name="file_name" /></label>
<br />
<input type="submit" name="submit" value="Upload" />
</form>
希望对您和其他人有所帮助
我已经解决了:
$filename = $_FILES["userfile"]["name"];
$source = $_FILES["userfile"]["tmp_name"];
$name = explode(".", $filename);
$target_path = "Apps/" . $username . "/" . $name[0]. "." .$name[1];
if(move_uploaded_file($source, $target_path))
{
$zip = new ZipArchive();
$x = $zip->open($target_path);
if ($x === true)
{
$zip->extractTo("Apps/" . $username . "/");
$zip->close();
}
}
这是 $target_path 的问题,因为它需要扩展名 ($name[1])
感谢大家!