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 说明一下:至于参数 在PHP中实现实时上传进度条功能,通常需要借助额外的技术如AJAX来更新客户端的状态。然而,PHP有一个名为Alternative PHP Cache (APC)的扩展,它提供了在上传过程中跟踪文件进度的功能,尤其适用于Windows环境。APC不仅是一个缓存机制,还可以辅助实现文件上传进度的追踪。 确保你的服务器已经安装并启用了APC扩展。如果服务器上没有这个扩展,你需要下载与你的PHP版本(至少是5.2)兼容的APC扩展。在php.ini配置文件中,添加以下行来启用APC: ```ini extension=php_apc.dll ``` 接下来,调整相关设置以允许大文件上传并开启APC的上传进度功能: ```ini apc.rfc1867 = on apc.max_file_size = 1000M upload_max_filesize = 1000M post_max_size = 1000M ``` `apc.rfc1867 = on` 开启APC的文件上传进度支持,`apc.max_file_size` 设置了APC能处理的最大文件大小,这应该小于或等于`upload_max_filesize` 和 `post_max_size`,它们分别限制了单个文件上传的大小和整个POST请求的数据量。 配置完成后,重启Apache服务器使更改生效。然后,可以通过在PHP脚本中使用`phpinfo()`函数检查APC扩展是否已成功安装。 实现上传进度条功能的代码分为几个部分: 1. `getprogress.php`:这是一个简单的PHP页面,接收并返回当前上传进度。通过`apc_fetch()`函数获取存储在APC中的进度信息,并计算出百分比。 ```php <?php session_start(); if (isset($_GET['progress_key'])) { $status = apc_fetch('upload_'.$_GET['progress_key']); echo ($status['current'] / $status['total']) * 100; } ?> ``` 2. `upload.php`:这是前端表单页面,包含了隐藏的`APC_UPLOAD_PROGRESS`字段,用于在提交时传递进度键值。同时,它还包含了一个JavaScript函数,当点击“上传”按钮时,启动进度条更新。 ```html <form enctype="multipart/form-data" id="upload_form" action="target.php" method="POST"> <input type="hidden" name="APC_UPLOAD_PROGRESS" id="progress_key" value="<?php echo $id?>"/> <input type="file" id="test_file" name="test_file"/> <br/> <input onclick="window.parent.startProgress(); return true;" type="submit" value="上传"/> </form> ``` 3. `target.php`:这是处理文件上传的实际PHP脚本。它首先检查请求类型,然后移动上传的文件到指定目录,并显示上传成功的消息。 ```php <?php set_time_limit(600); if ($_SERVER['REQUEST_METHOD'] == 'POST') { move_uploaded_file($_FILES["test_file"]["tmp_name"], dirname($_SERVER['SCRIPT_FILENAME'])."/UploadTemp/" . $_FILES["test_file"]["name"]); echo "<p>上传成功</p>"; } ?> ``` 4. `index.php`:这个页面包含了一个HTML结构,用于显示进度条和执行AJAX请求来获取并更新进度。 ```html <?php $id = md5(uniqid(rand(), true)); ?> <html> <head> <title>上传进度</title> </head> <body> <script src="js/jquery-1.4.4.min.js" language="javascript"></script> <script language="javascript"> // JavaScript 代码用于发送AJAX请求并更新进度条 // ... </script> <div id="progressouter"> <div id="progressinner"></div> <div id="showNum">0%</div> </div> </body> </html> ``` 在`index.php`的JavaScript部分,定义了一个`sendURL`函数,它通过AJAX定期向`getprogress.php`发送请求,获取上传进度,并更新页面上的进度条显示。 通过APC扩展和适当的前端交互,可以实现PHP的实时文件上传进度条功能,为用户提供更友好的上传体验。




















- 粉丝: 4
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源


