无法从不同目录上传文件
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了,可惜没办法测试。以上是关于无法从不同目录上传文件的主要内容,如果未能解决你的问题,请参考以下文章