文件上传工作在本地服务器,但不是网络服务器

问题描述:

当我的本地XAMPP服务器上传文件但上传到我的Web服务器停止工作时,这个确切的代码将正常工作。同一个项目的其他功能仍然可以正常工作。文件上传工作在本地服务器,但不是网络服务器

//Image Uploading 
if(isset($_FILES['file'])) { 
    $file = $_FILES['file']; 

    $file_name = $file['name']; 
    $file_tmp = $file['tmp_name']; 
    $file_size = $file['size']; 
    $file_error = $file['error']; 

    $file_ext = explode('.', $file_name); 
    $file_ext = strtolower(end($file_ext)); 

    $allowed = array('png', 'jpg', 'jpeg'); 

    if(in_array($file_ext, $allowed)) { 
     $file_name_new = $username.'.png'; 
     $file_dest = '../images/'.$file_name_new; 
     if($file_error > 0){ 
      echo "There was an error uploading this image! Try another."; 
     } else { 
      if(move_uploaded_file($file_tmp, $file_dest)) { 
       header("Location: ../user/editprofile.php?user=".$username); 
      } 
     } 
    } 
} 

HTML位

   <h2>Profile Image</h2> 
      <form action="editprofile.php?user=<?php echo $user; ?>" method="post" enctype="multipart/form-data"> 
       <input type="file" name="file"> 
       <input type="submit" value="Upload"> 
      </form> 

首先,我想pathinfo得到上传文件的文件名和文件扩展名。其次,你应该通过比较$_FILES['userfile']['type']中的mimetypes列表来验证mimetype而不是扩展名,对于这种情况,你需要检查['image/png', 'image/jpeg']以防止某人上传类似PHP脚本的扩展名为jpg的东西。您也可能希望保留上传文件的扩展名,而不是将它们全部设为png,因为这可能会导致意外错误。

通过这种方式,信息将在$file_error之内,以便让您确切知道文件没有上传的原因。你会得到一个file error code,它会告诉你出了什么问题。

这将是这些中的一个:

  • UPLOAD_ERR_INI_SIZE值:1;上传的文件超出了php.ini中的upload_max_filesize指令。
  • UPLOAD_ERR_FORM_SIZE Value:2;上传的文件超出了HTML表单中指定的MAX_FILE_SIZE指令。
  • UPLOAD_ERR_PARTIAL Value:3;上传的文件仅部分上传。
  • UPLOAD_ERR_NO_FILE Value:4;没有文件上传。
  • UPLOAD_ERR_NO_TMP_DIR Value:6;缺少临时文件夹。在PHP 5.0.3中引入。
  • UPLOAD_ERR_CANT_WRITE Value:7;无法将文件写入磁盘。在PHP 5.1.0中引入。
  • UPLOAD_ERR_EXTENSION Value:8; PHP扩展停止了文件上传。 PHP不提供确定哪个扩展导致文件上传停止的方法;使用phpinfo()检查加载的扩展列表可能会有所帮助。在PHP 5.2.0中引入。

共享主机上最常见的是您上传到的文件的权限不正确(值7)。