2012-04-02 9 views
4

は、私はiFrameのフラッシュエンジンなしでファイルをアップロードするための私のコードを簡略化してきた、と私は、このAjaxの機能を思い付いた:AJAX PHPファイルのアップロード

<input type="file" name="uploadfile" id="myfile" /><label for="file" id="progress"></label> 

    <script src="js/jquery-1.7.1.min.js"></script> 
    <script> 

    function uploadFile(files) { 

     var xmlhttp; 
     if(window.XMLHttpRequest) 
      xmlhttp = new XMLHttpRequest(); 
     else 
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 

     xmlhttp.upload.onprogress = function(e) { 
      $("#progress").empty().append(e.loaded + " - " + e.total); 
     } 

     xmlhttp.onreadystatechange = function() { 
      if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
       alert(xmlhttp.responseText + "DONE!"); 
      } 
     } 

     xmlhttp.open("post", "post.php", true); 
     xmlhttp.setRequestHeader("If-Modified-Since", "Mon, 26 Jul 1997 05:00:00 GMT"); 
     xmlhttp.setRequestHeader("Cache-Control", "no-cache"); 
     xmlhttp.setRequestHeader("X-Requested-With", "XMLHttpRequest"); 
     xmlhttp.setRequestHeader("X-File-Name", files[0].fileName); 
     xmlhttp.setRequestHeader("Content-Type", "multipart/form-data"); 
     xmlhttp.send(files[0]); 
    } 



    $(document).ready(function() { 

     $("#myfile").change(function() { 
      uploadFile(this.files); 
     }); 

    }); 

    </script> 

これは、PHPのコードがあります

<?php 
if(isset(
     $_SERVER['CONTENT_TYPE'], 
     $_SERVER['CONTENT_LENGTH'], 
     $_SERVER['HTTP_X_FILE_NAME'] 
    ) && 
    $_SERVER['CONTENT_TYPE'] == 'multipart/form-data'){ 

     $file->name = basename($_SERVER['HTTP_X_FILE_NAME']); 
     $input = fopen('php://input', 'rb'); 
    $file = fopen('files/'.$file->name, 'wb'); 
    stream_copy_to_stream($input, $file); 
    fclose($input); 
    fclose($file); 
    } else { 

    echo "Error"; 
    } 
?> 

同じファイルをアップロードしようとしているときに問題が発生することがあります。この問題を解決するソリューションがあることを願っています。コードは単純です。入力ファイルタイプのファイルを選択すると、uploadFile関数が実行されます。 バグが出ると、ファイルのアップロードが開始されているのが見えますが、元のサイズではないので、バグが発生してアップロードが中止される可能性があります。

ありがとう、ダニエル!

+0

ほとんどのブラウザでは、実際にはしっかりと動作していないという意味で壊れているだけです。ブラウザのベンダーに連絡し、問題を解決する方法について話し合う必要があります。 – hakre

+0

問題はそれがうまくいくことですが、ときどき小規模なファイルでは常に動作しますが、ファイルが500 kb以上になると、ときどき動作することがあります。何らかの理由で停止し、ファイルの一部のみをアップロードする場合があります –

+0

動作しないときにエラーが発生する – jreed121

答えて

1

私はそれがあなたの問題だとは思っていませんが、とにかくあなたのサーバーが十分な大きさのファイルをアップロードできるようにして、タイムアウトせずにファイルを処理できるようにする必要があります。

あなたはコード内で(コードまたはphp.iniの例をこれを設定することができます:)

ini_set('memory_limit', '96M'); 
ini_set('post_max_size', '64M'); 
ini_set('upload_max_filesize', '64M'); 

を次に、あなたのサーバがタイムアウトしないことを確認してください:

$seconds=120; 
set_time_limit ($seconds); 

上のすべてのこのコードcoesあなたのPHPファイルの先頭。

+0

はい、タイムアウトは、他の説明を参照してくださいそれはアップロードします。非常に返信のために、ダニエル。 –

関連する問題