アップロード コードにプログレス バーを追加したいので、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 でした