2012-03-03 103 views
3

我有一個php文件,將jpegs和png等圖像上傳到一個名爲uploads的文件夾中,該文件夾存儲在apache服務器上並與php文件位於同一位置。PHP無法上傳文件到服務器?

我已經檢查了HTML和PHP的代碼,兩者似乎都很好,但是無論何時我嘗試上傳文件,我總是會收到一條錯誤消息,並且文件不會上傳。

如果有比我更多經驗的人可以看看我的代碼並告訴我爲什麼它會以這種方式行事,我們將非常感激。

下面是HTML表單:

<!-- 
To change this template, choose Tools | Templates 
and open the template in the editor. 
--> 
<!DOCTYPE html> 
<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    <title>Upload Your File</title> 
</head> 
<body> 
    <?php 
    // put your code here 
    ?> 

    <form enctype="multipart/form-data" method="post" action="fileHandler.php"> 
     Select File: 
     <input name="uploaded_file" type="file"/><br/> 
     <input type="submit" value="Upload"/> 
    </form> 
</body> 
</html> 

,這裏是表單提交時所執行的PHP文件:

<?php 

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
* PHP file that uploads files and handles any errors that may occur 
* when the file is being uploaded. Then places that file into the 
* "uploads" directory. File cannot work is no "uploads" directory is created in the 
* same directory as the function. 
*/ 

$fileName = $_FILES["uploaded_file"]["name"];//the files name takes from the HTML form 
$fileTmpLoc = $_FILES["uploaded_file"]["tmp_name"];//file in the PHP tmp folder 
$fileType = $_FILES["uploaded_file"]["type"];//the type of file 
$fileSize = $_FILES["uploaded_file"]["size"];//file size in bytes 
$fileErrorMsg = $FILES["uploaded_file"]["error"];//0 for false and 1 for true 
$target_path = "uploads/" . basename($_FILES["uploaded_file"]["name"]); 

echo "file name: $fileName </br> temp file location: $fileTmpLoc<br/> file type: $fileType<br/> file size: $fileSize<br/> file upload target: $target_path<br/> file error msg: $fileErrorMsg<br/>"; 

//START PHP Image Upload Error Handling--------------------------------------------------------------------------------------------------- 

    if(!$fileTmpLoc)//no file was chosen ie file = null 
    { 
     echo "ERROR: Please select a file before clicking submit button."; 
     exit(); 
    } 
    else 
     if(!$fileSize > 16777215)//if file is > 16MB (Max size of MEDIUMBLOB) 
     { 
      echo "ERROR: Your file was larger than 16 Megabytes"; 

      unlink($fileTmpLoc);//remove the uploaded file from the PHP folder 
      exit(); 
     } 
     else 
      if(!preg_match("/\.(gif|jpg|jpeg|png)$/i", $fileName))//this codition allows only the type of files listed to be uploaded 
      { 
       echo "ERROR: Your image was not .gif, .jpg, .jpeg or .png"; 
       unlink($fileTmpLoc);//remove the uploaded file from the PHP temp folder 
       exit(); 
      } 
      else 
       if($fileErrorMsg == 1)//if file uploaded error key = 1 ie is true 
       { 
        echo "ERROR: An error occured while processing the file. Please try again."; 
        exit(); 
       } 


    //END PHP Image Upload Error Handling--------------------------------------------------------------------------------------------------------------------- 


    //Place it into your "uploads" folder using the move_uploaded_file() function 
    $moveResult = move_uploaded_file($fileTmpLoc, $target_path); 

    //Check to make sure the result is true before continuing 
    if($moveResult != true) 
    { 
     echo "ERROR: File not uploaded. Please Try again."; 
     unlink($fileTmpLoc);//remove the uploaded file from the PHP temp folder 

    } 
    else 
    { 
     //Display to the page so you see what is happening 
     echo "The file named <strong>$fileName</strong> uploaded successfully.<br/><br/>"; 
     echo "It is <strong>$fileSize</strong> bytes.<br/><br/>"; 
     echo "It is a <strong>$fileType</strong> type of file.<br/><br/>"; 
     echo "The Error Message output for this upload is: $fileErrorMsg"; 
    } 
?> 

回答

3

確保該目錄結構具有寫權限。您可以使用is_writeable在php中檢查。通過在PHP中進行檢查,您還將確保PHP用戶具有寫入權限。

+0

感謝問題是,文件的權限改變後不能寫入,現在它完全正常工作。 – 2012-03-04 00:09:46

2

檢查服務器上的文件夾權限。如果不正確,你可以修改你的php.ini文件。

相關問題