PHP文件上传,然后显示下载链接

PHP文件上传,然后显示下载链接,php,file-upload,Php,File Upload,我使用下面的简单脚本通过php上传zip文件,然后在我的服务器上解压 该文件将是一个压缩文件夹。上传完成后,我想回显到新文件夹的链接 例如,如果我上传一个zip文件,其中包含一个名为“bar”的文件夹,在成功消息之后,我想回显http://foo.com/bar“ 非常感谢您的帮助 <?php if($_FILES["zip_file"]["name"]) { $filename = $_FILES["zip_file"]["name"]; $source = $_FILES["zip_f

我使用下面的简单脚本通过php上传zip文件,然后在我的服务器上解压

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

例如,如果我上传一个zip文件,其中包含一个名为“bar”的文件夹,在成功消息之后,我想回显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>

无标题文件
选择要上载的zip文件:


我想说,快速浏览一下所有内容

$message = "Your .zip file was uploaded and unpacked. <a href=\"http://domain.com".$filename."\">Files</a>";
$message=“您的.zip文件已上载并解压缩。”;
从我在你的脚本上收集的信息来看,你告诉它直接上传到域的servers目录路径。将
$filename
作为文件夹名附加到该路径,以便相应地创建文件夹。从这一点上讲,它就像对任何其他链接一样对域进行硬编码,然后在其末尾附加相同的filename变量,这样它就会显示您刚刚上传到的相同文件夹


这只是我的总体猜测,尽管只是简单地看了一眼而已。

从详细的代码看,我可以说我可以给出一些评论:

1) 您应该使用mkdir()在站点的uploads目录中创建一个新目录(我假设在本例中它是根目录)

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

3) 关于:

$name = explode(".", $filename);
如果文件名有多个点,会发生什么情况?您应该将substr()与strrpos()结合使用,以获取最后一个点之后的所有内容


4) 上传后,只需回显路径-看不到问题。如果您能更具体地说明您遇到的困难,请发表评论。

您的代码似乎正确且编写良好。您要解决的问题到底是什么?此代码是否显示任何错误?