move_uploaded_file 和 ZipArchive::关闭上的静默失败


Silent failure on move_uploaded_file and ZipArchive::Close

>更新/可能的解决方案:我意识到文件正在从C:'Windows'Temp中移动,但由于文件权限,它们是不可见的。如果我尝试通过浏览器访问文件,则会收到 401 错误。我相信这些文件保留了它们的原始权限,所以我无法通过 PHP/浏览器查看它们或弄乱它们。唯一的选择是更改C:'Windows'Temp文件夹权限或将default_upload_folder移动到wwwroot链中的某个内容。

--

我有一个运行 PHP 脚本的 IIS7 服务器,该脚本接受$_FILES,执行move_uploaded_file将文件添加到目录中,并使用 ZipArchive 将文件压缩在一起。

这两种说法都失败了。

下面是代码逻辑:

ini_set('display_errors',1);
if(!empty($_FILES)){
   $tempFile = $_FILES['Filedata']['tmp_name'];
   $targetPath = 'C:''inetpub''wwwroot''sitename''design''uploads''';
   $targetFile = $targetPath.$_FILES['Filedata']['name'];
   $zip_file = $targetPath . htmlspecialchars($_POST['session_id']) . '.zip';
   move_uploaded_file($tempFile, $targetFile);
   $zip = new ZipArchive;
   $res = $zip->open($zip_file, ZipArchive::CREATE);
   $zip->addFile($tempFile, $_FILES['Filedata']['name']);
   $zip->close();
}

当我从脚本中检查它们时,$tempFile$targetPath显示为具有0777权限。

move_uploaded_file显示没有错误并返回true,但如果我使用不同的目录,则返回错误。看来此目录是正确的。此代码无法将文件移动到新目录中。如果我使用try...catch,则没有错误消息。

ZipArchive代码都不会失败,直到 $zip->close() 返回 false 。如果我使用try...catch,则没有错误消息。

该代码在我的 WAMP 测试环境中完美运行。运行此脚本的代码是 C:'inetpub'wwwroot'sitename'design'uploadify'uploadify.php

$_FILES具有基于var_dump的正确数据。 $tempFile决心C:'Windows'Temp'php___.tmp.我有一种感觉,这可能是我的问题所在,但我不知道如何解决它。

检查您是否在 php 中有doc_root设置.ini指向正确的目录。您还应该指定upload_tmp_dir(在File uploads部分中;doc_root的子文件夹会很棒(以确保它与系统默认值不同。