2017-06-08 18 views
-1

ローカルのXAMPPサーバーにファイルをアップロードするときにこのコードが正常に動作しますが、これをWebサーバーにアップロードすると動作が停止します。同じプロジェクトの他の機能はまだうまく動作します。ファイルのアップロードはローカルサーバーでは動作しますが、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> 

答えて

1

まず、私は、アップロードされたファイルのファイル名とファイル拡張子を取得するためにpathinfoを思います。第二に、$_FILES['userfile']['type']のものとmimetypeのリストとを比較することで拡張子ではなくmimetypeを検証する必要があります。この場合、拡張子がjpgのPHPスクリプトのようなものを誰かがアップロードするのを防ぐために['image/png', 'image/jpeg']をチェックします。また、アップロードしたファイルの拡張子をすべてpngにするのではなく、予期しないエラーが発生する可能性があるため、拡張子を保持することをお勧めします。

この情報は、ファイルがアップロードされていない理由を正確に知るために$file_errorの内部にあります。間違ったことを教えてくれるfile error codeが返ってきます。

それは、これらのいずれかになります。

  • UPLOAD_ERR_INI_SIZE値:1;アップロードされたファイルがphp.iniのupload_max_filesizeディレクティブを超えています。
  • UPLOAD_ERR_FORM_SIZE値:2;アップロードされたファイルが、HTML形式で指定されたMAX_FILE_SIZE指令を超えています。
  • UPLOAD_ERR_PARTIAL値:3;アップロードされたファイルは部分的にのみアップロードされました。
  • UPLOAD_ERR_NO_FILE値:4;アップロードされたファイルはありません。
  • UPLOAD_ERR_NO_TMP_DIR値:6;一時フォルダがありません。 PHP 5.0.3で導入されました。
  • UPLOAD_ERR_CANT_WRITE値:7;ファイルをディスクに書き込めませんでした。 PHP 5.1.0で導入されました。
  • UPLOAD_ERR_EXTENSION値:8; PHP拡張モジュールがファイルのアップロードを停止しました。 PHPはどの拡張子がファイルのアップロードを停止させたかを確認する方法を提供していません。 phpinfo()でロードされた拡張機能のリストを調べると役立つかもしれません。 PHP 5.2.0で導入されました。

共有ホスティングで最も一般的なのは、アップロードしているファイルに対する不正なアクセス許可(値7)です。

関連する問題