2012-07-09 35 views
0

我正在使用下面的简单脚本通过php上传zip文件,然后将其解压缩到我的服务器上。PHP文件上传然后显示下载链接

该文件将是一个压缩文件夹。上传完成后,我想回显一个指向新文件夹的链接。

因此,例如,如果我上传包含名为“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

你的代码似乎正确,写得很好。你试图解决的问题究竟是什么?此代码是否显示任何错误? – akanevsky 2012-07-09 01:03:19

回答

0

接管一切看一眼,我会说

$message = "Your .zip file was uploaded and unpacked. <a href=\"http://domain.com".$filename."\">Files</a>"; 
从我收集关于你的脚本你告诉它直接上传到域的服务器的目录路径

。将$filename作为文件夹名追加到该路径,以便相应地创建文件夹。从它硬编码像你这样的域到其他任何链接,然后将相同的文件名变量附加到它的末尾,以显示刚刚上传到的相同文件夹。

这只是我的总体猜测,尽管只是快速浏览一下。

0

从你的代码的详细资料,我会说,我可以给一些意见:

1)您应该使用的mkdir()创建在您的网站上载目录的新目录(我假设这是这种情况下的根源)。

2)在解压缩之前,您不需要移动上传的文件。只需将其解压到新创建的目录中即可。确保没有另一个具有相同名称的目录。上传的文件应该由PHP自动删除,所以不需要取消链接。

3)中提到:

$name = explode(".", $filename); 

会发生什么,如果文件名有超过一个点?你应该使用substr()和strrpos()来获取最后一个点之后的所有东西。

4)上传后,只需回显路径http://www.yoursite.com/newdir - 看不到问题。如果您可以更具体地了解您遇到的困难,请发表评论。