2012-03-03 68 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文件。

相关问题