无法从不同目录上传文件

Posted

技术标签:

【中文标题】无法从不同目录上传文件【英文标题】:unable to upload files from different directory 【发布时间】:2015-01-20 17:28:20 【问题描述】:

file.php - 这是一个 html 代码,允许用户选择多个文件进行上传。

<html>  
<head>
    <meta charset="utf-8">
    <title></title>  
</head>  
<body>  
    <form method="post" enctype="multipart/form-data"  action="file2.php">  
        <input type="file" name="zipfile[]" multiple />  
        <br /><br />
        <button type="submit">Upload selected files</button>  
    </form>  
</body>  
</html>

file2.php - 在这里我尝试压缩上传之前选择的多个文件,问题是当我从当前工作目录中选择要上传的文件时,文件并压缩并上传。但是当我从当前工作目录以外的不同目录中选择文件时,文件不会被压缩和上传。这就是问题所在。

    <? $zeep = new ZipArchive;
$fyle = Array();
$zeep->open('zip/try.zip',  ZipArchive::CREATE);
foreach($_FILES['zipfile']['tmp_name'] as $fyl) 
    foreach($_FILES['zipfile']['name'] as $fyle) 

    echo $fyle;
    $zeep->addFile($fyl,$fyle);
    echo "<br/>";


$zeep->close();
?>

【问题讨论】:

【参考方案1】:

在上传文件列表中,['name'] 是从浏览器发送的文件名 - 它通常是远程用户机器上的文件名。这适用于当前目录中的文件的原因是您的服务器能够看到相同的原始文件(它不使用上传的数据)。

您需要添加到zip文件中的文件是已经上传到服务器的文件,其位置存储在['tmp_name']

来自手册页上的评论:

[name] => MyFile.txt 
(comes from the browser, so treat as tainted)

[tmp_name] => /tmp/php/php1h4j1o 
(could be anywhere on your system, depending on your config settings, 
but the user has no control, so this isn't tainted)

编辑: 我无论如何都不是 PHP 专家,但我认为以下方法会起作用:

<? $zeep = new ZipArchive;
$fyle = Array();
$zeep->open('zip/try.zip',  ZipArchive::CREATE);
foreach($_FILES['zipfile'] as $fyle) 

    echo $fyle['name'];
    $zeep->addFile($fyle['tmp_name'], $fyle['name']);
    echo "<br/>";

$zeep->close(); ?>

这样做的目的是使用 tmp_name 作为要添加到 zip 文件中的文件,但指定裸 name 作为要在 zip 文件中使用的名称,否则您最终会得到完整的临时文件存档中的路径。

【讨论】:

谢谢 Alan... 我应该在上面的代码中做些什么改变? 我已经添加了我希望对答案有用的内容。好久没写PHP了,可惜没办法测试。

以上是关于无法从不同目录上传文件的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Alamofire 从数组上传多个文件

无法从动态生成的文件上传控件中保存文件

将文件上传到服务器上的不同目录

php上传文件后无法移动到指定目录的解决

ueditor 可以上传远程服务器吗

django - 看不到从 apache 上传的媒体文件