php使用APC实现实时上传进度条功能

这篇文章主要介绍了php使用APC实现实时上传进度条功能,php本身不具备可以带有实时上传进度条功能,但是php提供了一个apc,它可以与php配置实现上传进度条,感兴趣的小伙伴们可以参考一下。

php不具备实时上传进度条功能,如果想有这种功能我们一般会使用ajax来实现,但是php提供了一个apc,它就可以与php配置实现上传进度条功能。

主要针对的是window上的应用。

1.服务器要支持apc扩展,没有此扩展的话,下载一个扩展扩展要求php.5.2以上。

2.配置apc相关配置,重启apache

代码如下

extension=php_apc.dll

apc.rfc1867 = on

apc.max_file_size = 1000M

upload_max_filesize = 1000M

post_max_size = 1000M

说明一下:至于参数要配多大,得看项目需要apc.max_file_size, 设置apc所支持上传文件的大小,要求apc.max_file_size<=upload_max_filesize 并且apc.max_file_size <=post_max_size.重新启动apache即可实现apc的支持.

3.在代码里面利用phpinfo();查看apc扩展安装了没有。

4.下面是实现代码:

getprogress.php

  1. <?php
  2. session_start();
  3. if(isset($_GET['progress_key'])) {
  4. $status = apc_fetch('upload_'.$_GET['progress_key']);
  5. echo ($status['current']/$status['total'])*100;
  6. }
  7. ?>
  8. upload.php
  9. PHP Code
  10. <?php
  11. $id = $_GET['id'];
  12. ?>
  13. <form enctype="multipart/form-data" action="target.php" method="POST">
  14. <input type="hidden" name="APC_UPLOAD_PROGRESS"
  15. value="<?php echo $id?>"/>
  16. <input type="file" name="test_file"/><br/>
  17. <input onclick="window.parent.startProgress(); return true;"
  18. type="submit" value="上传"/>
  19. </form>

target.php

  1. <?php
  2. set_time_limit(600);
  3. if($_SERVER['REQUEST_METHOD']=='POST') {
  4. move_uploaded_file($_FILES["test_file"]["tmp_name"],
  5. dirname($_SERVER['SCRIPT_FILENAME'])."/UploadTemp/" . $_FILES["test_file"]["name"]);//UploadTemp文件夹位于此脚本相同目录下
  6. echo "<p>上传成功</p>";
  7. }
  8. ?>

index.php

  1. <?php
  2. $id = md5(uniqid(rand(), true));
  3. ?>
  4. <html>
  5. <head><title>上传进度</title></head>
  6. <body>
  7. <script src="js/jquery-1.4.4.min.js" language="javascript"></script>
  8. <script language="javascript">
  9. var proNum=0;
  10. var loop=0;
  11. var progressResult;
  12. function sendURL() {
  13. $.ajax({
  14. type : 'GET',
  15. url : "getprogress.php?progress_key=<?php echo $id;?>",
  16. async : true,
  17. cache : false,
  18. dataType : 'json',
  19. data: "progress_key=<?php echo $id;?>",
  20. success : function(e) {
  21. progressResult = e;
  22. proNum=parseInt(progressResult);
  23. document.getElementById("progressinner").style.width = proNum+"%";
  24. document.getElementById("showNum").innerHTML = proNum+"%";
  25. if ( proNum < 100){
  26. setTimeout("getProgress()", 100);
  27. }
  28. }
  29. });
  30. }
  31. function getProgress(){
  32. loop++;
  33. sendURL();
  34. }
  35. var interval;
  36. function startProgress(){
  37. document.getElementById("progressouter").style.display="block";
  38. setTimeout("getProgress()", 100);
  39. }
  40. </script>
  41. <iframe name="theframe"
  42. src="upload.php?
  43. >
  44. </iframe>
  45. <br/><br/>
  46. <div >
  47. <div ></div>
  48. </div>
  49. <div ></div><br>
  50. <div ></div>
  51. </body>
  52. </html>

以上就是跟大家分享的php使用APC实现实时上传进度条功能的方法,希望对大家的学习有所帮助。