2

アップロード コードにプログレス バーを追加したいので、uploadprogress 拡張機能をインストールしました (実際には、wamp サーバーを wamp 2.0 にダウングレードしました。これには既に拡張機能がありますが、新しいバージョンには問題があるようです)。

ここに私のバックエンドコードがあります

/////////////////// アップロード中

<?php


if (isset($_POST['upload'])) {
    echo 'UPLOADING . . . <br />';

    $location = './uploads';
    $new= uniqid().'.'.end(explode('.' , basename($_FILES['mailfile']['name']) ));  
    if(move_uploaded_file( $_FILES['mailfile']['tmp_name'],"$location/$new"))
       echo 'DONE !! ';
    else
       echo 'error';

}

/////////////// アップロード情報の取得

else if(isset($_GET['get_info']))
{
        if (function_exists("uploadprogress_get_info")) {

            $info = uploadprogress_get_info($_GET['get_info']);
        } else {
            $info = 'nofunc';
        }
        var_dump($info);
}

/////////////// アップロードフォーム

else
{           $uploadID = substr(md5(microtime(true)), 0, 10);
    ?>

            <form enctype="multipart/form-data" action="uploadprogress.php" method="post" >
                <input type="text" name="UPLOAD_IDENTIFIER"  value="<?php echo $uploadID; ?>" id="uploadIdentifier" />
                <input id="file" name="mailfile" type="file" />
                <input type="submit" value="Send File" id="btn" name="upload" />
            </form>

    <?php
}

これは、ファイルがアップロードされているときの私のフロント html/jquery コードです。iframe から UPLOAD_IDENTIFIER 値を取得し、それを set() 関数に送信します。この関数は、ajax 呼び出しを介してアップロードの進行状況を取得すると想定されていますが、常に null を返します。

<html>
    <head>
    <script language="javascript" src="../../js/jquery.js"></script>
        <script>
        var val;
        $(function(){

            $('#progress_iframe').load(function() {
                var ifr = $(this);

              $(this)
                .contents()
                .find('#btn')
                .bind('click', function() {

                    val = ifr.contents().find('#uploadIdentifier').val();
                     set();

                    //  do stuff
                });
            });

        })


function set() { 
   $.get('uploadprogress.php' , {get_info : val} , function(data){
      data = $.trim(data);
     $('#info').html(data) ;
     if(data < 100  )
     set();
   })
  }


        </script>
    </head>
    <body>

<div>
<iframe id="progress_iframe" src="uploadprogress.php" frameborder="0">   </iframe>
<span id="info"></span>     
</div>
    </body>
</html>

そのため、ファイルは問題なくアップロードされており、大きなファイルを試しましたが、ファイルがアップロードされているため、uploadprogress_get_info は null でした

4

1 に答える 1

0
  1. サーバーで UploadProgress tmp ディレクトリにアクセスできるかどうかを確認します。「uploadprogress.file.filename_template」は、phpinfo の正しい tmp フォルダーを参照することを意味します。

  2. これを確認するには、次のコードを実行します。

    background-color: red;"'; print ">問題。";














    if ($template == $templateini) {
    print "uploadprogress.file.filename_template ($templateini) には、一意の一時ファイルを作成するための %s がありません。調整してください。<br/>";
    } else {
    print "$templateini は書き込み可能ではありません。<br/>ディレクトリが存在し、Web サーバーに書き込み可能であることを確認してください。<br/>
    または、ini 設定 'uploadprogress.file.filename_template' を正しいパスに調整してください。" ;
    }
    } else {
    print 'background-color: green;">uploadprogress 拡張機能がインストールされており、最初のチェックですべてが正常であることを示しています';
    }
    } else {
    ?>
    background-color: red;">uploadprogress 拡張機能がインストールされていません。
    <

    </div>

  3. 上記のコードでエラーが発生した場合は、php.ini ファイル内の正しい tmp ディレクトリを指定してください。次の行が、Windows localhost マシンの Xampp tmp ディレクトリの php.ini ファイルに追加されました。uploadprogress.file.filename_template = C:\xampp\tmp\some_name_%s.txt

  4. これで、コードが機能するはずです。

于 2015-04-28T06:51:37.780 に答える