我使用下面的简单脚本通过php上传zip文件,然后在我的服务器上解压缩。
该文件将是一个压缩文件夹。上传完成后,我想回显一个指向新文件夹的链接。
因此,例如,如果我上传包含名为“bar”的文件夹的zip文件,则在成功消息之后我想回显“http://foo.com/bar”。
任何帮助都非常感激。
<?php
if($_FILES["zip_file"]["name"]) {
$filename = $_FILES["zip_file"]["name"];
$source = $_FILES["zip_file"]["tmp_name"];
$type = $_FILES["zip_file"]["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.";
}
$target_path = "/home/var/foo.com/".$filename; // change this to the correct
site path
if(move_uploaded_file($source, $target_path)) {
$zip = new ZipArchive();
$x = $zip->open($target_path);
if ($x === true) {
$zip->extractTo("/home/var/foo.com/"); // change this to the correct site path
$zip->close();
unlink($target_path);
}
$message = "Your .zip file was uploaded and unpacked.";
} else {
$message = "There was a problem with the upload. Please try again.";
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1
/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>
</head>
<body>
<?php if($message) echo "<p>$message</p>"; ?>
<form enctype="multipart/form-data" method="post" action="">
<label>Choose a zip file to upload: <input type="file" name="zip_file" /></label>
<br />
<input type="submit" name="submit" value="Upload" />
</form>
</body>
</html>
答案 0 :(得分:0)
快速浏览一下,我会说
$message = "Your .zip file was uploaded and unpacked. <a href=\"http://domain.com".$filename."\">Files</a>";
从我收集在您脚本上的内容,您告诉它直接上传到域的服务器目录路径。将$filename
作为文件夹名称附加到该路径,以便相应地创建文件夹。从它硬编码领域就像你会对任何其他链接,然后将相同的文件名变量附加到它的末尾,所以它显示你刚刚上传到的相同文件夹。
这只是我的整体猜测,但只是快速浏览一下。
答案 1 :(得分:0)
通过详细查看您的代码,我会说我可以发表一些意见:
1)您应该使用mkdir()在站点的uploads目录中创建一个新目录(我假设它是这种情况下的根目录。)
2)在解压缩之前,您无需移动上传的文件。只需将其解压缩到新创建的目录中即可。确保没有其他目录具有相同的名称。上传的文件应该由PHP自动删除,因此无需取消链接。
3)参考:
$name = explode(".", $filename);
如果文件名有多个点,会发生什么?你应该使用带有strrpos()的substr()来获取最后一个点之后的所有内容。
4)上传后,只需回显路径http://www.yoursite.com/newdir - 看不到问题。如果您可以更具体地了解您遇到的问题,请发表评论。