PHP 文件上传进度条实现程序
php文件上传程序(二款简单文件上传程序)
php文件上传程序(二款简单文件上传程序)/*在学习php中文件上传是一门重要的核心技术,今天《php 文件上传程序(二款简单文件上传程序)》介绍了二款文件上传程序,这两款文件上传程序是非常简单的,很适合初学者的学习php时的文件上传实例教程哦。
*/if(!$uploadaction):><html><head><title>文件上载界面 php 文件上传程序</title></head><body><table><tr align="center"><td><form enctype="multipart/form-data" name="submitform" action="upload.php" method="post"> <input type="hidden" name="max_file_size" value="1000000"><input type="hidden" name="uploadaction" value="1"></td></tr><tr align="center"><td><input name="uploadfile" type="file" size="30"></td> </tr><tr align="center"><td><input name="submit" value="提交" type="submit"></td><td><input name="reset" value="重置" type="reset"></td></tr></form></table></center></body></html><?else:><html><head><title>文件上载代码 php 文件上传程序</title> </head><body><?$uploadaction=0;echo "good!";$timelimit=60; /*设置超时限制时间缺省时间为30秒设置为0时为不限时 */set_time_limit($timelimit);if(($uploadfile !="none" )){$uploadpath=addslashes(dirname($path_translated))."\uplo ad\"; //上载文件存放路径$filename=$uploadpath.$uploadfile_name; //上载文件名if($uploadfile_size < 1024) //上载文件大小{$filesize=(string)$uploadfile_size." 字节";}elseif ($uploadfile_size <(1024 * 1024)){$filesize=number_format((double)($uploadfile_size/1024), 1) . " kb";}else{$filesize=number_format((double)($uploadfile_size / (1024 * 1024)), 1) . " mb";}if(!file_exists($filename)){if(copy($uploadfile,$filename)){ echo "文件 $uploadfile_name ($filesize)上载成功!"; }else{ echo "文件 $uploadfile_name上载失败!"; }unlink($uploadfile);}else{ echo "文件 $uploadfile_name已经存在!"; }}else{ echo "你没有选择任何文件上载!"; }set_time_limit(30); //恢复缺省超时设置><br><a href = "upload.php">返回</a></body></html><?endif;>方法二<html><head><title>文件上传 php 文件上传程序</title></head><body><table><form enctype="multipart/form-data" name=myform method="post"><tr><td>文件上传</td><td><input name="myfile" type="file"></td></tr><tr><td colspan="2"><input name="submit" value="上传" type="submit"></form><?phpif(isset($submit)){if($myfile != "none") {$upload_dir = "c:winnttemp";$up=copy($myfile,$upload_dir);if($up==1) {print("文件上传成功!");}else {print ("文件上传失败.");}unlink ($myfile);}else {print("你没有上传任何文件");}}></td></tr></table></body></html>php 文件上传程序本文来源网页制作教程网原文链接:/php100/php-1040.html。
php中实现文件上传的函数
php中实现文件上传的函数【原创版】目录1.PHP 文件上传的基本概念2.PHP 文件上传的原理3.PHP 文件上传的步骤4.PHP 文件上传的常见问题及解决方法5.PHP 文件上传的安全性问题及解决方法6.PHP 文件上传的示例代码正文【1.PHP 文件上传的基本概念】在 PHP 中,文件上传是指将本地文件通过网页上传到服务器的过程。
文件上传可以使网站更加互动和丰富,例如用户上传个人头像、附件等。
PHP 作为一种流行的服务器端脚本语言,提供了丰富的文件上传功能。
【2.PHP 文件上传的原理】PHP 文件上传的原理主要基于 HTTP 协议。
用户通过浏览器将本地文件发送到服务器,服务器端 PHP 脚本接收到文件并保存到服务器的指定目录。
在这个过程中,PHP 扮演了一个中间人的角色,协调浏览器和服务器之间的文件传输。
【3.PHP 文件上传的步骤】PHP 文件上传主要包括以下几个步骤:(1)创建一个 HTML 表单,包含一个文件输入框,用于选择要上传的文件;(2)用户选择文件并提交表单,浏览器将文件以二进制形式发送到服务器;(3)服务器端 PHP 脚本接收到文件,并通过特定的函数处理文件;(4)PHP 脚本将文件保存到服务器的指定目录。
【4.PHP 文件上传的常见问题及解决方法】在 PHP 文件上传过程中,可能会遇到一些常见问题,例如:文件上传失败、文件名乱码、文件大小限制等。
解决这些问题的方法主要包括:(1)检查服务器是否安装了 PHP 的文件上传扩展;(2)检查上传目录的权限设置,确保有权限写入;(3)设置合适的文件大小限制,并在上传前对文件进行验证;(4)使用 URL 编码或 Base64 编码解决文件名乱码问题。
【5.PHP 文件上传的安全性问题及解决方法】PHP 文件上传存在一定的安全性风险,例如:跨站脚本攻击(XSS)、跨站请求伪造(CSRF)等。
为保证文件上传的安全性,应采取以下措施:(1)对上传文件进行验证,确保文件类型符合要求;(2)使用安全的文件名生成方法,避免文件名冲突和恶意攻击;(3)对上传文件进行消毒处理,防止恶意代码注入;(4)使用安全的 HTTP 头设置,防止跨站请求伪造。
PHP中文件上传的实现方式
PHP中文件上传的实现方式在现代的网络应用中,文件上传已经成为了一项必不可少的功能。
无论是社交网络,还是云盘服务,都需要用户上传文件来实现其功能。
PHP作为一门流行的Web开发语言,其提供了简单易用的文件上传功能。
本文将对PHP中的文件上传功能进行讲解,并介绍其实现方式。
一、基本概念在介绍PHP中的文件上传实现方式之前,需要先了解一些基本概念。
在HTTP协议中,文件上传是通过POST方法来完成的。
通过POST方法传输数据时,数据会被分成多个部分,每个部分头部都包含了一些元数据,用于描述数据的内容。
其中,文件上传时,数据被分为两个部分:第一个部分包含了上传文件的元数据;第二个部分包含了上传的文件数据。
二、文件上传步骤在PHP中实现文件上传功能,主要需要完成以下步骤:1. 显示上传表单首先需要具备一个上传表单,用于接收上传文件。
上传表单通过HTML实现,如下所示:<form method="POST" enctype="multipart/form-data"action="upload.php"><input type="file" name="file"><input type="submit" value="上传"></form>其中,enctype属性设置为multipart/form-data,可以告诉服务器该表单采用文件上传方式。
2. 接收上传文件当用户提交表单后,PHP脚本需要接收上传的文件。
PHP通过$_FILES超全局变量来接收上传文件。
$_FILES变量是一个二维数组,主要包含了以下几个信息:- $_FILES["file"]["name"]: 上传文件的名称- $_FILES["file"]["type"]: 上传文件的类型- $_FILES["file"]["size"]: 上传文件的大小- $_FILES["file"]["tmp_name"]: 上传文件在服务器上的临时存储路径- $_FILES["file"]["error"]: 上传文件时出现的错误信息(如果有)PHP可以通过以下代码获取上传文件:$file = $_FILES["file"];3. 检查上传文件在接收上传文件后,需要对上传文件进行检查。
PHP基础教程之PHP文件上传进度处理
PHP基础教程之PHP文件上传进度处理当文件过大,或者用户网络状态一般,通常上传过程需要一段时间,如果这时候让用户白屏等待的话,相信大部分用户都会直接关掉应用,所以一个监控上传进度,并实时向用户报告的需求就被产品汪摆在了桌面上。
一个高逼格的上传进度提示,会让你的应用瞬间变成被仰望的存在。
PHP在5.4之前,总是需要安装额外的扩展才能监控到文件上传进度。
而从5.4开始,引入session.upload_progress的新特性,我们只需要在php.ini中开启配置,即可通过session监控文件上传进度。
在php.ini中。
注意:本章学习需要有session基础和javascript和ajax基础。
我们需要配置,注意查看和修改php.ini文件:开启了配置,我们可以通过session,来记录一个完整的文件上传进度。
在session中,会出现一个如下结果的数组:1. $_SESSION["upload_progress_test"]= array(2.//请求时间3."start_time"=>1234567890,4.// 上传文件总大小5."content_length"=>57343257,6.//已经处理的大小7."bytes_processed"=>453489,8.//当所有上传处理完成后为TRUE,未完成为false9."done"=>false,10.11."files"=> array(12.0=> array(13.//表单中上传框的名字14.15."field_name"=>"file1",16.17.//上传文件的名称18."name"=>"test1.avi",19.20.//缓存文件,上传的文件即保存在这里21."tmp_name"=>"/tmp/phpxxxxxx",22.23.//文件上传的错误信息24."error"=>0,25.26.//是否上传完成,当这个文件处理完成后会变成TRUE27."done"=>true,28.29.//这个文件开始处理时间30."start_time"=>1234567890,31.32.//这个文件已经处理的大小33."bytes_processed"=>57343250,34.),35.36.1=> array(37."field_name"=>"file2",38."name"=>"test2.avi",39."tmp_name"=> NULL,40."error"=>0,41."done"=>false,42."start_time"=>1234567899,43."bytes_processed"=>54554,44.),45.)46.);这个数组详细记录了文件上传的进度,已经处理完的文件状态为true。
php文件上传类程序代码
php文件上传类程序代码文件上传是Web开发中常见的功能之一,它允许用户将文件从本地计算机上传到服务器上。
在PHP中,我们可以通过编写一个文件上传类来实现这个功能。
本文将详细介绍如何编写一个PHP文件上传类程序代码。
一、创建文件上传类首先,我们需要创建一个PHP类来处理文件上传。
以下是一个基本的文件上传类的代码示例:```phpclass FileUploader {private $allowedExtensions = array();private $maxFileSize;private $uploadPath;public function __construct($allowedExtensions, $maxFileSize, $uploadPath) { $this->allowedExtensions = $allowedExtensions;$this->maxFileSize = $maxFileSize;$this->uploadPath = $uploadPath;}public function upload($file) {$fileName = $file['name'];$fileSize = $file['size'];$fileTmp = $file['tmp_name'];$fileError = $file['error'];$fileExt = strtolower(pathinfo($fileName, PATHINFO_EXTENSION));$fileDestination = $this->uploadPath . '/' . $fileName;if (!in_array($fileExt, $this->allowedExtensions)) {return 'Invalid file extension.';}if ($fileSize > $this->maxFileSize) {return 'File size exceeds the limit.';}if ($fileError !== 0) {return 'An error occurred while uploading the file.';}if (move_uploaded_file($fileTmp, $fileDestination)) {return 'File uploaded successfully.';} else {return 'Failed to upload file.';}}}```二、使用文件上传类一旦我们创建了文件上传类,就可以在其他PHP文件中使用它来处理文件上传。
php文件上传类程序代码
php文件上传类程序代码文件上传是Web开辟中常见的功能之一,通过上传文件,用户可以将本地文件上传到服务器上进行处理或者存储。
在PHP中,我们可以使用文件上传类来简化文件上传的过程。
下面是一个基本的PHP文件上传类程序代码示例:```php<?phpclass FileUploader {private $allowedExtensions = array();private $maxFileSize = 0;private $uploadDirectory = '';public function __construct($allowedExtensions, $maxFileSize, $uploadDirectory) {$this->allowedExtensions = $allowedExtensions;$this->maxFileSize = $maxFileSize;$this->uploadDirectory = $uploadDirectory;}public function uploadFile($file) {if ($this->validateFile($file)) {$targetFile = $this->uploadDirectory . basename($file['name']);if (move_uploaded_file($file['tmp_name'], $targetFile)) {return true;} else {return false;}} else {return false;}}private function validateFile($file) {$fileExtension = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION)); if (!in_array($fileExtension, $this->allowedExtensions)) {return false;}if ($file['size'] > $this->maxFileSize) {return false;}return true;}}>```以上是一个简单的PHP文件上传类程序代码示例。
通过代码实例跟我学如何自己编程实现带进度条的文件上传插件
<!-添加该内部框架的主要目的是在文件上传成功后,避免切换当前页面窗口,
从而使得显示结果仍然在当前页面中。
-->
</iframe>
<form
action="${pageContext.request.contextPath}/uploadFileServlet.action"
id="uploadFileFormID"
public void update(long percentBytesRead, long percentContentLength, int someOneFileItem)
其 中 的 percentBytesRead 参 数 代 表 到 目 前 为 止 读 取 文 件 的 比 特 数 , 而 percentContentLength 参数代表文件的总容量大小,someOneFileItem 参数代表目前正在读取 的第几个文件。
可以把这些文件总长、读取总字节数等有用的信息放在 session 对象中,而前台的 AJAX 相关的程序代码将调用和查询这些状况信息。
杨教授工作室,版权所有1 ,盗版必究, 1/14 页
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
1.1.2 带进度条的文件上传插件编程实现的具体代码示例
</form>
<div id="progressBarDivTagID">
<div id="upLoadedProgressBarDivTagID"></div>
</div>
<div id="upLoadedFileSizeInfoDivTagID"></div>
PHP 文件上传进度条实现程序
PHP 文件上传进度条实现程序在php中要实现上传进度条有很多方法,如ajax是现在的主流或利用iframe来实现,现在我们来介绍php的apc与uploadprogress实现文件上传进度条效果。
目前我知道的方法有两种,一种是使用PHP的创始人Rasmus Lerdorf 写的APC扩展模块来实现(/package/apc),另外一种方法是使用PECL扩展模块uploadprogress实现(/package/uploadprogress)我这里举两个分别实现的例子供参考,更灵活的应用根据自己需要来修改。
APC实现方法:安装APC,参照官方文档安装,可以使用PECL模块安装方法快速简捷,这里不说明配置php.ini,设置参数apc.rfc1867=1 ,使APC支持上传进度条功能,在APC源码说明文档里面有说明代码范例:代码如下复制代码if ($_SERVER['REQUEST_METHOD'] == 'POST') { //上传请求$status = apc_fetch('upload_' . $_POST['APC_UPLOAD_PROGRESS']);$status['done'] = 1;echo json_encode($status); //输出给用户端页面里的ajax调用,相关文档请自己寻找exit;} elseif (isset($_GET['progress_key'])) { //读取上传进度$status = apc_fetch('upload_'.$_GET['progress_key']);echo json_encode($status);exit;} else {//其他代码,比如上传表单等}uploadprogress 模块实现方法:使用PECL模块安装方法安装该模块php.ini里面设置uploadprogress.file.filename_template = “/tmp/upd_%s.txt”代码范例:代码如下复制代码if($_SERVER['REQUEST_METHOD']=='POST') {if (is_uploaded_file($_FILES['upfile']['tmp_name'])) {$upload_dir = 'your_path/';$ext = strrchr($_FILES['video']['name'], '.');$sessid = $_POST['UPLOAD_IDENTIFIER'] ;$tmpfile = $upload_dir . $sessid;$sessfile = $upload_dir . $sessid .$ext;if (move_uploaded_file($_FILES['upfile']['tmp_name'],$tmpfile)) {//上传成功} else {//上传失败} else {//上传错误} elseif (!empty($_GET['sessid'])) {header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");header("Cache-Control: no-store, no-cache, must-revalidate");header("Cache-Control: post-check=0, pre-check=0", false);header("Pragma: no-cache");header("Content-Type:text/html;charset=UTF-8");$unique_id = $_GET['sessid'];$uploadvalues = uploadprogress_get_info($unique_id);if (is_array($uploadvalues)) {echo json_encode($uploadvalues);} else {//读取进度失败,另外处理逻辑}} else {//显示上传表单}整合现在剩下的只是要把所有内容hook 到一起。
PHP基于session.upload_progress实现文件上传进度显示功能详解
PHP基于session.upload_progress实现⽂件上传进度显⽰功能详解本⽂实例讲述了PHP基于session.upload_progress 实现⽂件上传进度显⽰功能。
分享给⼤家供⼤家参考,具体如下:介绍session.upload_progress 是PHP5.4的新特征。
当 session.upload_progress.enabled INI 选项开启时,PHP 能够在每⼀个⽂件上传时监测上传进度。
这个信息对上传请求⾃⾝并没有什么帮助,但在⽂件上传时应⽤可以发送⼀个POST请求到终端(例如通过XHR)来检查这个状态。
当⼀个上传在处理中,同时POST⼀个与INI中设置的session.upload_同名变量时,上传进度可以在$_SESSION中获得。
当PHP检测到这种POST请求时,它会在$_SESSION中添加⼀组数据, 索引是session.upload_progress.prefix与 session.upload_连接在⼀起的值。
开启session.upload_progress修改php.ini⽂件,开启session.upload_progress的⽀持。
session.upload_progress.enabled = Onsession.upload_progress.cleanup = Onsession.upload_progress.prefix = "upload_progress_"session.upload_ = "PHP_SESSION_UPLOAD_PROGRESS"session.upload_progress.freq = "1%"session.upload_progress.min_freq = "1"对于PHP语⾔,这应该是最好的解决⽅案了,因为这种⽅式依赖于PHP内部的session机制,开始上传⽂件创建相关session 以便读取,⽂件上传完成就会销毁session。
php实现简单的上传进度条
php实现简单的上传进度条Web上传⽂件的三种解决⽅案分享给⼤家:这⾥我要使⽤的是form法。
通过为表单元素设置enctype=”multipart/form-data”属性,让表单提交的数据以⼆进制编码的⽅式提交,在接收此请求的Servlet中⽤⼆进制流来获取内容,就可以取得上传⽂件的内容,从⽽实现⽂件的上传。
表单元素的enctype属性指定的是表单数据的编码⽅式,该属性有3个值:在⽹上找到了两种⽅式,PHP配合apc实现和利⽤uploadprogress实现,这次我要使⽤的是uploadprogress,点击地址可以下载到php相应版本的dll。
安装php_uploadprogress.dll扩展,重启apache。
进度条实现原理:这⾥⽤到了⼀个iframe⽆刷新上传⽂件的⽅法。
上传完成后的样⼦如图:<body><div style="padding:20px"><form action="action.php" enctype="multipart/form-data" method="post" target="iframeUpload"><iframe name="iframeUpload" width="400" height="400" frameborder='1'></iframe><input type="hidden" name="UPLOAD_IDENTIFIER" value="1" /><input id="file1" name="file1" type="file"/><input value="上传" type="submit" onclick="startProgress()"/></form></div><div style="width: 500px; height: 20px;border:1px solid red"><div style="position: relative; height: 20px; background-color: purple; width: 0%;" class="barinner"></div></div><div id='showNum'></div><div class="prbar"><div class="prpos barinner"></div></div></body>上⾯的HTML代码中要注意下UPLOAD_IDENTIFIER,这个是⽤来定位查看哪个⽂件的上传进度的。
简单的实现上传文件进度条
简单的实现上传⽂件进度条实现⽂件上传(即input标签的file类型),可以使⽤XMLHttpRequest对象中的upload属性的progress事件,该事件的事件对象可以返回上传进度相关数据XMLHttpRequestObject.upload.onprogress = function(e){};其中e.loaded表⽰已经上传的数据⼤⼩,e.total表⽰整个⽂件的⼤⼩,⽤e.loaded除以e.total就可以获取上传的进度那么该如何实现利⽤XHR传送表单呢?我们可以利⽤FormData类对象来对form表单快速转化为键值对的构造⽅式,并将其作为请求主题发送出去如下<form><input type="text" name="username" ><input type="password" name="userpwd" ><input type="file" name="userfile" ><input type="button" value="提交"></form><script>var form = document.querySelector("form");var formObj = new FormData(form);var xhr = new XMLHttpRequest();xhr.open('post','data.php');xhr.send(formObj);</script>由于FormData对象已经将form表单数据转化好,所以不再⽤设置请求头了,此时在服务器端就可以通过表单元素的name属性值获取表单值综上所述,我们通过以下代码实现简单的⽂件上传进度条<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Document</title><style type="text/css" media="screen">.outer {width:400px;height:30px;border: 1px solid #000;box-sizing: border-box;}.inner {width:0px;height:28px;background-color: yellowgreen;}</style></head><body><form><input type="text" name="username" ><input type="password" name="userpwd" ><input type="file" name="userfile" ><input type="button" value="提交"></form><!-- 进度条外壳 --><div class="outer"><!-- 进度条 --><div class="inner"></div></div><script type="text/javascript">// 获取form表单var form = document.querySelector("form");// 获取提交键var submit = document.querySelector("input[type=button]");// 获取进度条var inner = document.querySelector(".inner");// 为提交键设置事件submit.onclick = function(){// 利⽤FormData快速格式化form表单var formObj = new FormData(form);// 创建xhr对象var xhr = new XMLHttpRequest();// 设置上传⽅式和⽹址xhr.open('post','data.php');// 因为FormData已经格式化好了,所以不⽤设置请求头了// xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");// 每当上传进度变化时就触发progress事件,改变进度条长度xhr.upload.onprogress = function(e){// 398为进度条最⼤长度inner.style.width = ((e.loaded / e.total) * 398) + 'px';}// 发送请求,将格式化后的form表单作为发送主体xhr.send(formObj);}</script></body></html> 步骤总结:1. 将包含有file类型的表单通过FormData构造函数格式化2. 创建XMLHttpRequest对象并设置发送⽅式(post)和请求⽹址3. 设置上传进度事件,利⽤其事件对象获取上传进度百分⽐并改变进度条长度4. 发送请求主题。
php上传文件并显示上传进度的方法_
php上传文件并显示上传进度的方法_ 这篇文章主要介绍了php上传文件并显示上传进度的方法,实例分析了php传输文件及显示传输进度的技巧,特别具有有用价值,需要的伴侣可以参考下本文实例讲解并描述了php上传文件并显示上传进度的方法。
分享给大家供大家参考。
具体如下:记得上传文件的时候要大点,不然还没看出来就上传完了,并且上传的文件不要太大,上G的就算了,2G的我试了,PHP 受不了,我测试的是300多M的,记得要调整小php.ini参数啊“选文件=》提交=》猎取信息”要一挥而就哦^ ^?php$prefix = ini_get('session.upload_progress.prefix');$name = ini_get('session.upload_'); $key = $prefix . $name;session_start();if (isset($_POST['get_info'])) {$logo = $prefix . $_POST['logo'];exit(json_encode($_SESSION[$logo]));} elseif ($_POST) {echo 'scriptvar finashed = true;/script';}?div id="show_info_div"/divform action="index.php" method="POST" enctype="multipart/form-data"input type="hidden" name="?php echo $name; ?" value="test"input type="file" name="file"brinput type="submit" value="提交"input type="button" value="猎取信息" onclick="getUploadInfo()"/formscript src="jquery.js"/scriptscriptvar sto = null;var progress = null;function getUploadInfo(){$.post("index.php", {"get_info": 1, "logo": "test"}, function(data){data = eval("(" + data + ")");progress = parseInt(parseInt(data.bytes_processed)* 10000 / parseInt(data.content_length)) / 100 + "%";document.getElementById("show_info_div").innerHTML = progress;sto = setTimeout("getUploadInfo()", 1000);});}if (typeof(finashed) !== "undefined"){document.getElementById("show_info_div").innerHTML = "100.00% (上传胜利!)";}/script盼望本文所述对大家的php程序设计有所关心。
利用PHP实现的进度条效果
利用PHP实现的进度条效果利用PHP实现的进度条效果PHP实现的进度条效果,结合实例形式分析了PHP结合JavaScript 动态显示百分比进度条功能,涉及PHP缓存、数学运算及JavaScript页面元素动态操作相关技巧,需要的朋友可以参考下。
在做采集的.时候,想通过php来实现一个进度条功能,谷歌了一下,找了个合适的代码。
下面直接上代码:<?php//防止执行超时set_time_limit(0);//清空并关闭输出缓存ob_end_clean();//需要循环的数据for($i = 0; $i < 188; $i++){$users[] = 'Tom_' . $i;}//计算数据的长度$total = count($users);//显示的进度条长度,单位 px$width = 500;//每条记录的操作所占的进度条单位长度$pix = $width / $total;//默认开始的进度条百分比$progress = 0;><html><head><title>动态显示服务器运行程序的进度条</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><style>body,p input {font-family: Tahoma;font-size: 9pt}</style><script language="JavaScript"><!--function updateProgress(sMsg, iWidth){document.getElementById("status").innerHTML = sMsg;document.getElementById("progress").style.width = iWidth + "px";document.getElementById("percent").innerHTML = parseInt(iWidth / <?php echo $width; ?> * 100) + "%";}--></script></head><body><p style="margin:50px auto; padding: 8px; border: 1px solid gray; background: #EAEAEA; width: <?php echo $width+8; ?>px"> <p style="padding: 0; background-color: white; border: 1px solid navy; width: <?php echo $width; ?>px"><p id="progress"style="padding: 0; background-color: #FFCC66; border: 0; width: 0px; text-align: center; height: 16px"></p></p><p id="status"></p><p id="percent"style="position: relative; top: -30px; text-align: center; font-weight: bold; font-size: 8pt">0%</p></p><?phpflush(); //将输出发送给客户端浏览器foreach($users as $user){// 在此处使用空循环模拟较为耗时的操作,实际应用中需将其替换;// 如果你的操作不耗时,我想你就没必要使用这个脚本了 :)for($i = 0; $i < 1000000; $i++){}><script language="JavaScript">updateProgress("正在操作用户<?php echo $user; ?> ....", <?php echo min($width, intval($progress)); ?>);</script><?phpflush(); //将输出发送给客户端浏览器,使其可以立即执行服务器端输出的 JavaScript 程序。
基于fileUpload文件上传带进度条效果的实例(必看)
基于fileUpload⽂件上传带进度条效果的实例(必看)⽂件上传过程中,如果我们能看到进度条会更好,实现思路是服务器端⽤监听器实时监听进度并存⼊session,客户端异步请求服务器端获得上传进度,并进⾏效果渲染。
效果图:服务器端servlet:public class UploadServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {//取出监听器MyProgress在session中保存的进度信息String progress=(String) req.getSession().getAttribute("progress");//响应resp.getWriter().print(progress);//清除session中保存的数据// req.getSession().removeAttribute("progress");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {req.setCharacterEncoding("UTF-8");DiskFileItemFactory factory=new DiskFileItemFactory();ServletFileUpload upload=new ServletFileUpload(factory);upload.setProgressListener(new MyProgressListener(req));try {List<FileItem> list = upload.parseRequest(req);for (FileItem fileItem : list) {if (fileItem.isFormField()) {//普通表单}else{//上传⽂件String path=req.getRealPath("uploads");String fileName=fileItem.getName();File file=new File(path, fileName);fileItem.write(file);System.out.println("成功上传⽂件:"+fileName);}}} catch (Exception e) {System.out.println("⽂件上传发⽣错误!");e.printStackTrace();}}}服务器端监听器:public class MyProgressListener implements ProgressListener {private HttpSession session;public MyProgressListener(HttpServletRequest request){session = request.getSession();}@Overridepublic void update(long pBytesRead, long pContentLength, int pItems) {//将数据进⾏格式化//已读取数据由字节转换为Mdouble readM=pBytesRead/1024.0/1024.0;//已读取数据由字节转换为Mdouble totalM=pContentLength/1024.0/1024.0;//已读取百分百double percent=readM/totalM;//格式化数据//已读取String readf=dataFormat(pBytesRead);//总⼤⼩String totalf=dataFormat(pContentLength);//进度百分百NumberFormat format=NumberFormat.getPercentInstance();String progress=format.format(percent);//将信息存⼊sessionsession.setAttribute("progress", progress);//打印消息到控制台System.out.println("pBytesRead===>"+pBytesRead);System.out.println("pContentLength==>"+pContentLength);System.out.println("pItems===>"+pItems);System.out.println("readf--->"+readf);System.out.println("totalf--->"+totalf);System.out.println("progress--->"+progress);}/*** 格式化读取数据的显⽰* @param data要格式化的数据单位byte* @return 格式化后的数据,如果⼩于1M显⽰单位为KB,如果⼤于1M显⽰单位为M */public String dataFormat(double data){String formdata="";if (data>=1024*1024) {//⼤于等于1Mformdata=Double.toString(data/1024/1024)+"M";}else if(data>=1024){//⼤于等于1KBformdata=Double.toString(data/1024)+"KB";}else{//⼩于1KBformdata=Double.toString(data)+"byte";}return formdata.substring(0, formdata.indexOf(".")+2);}}客户端:<html><head><base href="<%=basePath%>" rel="external nofollow" ><title>带进度条的⽂件上传效果</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"><meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><style type="text/css">#progressBar{width: 300px;height: 20px;border: 1px #EEE solid;}#progress{width: 0%;height: 20px;background-color: lime;}</style><script type="text/javascript" src="js/jquery-1.4.2.js"></script><script type="text/javascript">function upload(){$("#f1").submit();var pro=null;pro=setInterval(function(){$.get("UploadServlet","",function(data){if(data=='100%'){clearInterval(pro);$("#proInfo").text("上传进度:100%");//更新进度条$("#progress").width("100%");}else{//正在上传//更新进度信息$("#proInfo").text("上传进度:"+data);//更新进度条$("#progress").width(data);}});},200);}</script></head><body><iframe name="aa" style="display: none;"></iframe><h2>带进度条的⽂件上传效果</h2><form target="aa" id="f1" action="UploadServlet" method="post" enctype="multipart/form-data">⽂件:<input name="file" type="file"><input type="button" value="上传" onclick="upload();"><div id="progressBar"><div id="progress"></div></div><span id="proInfo">上传进度:0%</span></form></body></html>说明:为了让上传后该页⾯不跳转,我们可以让表单跳转⾄⼀个隐藏的iframe。
带进度条的上传(Asp.net+MVC+Uploadify)
带进度条的上传(+MVC+Uploadify)1、Uploadify简介Uploadify是基于jQuery的⼀种上传插件,⽀持多⽂件、带进度条显⽰上传,在项⽬开发中常被使⽤。
2、 MVC3中的使⽤Uploadify搭建 MVC3解决⽅案如下图,其中使⽤到的Uploadify为3.1版本: 1>、简单⽰例_Layout.cshtml代码:<!DOCTYPE html><html><head><title>@ViewBag.Title</title>@RenderSection("Header")</head><body>@RenderBody()</body></html>Index.cshtml代码:@{ViewBag.Title = "Index";Layout = "~/Views/Shared/_Layout.cshtml";}@section Header{<link href="@Url.Content("~/Scripts/uploadify-v3.1/uploadify.css")" rel="stylesheet" type="text/css" /><script src="@Url.Content("~/Scripts/jquery-1.8.1.min.js")" type="text/javascript"></script><script src="@Url.Content("~/Scripts/uploadify-v3.1/jquery.uploadify-3.1.min.js")" type="text/javascript"></script><script type="text/javascript">$(function () {$('#file_upload').uploadify({'swf' : '@Url.Content("~/Scripts/uploadify-v3.1/uploadify.swf")','uploader' : '/Home/Upload'});});</script><style type="text/css">body{font-size: 12px;}.tip{height: 20px;border-bottom: 1px solid #CCC;margin-bottom: 10px;}</style>}<div class="tip">jQuey Uploadify上传⽂件⽰例:</div><input type="file" id="file_upload" name="file_upload" />HomeController.cs代码:using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc;using System.IO;namespace WebUI.Controllers{public class HomeController : Controller{//// GET: /Home/public ActionResult Index(){return View();}[AcceptVerbs(HttpVerbs.Post)]public JsonResult Upload(HttpPostedFileBase fileData){if (fileData != null){try{// ⽂件上传后的保存路径string filePath = Server.MapPath("~/Uploads/");if (!Directory.Exists(filePath)){Directory.CreateDirectory(filePath);}string fileName = Path.GetFileName(fileData.FileName);// 原始⽂件名称string fileExtension = Path.GetExtension(fileName); // ⽂件扩展名string saveName = Guid.NewGuid().ToString() + fileExtension; // 保存⽂件名称fileData.SaveAs(filePath + saveName);return Json(new { Success = true, FileName = fileName, SaveName = saveName });}catch (Exception ex){return Json(new { Success = false, Message = ex.Message }, JsonRequestBehavior.AllowGet);}}else{return Json(new { Success = false, Message = "请选择要上传的⽂件!" }, JsonRequestBehavior.AllowGet);}}}}上传效果图:2>、设置上传图⽚⼤⼩ MVC默认情况下,允许上传的⽂件⼤⼩最⼤为4MB。
BootStrap实现文件上传并带有进度条效果
//uploadUrl: "../fileinfo/save", // server upload action uploadUrl:"https://localhost:8080/GD/UploadAction_execute.action", required: true, showBrowse: true, browseOnZoneClick: true, dropZoneEnabled: false, allowedFileExtensions: ["jpg", "xlsx"],//只能选择xls,和xlsx格式的文件提交 //maxFileSize: 0,//单位为kb,如果为0表示不限制文件大小 layoutTemplates:{ actionUpload:''}, /*上传成功之后运行*/ fileuploaded:$("#aaa").on("fileuploaded", function (event, data, previewId, index) { console.log("Upload success"); var a = document.getElementById('aaa').value; console.log(a); $.ajax({
做了一天终于做出来了在上传成功之后可以将路径添加到数据库因为一直在烦恼如何在上传成功之后在将路径添加到数据库终于弄出来了太开心了不得不说bootstrap的强大之前说ajax不能上传文件之后想办法用js写更改了上传文件按钮的样式但是没想到bootstrap真的太厉害了样式还不错可以预览图片限制文件的大小格式等等还有进度条
php进度条实现代码
php进度条实现代码php进度条实现代码,后面都有详细的说明。
最近的php将会让你学到更多。
跟随小编一起去了解下吧!代码如下:<html><head></head><body><tablewidth="400"border="0"cellspacing="1"cellpadding= "1"><tr><tdbgcolor="000000"><tablewidth="400"border="0"cellspacing="0"cellpadding= "1"><tr><tdbgcolor="ffffff"><imgsrc="bar.gif"src="bar.gif"width="0"height="16"id="pe rcent_img"name="percent_img"align="absmiddle"> </td></tr></table></td><td><spanid="percent_txt"name="percent_txt">0%</span></td></tr></table></body></html><?phpflush();for($i=0;$i<=100;$i++)//循环输出100次JavaScript代码{$width=$i*4;echo"<SCRIPT>";echo"percent_img.width=$width;";//控制图片宽度echo"percent_txt.innerHTML='$i%';";//控制百分比显示echo"</SCRIPT>";for($j=0;$j<1000000;$j++){//为了演示进度条的效果,这里执行了一个空循环}flush();}>。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
PHP 文件上传进度条实现程序在php中要实现上传进度条有很多方法,如ajax是现在的主流或利用iframe来实现,现在我们来介绍php的apc与uploadprogress实现文件上传进度条效果。
目前我知道的方法有两种,一种是使用PHP的创始人Rasmus Lerdorf 写的APC扩展模块来实现(/package/apc),另外一种方法是使用PECL扩展模块uploadprogress实现(/package/uploadprogress)我这里举两个分别实现的例子供参考,更灵活的应用根据自己需要来修改。
APC实现方法:安装APC,参照官方文档安装,可以使用PECL模块安装方法快速简捷,这里不说明配置php.ini,设置参数apc.rfc1867=1 ,使APC支持上传进度条功能,在APC源码说明文档里面有说明代码范例:代码如下复制代码if ($_SERVER['REQUEST_METHOD'] == 'POST') { //上传请求$status = apc_fetch('upload_' . $_POST['APC_UPLOAD_PROGRESS']);$status['done'] = 1;echo json_encode($status); //输出给用户端页面里的ajax调用,相关文档请自己寻找exit;} elseif (isset($_GET['progress_key'])) { //读取上传进度$status = apc_fetch('upload_'.$_GET['progress_key']);echo json_encode($status);exit;} else {//其他代码,比如上传表单等}uploadprogress 模块实现方法:使用PECL模块安装方法安装该模块php.ini里面设置uploadprogress.file.filename_template = “/tmp/upd_%s.txt”代码范例:代码如下复制代码if($_SERVER['REQUEST_METHOD']=='POST') {if (is_uploaded_file($_FILES['upfile']['tmp_name'])) {$upload_dir = 'your_path/';$ext = strrchr($_FILES['video']['name'], '.');$sessid = $_POST['UPLOAD_IDENTIFIER'] ;$tmpfile = $upload_dir . $sessid;$sessfile = $upload_dir . $sessid .$ext;if (move_uploaded_file($_FILES['upfile']['tmp_name'],$tmpfile)) {//上传成功} else {//上传失败} else {//上传错误} elseif (!empty($_GET['sessid'])) {header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");header("Cache-Control: no-store, no-cache, must-revalidate");header("Cache-Control: post-check=0, pre-check=0", false);header("Pragma: no-cache");header("Content-Type:text/html;charset=UTF-8");$unique_id = $_GET['sessid'];$uploadvalues = uploadprogress_get_info($unique_id);if (is_array($uploadvalues)) {echo json_encode($uploadvalues);} else {//读取进度失败,另外处理逻辑}} else {//显示上传表单}整合现在剩下的只是要把所有内容hook 到一起。
您可以通过progress.php 页面来完成此操作。
清单5. 最终的progress.php 页面代码如下复制代码<?php$id = uniqid("");?><html><head><title>Upload Example</title></head><body><script src="/maps?file=api&v=2&key=<yourkeyhere>"type="text/javascript"></script><script type="text/javascript">function getProgress(){GDownloadUrl("getprogress.php?progress_key=<?php echo($id)?>",function(percent, responseCode) {document.getElementById("progressinner").style.width = percent+"%";if (percent < 100){setTimeout("getProgress()", 100);}});}function startProgress(){document.getElementById("progressouter").style.display="block";setTimeout("getProgress()", 1000);}</script><iframe id="theframe" name="theframe"src="upload.php?id=<?php echo($id) ?>"style="border: none; height: 100px; width: 400px;" ></iframe><br/><br/><div id="progressouter" style="width: 500px; height: 20px; border: 6px solid red; display:none;"><div id="pro gressinner" style="position: relative; height: 20px; background-color: purple; width: 0%; "> </div></div></body></html>从底层开始向上层工作,我们已经添加了嵌入清单1 中的upload.php 脚本的iframe,给它提供了在页面顶部生成的惟一ID。
现在,是否还记得该表单中的Submit 按钮?代码如下复制代码<input onclick="window.parent.startProgress(); return true;"type="submit" value="Upload!"/>该按钮将完成两项工作。
提交表单,像普通的Submit 按钮一样;但在执行该操作之前,它将在主窗口中调用startProgress() 脚本。
startProgress() 脚本将告诉进度条显示自身——开始时无显示属性,然后告诉浏览器等待一秒,然后再执行getProgress() 脚本。
现在,getProgress() 脚本将使事情变得有趣。
记不记得在前面我说过将需要使用Ajax 或某种类似的方法来检查文件的进度?对,在本例中,表单将采用捷径,调用来自Google Maps API 库的GdownloadUrl() 函数(注意,表单将导入位于页面顶部的库。
您将需要获得自己的访问此库的密钥,但是它是从Google 免费获取的)。
此函数将下载URL 的内容——本例中为getprogress.php 脚本——并执行在其中定义的匿名函数。
函数所接受的第一个参数是从URL 返回的数据,本例中为百分比,以便使用它更新进度条。
最后,如果文件尚未完成下载,则告诉浏览器每十分之一秒重试一次(在实际情况中,可能无法那么快地执行这些调用,但是浏览器将尽其所能进行操作)。
最终结果是页面使用户可以查看文件正被上传的进度。
如果文件太大了我们可以如下操作:PHP限制上传文件大小第一:在php.ini里面查看如下行:upload_max_filesize = 8Mpost_max_size = 10Mmemory_limit = 20M把这些值改成我所说的,看看有没有问题,另外要确认上传的<form> 里没有类似下面的这行<input type="hidden" name="MAX_FILE_SIZE" value="500000">这样也是限制上传大小用的。
PHP限制上传文件大小第二:如果是apache 2 需要修改/etc/httpd/conf.d/php.conf中的LimitRequestBody 524288将524288(=512×1024)改大,比如5M(=5×1024×1024)在PHP限制上传文件大小之后,文件上传就不会出现如上问题,上传不响应,上传现实该页无法现实也将得到解决!。