PHPのアップローダに、進捗(%表示)をつけようとしております。
当方環境はPHP7.2です。
古い記事ではありますが、
https://anatoo.hatenablog.com/entry/20111213/1323714933
こちらのサンプル通りに作成しましたが、0%表示のまま一向に動かず、upload.phpがそのまま実行されてしまいます。
ファイル内容は下記です。
index.php アップローダ画面
upload.php アップロード処理
progress.php 進捗表示
ソースはコピー&ペーストで流したので間違えてはいないはずなのですが…。
jqueryは読み込めております。
他のWebのサンプル等も色々試してみましたが、Ajaxで進捗率が100%になるがupload.phpに推移しなかったり、いきなり100%になってしまったり、おそらくやり方が悪いのだと思いますが、なかなかに上手く動作しません。
何か別のやり方、特別な設定等が必要なのでしょうか?
index.php
<?php session_start(); ?> <!doctype html> <html lang="ja"> <head> <meta charset="utf-8"> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> </head> <body> <form method="post" action="index.php" enctype="multipart/form-data"> <input id="uploadedFile" type="file" name="file"> <input type="hidden" name="<?php echo ini_get("session.upload_progress.name"); ?>" value="example" /> <span id="progress">0%</span> <p><input type="submit" value="ファイルをアップする"></p> </form> <script type="text/javascript"> $(function() { $("form").submit(function() { var progress = $("#progress"); var f = function() { $.getJSON("./progress.php", function(data) { //console.dir(data); if (data != null) { progress.text( "" + Math.round(100 * (data["bytes_processed"] / data["content_length"])) + "%" ); if (!data["done"]) { setTimeout(f, 200); } } }); }; setTimeout(f, 300); }); }); </script> </body> </html>
progress.php
<?php session_start(); $key = ini_get("session.upload_progress.prefix")."example"; echo isset($_SESSION[$key]) ? json_encode($_SESSION[$key]) : json_encode(null); ?>