2016-02-26 66 views
0

的Apache/2.2.15(的Win32)PHP/5.3.2無法上傳文件到Apache 2.2

我想上傳文件到Apache和我的PHP腳本告訴我一切順利(狀態碼0),但該文件不在臨時目錄中。無論文件大小如何,PHP的答案總是立即生效。 PHP錯誤日誌根本不顯示任何錯誤。

Apache服務器以其自己的用戶帳戶運行,可以完全訪問日誌和文檔文件夾。

的php.ini

file_uploads = On 
upload_tmp_dir = 
upload_max_filesize = 10M 
upload_tmp_dir="C:\WINDOWS\Temp" 

send.html

<!DOCTYPE html> 
<html> 
    <body> 

    <form enctype="multipart/form-data" action="upload.php" method="post" > 
    <input type="hidden" name="MAX_FILE_SIZE" value="10000000" /> 
    Send this file: <input name="userfile" type="file" /> 
    <input type="submit" value="Send File" /> 
    </form> 

    </body> 
</html> 

upload.php的

<?php 
    // In PHP versions earlier than 4.1.0, $HTTP_POST_FILES should be used instead 
    // of $_FILES. 

    echo '<pre>'; 
    print_r($_FILES); 
    echo '</pre>'; 
?> 

結果看起來是這樣

Array 
(
    [userfile] => Array 
     (
      [name] => strings.lua 
      [type] => application/octet-stream 
      [tmp_name] => C:\WINDOWS\Temp\phpC0.tmp 
      [error] => 0 
      [size] => 9935 
     ) 

) 

文件C:\ WINDOWS \ Temp \ phpC0.tmp不存在。

有沒有其他考慮/配置我錯過了? Apache服務器已經運行PHP超過5年,並在所有其他方面工作正常。我無法將Apache或PHP升級到新版本,因爲這是生產中的應用程序,客戶不會冒險升級。

回答

1

臨時文件只存在於您的PHP腳本upload.php的末尾。這確實是暫時的。

你應該使用move_uploaded_file移動文件的時候了:

http://www.php.net/move_uploaded_file

喜歡的東西:

$savePath = "path/where/you/really/wantit/" . $_FILES['userfile']['name']; 

move_uploaded_file($_FILES['userfile']['tmp_name'], $savePath); 

從這個鏈接:

http://us3.php.net/manual/en/features.file-upload.post-method.php

如果文件未被移走或重命名,則該文件將在請求結束時從臨時目錄中刪除。

+0

因此,在PHP腳本結束後,文件將從臨時目錄中刪除? –

+0

@MaxKielland是的。你必須馬上做點什麼,否則它就消失了。 – jszobody