日期:2011-09-18  浏览次数:20397 次

 

PHP配合apc实现上传进度条, 一直以为PHP是无法做到进度条一个动态的功能,原来还是自己的知识面不够,看到了apc扩展相关的一些文章,利用apc扩展达到了动态实现效果。根据找到相关的文章自己并在此基础上做了一些小修改。自己的服务器用的window,在这里主要针对的是window上的应用。
1.服务器要支持apc扩展,没有此扩展的话,百度一下php_apc.dll ,下载一个扩展扩展要求php.5.2以上。
2.配置apc相关配置,重启apache

PHP Code
  1. extension=php_apc.dll  
  2. apc.rfc1867 = on  
  3. apc.max_file_size = 1000M  
  4. upload_max_filesize = 1000M  
  5. 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

PHP Code
  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. ?>  

upload.php

PHP Code
  1. <?php  
  2.    $id = $_GET['id'];  
  3. ?>  
  4. <form enctype="multipart/form-data" id="upload_form" action="target.php" method="POST">  
  5. <input type="hidden" name="APC_UPLOAD_PROGRESS"   
  6.        id="progress_key"  value="<?php echo $id?>"/>  
  7. <input type="file" id="test_file" name="test_file"/><br/>  
  8. <input onclick="window.parent.startProgress(); return true;"  
  9.  type="submit" value="上传"/>  
  10. </form>  


target.php

PHP Code
  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

PHP Code
  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.