2013-01-22 190 views
4

我複製此頁面的代碼: http://www.w3schools.com/php/php_file_upload.asp上傳文件,無法正常工作

問題是,在上傳文件時,而不是這個 顯示應該是正確的我沒有得到一個錯誤:

上傳:images.jpeg 類型:image/JPEG 尺寸:5.8603515625 KB 臨時文件:/ tmp目錄/ phpZ67YXk 儲存在:上傳/ images.jpeg

但沒有文件被保存在服務器。

我不知道什麼是錯,但我想在權限方面,仍然有一個文件夾 名爲上傳與777權限。

這些php文件託管在在線的web主機上,所以我不在本地運行。

HTML形式

<form action="upload_file.php" method="post" 
enctype="multipart/form-data"> 
<label for="file">Filename:</label> 
<input type="file" name="file" id="file"><br> 
<input type="submit" name="submit" value="Submit"> 
</form> 

</body> 
</html> 

upload_file.php

<?php 
$allowedExts = array("jpg", "jpeg", "gif", "png"); 
$extension = end(explode(".", $_FILES["file"]["name"])); 
if ((($_FILES["file"]["type"] == "image/gif") 
|| ($_FILES["file"]["type"] == "image/jpeg") 
|| ($_FILES["file"]["type"] == "image/png") 
|| ($_FILES["file"]["type"] == "image/pjpeg")) 
&& ($_FILES["file"]["size"] < 20000) 
&& in_array($extension, $allowedExts)) 
    { 
    if ($_FILES["file"]["error"] > 0) 
    { 
    echo "Return Code: " . $_FILES["file"]["error"] . "<br>"; 
    } 
    else 
    { 
    echo "Upload: " . $_FILES["file"]["name"] . "<br>"; 
    echo "Type: " . $_FILES["file"]["type"] . "<br>"; 
    echo "Size: " . ($_FILES["file"]["size"]/1024) . " kB<br>"; 
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>"; 

    if (file_exists("upload/" . $_FILES["file"]["name"])) 
     { 
     echo $_FILES["file"]["name"] . " already exists. "; 
     } 
    else 
     { 
     move_uploaded_file($_FILES["file"]["tmp_name"], 
     "upload/" . $_FILES["file"]["name"]); 
     echo "Stored in: " . "upload/" . $_FILES["file"]["name"]; 
     } 
    } 
    } 
else 
    { 
    echo "Invalid file"; 
    } 
?> 
+0

'$成功= move_uploaded_file(/*...*/)' - 檢查返回move_uploaded_file的狀態。它在成功時返回真實。看起來它也應該提高一個PHP警告,如果實際上有錯誤。檢查你的錯誤日誌。 –

+0

你說得對,move_uploaded_file()失敗。在另一篇文章中,他們建議這可能是因爲該文件夾沒有世界的寫入權限。這是我可以改變的東西,還是我必須要求我的虛擬主機這樣做? – OriginalUtter

+0

你告訴我們777權限意味着最大權限(包括世界寫入) – clover

回答

6

我想這個問題是在目的地的相對路徑(相對於根據當前的工作目錄=您的路徑。 php文件),儘量使它像這樣絕對:

move_uploaded_file(
    $_FILES["file"]["tmp_name"], 
    $_SERVER['DOCUMENT_ROOT'] . 'upload/' . $_FILES["file"]["name"] 
); 
+0

謝謝,這個問題解決了! – OriginalUtter

+0

不要忘記爲您的上傳/目錄設置777權限。 對於ubuntu'''$ sudo chmod -R 777上傳/''' –

0

這個幫助你:

chmod 777 foldername 

PHP代碼:

<?php 
if(isset($_FILES['image'])){ 
    $errors= array(); 
    $file_name = $_FILES['image']['name']; 
    $file_size =$_FILES['image']['size']; 
    $file_tmp =$_FILES['image']['tmp_name']; 
    $file_type=$_FILES['image']['type']; 
    $file_ext=strtolower(end(explode('.',$_FILES['image']['name']))); 
    $expensions= array("jpeg","jpg","png", "mp3", 
        "acc", "wav", "3gpp", "mp4", "3gp", "m4a", "amr", "avi", 
        "flv", "gif"); 

    if(in_array($file_ext,$expensions)=== false){ 
    $errors[]="extension not allowed, please choose a JPEG or PNG file."; 
    } 

    if($file_size > 2097152666655){ 
    $errors[]='File size must be excately 2 MB'; 
    } 

    if(empty($errors)==true){ 
    move_uploaded_file($file_tmp,"/var/www/upload/users/".$file_name); 
    echo "Success"; 
    }else{ 
    print_r($errors); 
    } 
} 
?> 

HTML:

<html> 
<body> 

    <form action="" method="POST" enctype="multipart/form-data"> 
    <input type="file" name="image" /> 
    <input type="submit"/> 
    </form> 

</body> 
</html> 
+0

請在該代碼中只添加一點文字 – luk2302