2012-03-07 62 views
0

更新/可能的解決方案:我已經意識到文件正在從C:\Windows\Temp中移出,但由於文件權限,它們不可見。如果我嘗試通過瀏覽器訪問這些文件,則會出現401錯誤。我相信這些文件保留了他們的原始權限,所以我無法通過PHP /瀏覽器查看它們或弄亂它們。唯一的選擇是更改C:\Windows\Temp文件夾權限或將default_upload_folder移動到wwwroot鏈中的某個位置。move_uploaded_file和ZipArchive上的靜默失敗::關閉

-

我有一個IIS7服務器中運行的PHP腳本,接受$_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。我有一種感覺,這可能是我的問題所在,但我不知道如何解決它。

+0

$ _FILES ['Filedata'] ['error']的值是什麼?它應該是UPLOAD_ERR_OK(0)。 – Martin 2012-03-07 23:28:41

+0

實施例$ _FILES將是:陣列 ( [Filedata上] =>數組 ( [名稱] => vbv_logo.gif [型] =>應用/八位字節流 [tmp_name的值] => C:\的Windows \ Temp \ phpC62F.tmp [error] => 0 [size] => 2132 ) ) – 2012-03-08 14:18:10

回答

0

檢查你的doc_root設置是否在php.ini中指向正確的目錄。您還應該指定upload_tmp_dir(在File uploads部分; doc_root的子文件夾會很棒),以確保它與系統默認值不同。