PHP利用apc实现上传进度条方法
主要针对的是window上的应用。
1.服务器要支持apc扩展,没有此扩展的话,百度一下php_apc.dll ,下载一个扩展扩展要求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
代码如下 | 复制代码 |
<?php PHP Code |
target.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"]);//UploadTemp文件夹位于此脚本相同目录下 echo "<p>上传成功</p>"; } ?> |
index.php
代码如下 | 复制代码 |
<?php |
导出Excel用法
//设置环境变量(新增PHPExcel)
代码如下 | 复制代码 |
set_include_path('.'. PATH_SEPARATOR . Yii::app()->basePath.'/lib/PHPExcel' . PATH_SEPARATOR . get_include_path()); |
//把要导出的内容放到表格
代码如下 | 复制代码 |
//新建 $resultPHPExcel = new PHPExcel(); //设值 $resultPHPExcel->getActiveSheet()->setCellValue('A1', '季度'); |
设置导出参数
代码如下 | 复制代码 |
//设置导出文件名 $outputFileName = 'total.xls'; $xlsWriter = new PHPExcel_Writer_Excel5($resultPHPExcel); //ob_start(); ob_flush(); header("Content-Type: application/force-download"); header("Content-Type: application/octet-stream"); header("Content-Type: application/download"); header('Content-Disposition:inline;filename="'.$outputFileName.'"'); header("Content-Transfer-Encoding: binary"); 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: must-revalidate, post-check=0, pre-check=0"); header("Pragma: no-cache"); $xlsWriter->save( "php://output" ); |
输出有错。
默认$xlsWriter->save( "php://output" );可能因为缓存不够大,而显示不完整,所以做个中转,方式如下:
代码如下 | 复制代码 |
$finalFileName = (Yii::app()->basePath.'/runtime/'.time().'.xls'; $xlsWriter->save($finalFileName); echo file_get_contents($finalFileName); |
//file_get_contents() 函数把整个文件读入一个字符串中。和 file() 一样,不同的是 file_get_contents() 把文
件读入一个字符串。
导入Excel用法
代码如下 | 复制代码 |
<? //导入Excel文件 //注意设置时区 //循环读取excel文件,读取一条,插入一条 /* 第二种方法*/ |
HTML网页代码
代码如下 | 复制代码 |
<form action="upload.php" method="post" enctype="multipart/form-data"> |
在下面采集数据过程中file_get_contents函数是关键了,下面我们来看看file_get_contents函数语法
string file_get_contents ( string $filename [, bool $use_include_path = false [, resource $context [, int $offset = -1 [, int $maxlen ]]]] )
和 file() 一样,只除了 file_get_contents() 把文件读入一个字符串。将在参数 offset 所指定的位置开始读取长度为 maxlen 的内容。如果失败, file_get_contents() 将返回 FALSE。
file_get_contents() 函数是用来将文件的内容读入到一个字符串中的首选方法。如果操作系统支持还会使用内存映射技术来增强性能。
例
代码如下 | 复制代码 |
<?php |
这样$homepage就是我们采集网的内容给保存下来了,好了说了这么多我们开始吧。
例
代码如下 | 复制代码 |
<?php function fetch_urlpage_contents($url){ //采集网页 $url="http://www.111cn.net"; //要采集的地址 $ft["body"]["begin"]="<body>"; //截取的开始点 $rs=pick($url,$ft,$th); //开始采集 echo $rs["title"]; |
以下代码从上一面修改而来,专门用于提取网页所有超链接,邮箱或其他特定内容
代码如下 | 复制代码 |
<?php function fetch_urlpage_contents($url){ //采集网页 $url="http://www.111cn.net"; //要采集的地址 $rs=pick($url,$ft,$th); //开始采集 print_r($rs["a"]); ?> |
小提示file_get_contents很是容易被防采集了,我们可以使用curl来模仿用户对网站进行访问,这算比上面要高级不少哦,file_get_contents()效率稍低些,常用失败的情况、curl()效率挺高的,支持多线程,不过需要开启下curl扩展。下面是curl扩展开启的步骤:
1、将PHP文件夹下的三个文件php_curl.dll,libeay32.dll,ssleay32.dll复制到system32下;
2、将php.ini(c:WINDOWS目录下)中的;extension=php_curl.dll中的分号去掉;
3、重启apache或者IIS。
简单的抓取页面函数,附带伪造 Referer 和 User_Agent 功能
代码如下 | 复制代码 |
<?php |
代码如下 | 复制代码 |
<?php function Cache($CacheTime = 0) { private function Run() { $fileName=$this->CheckCacheFile(); function SetCacheTime($t = 60) { private function CheckCacheFile() { function SaveToCacheFile($VistUrl,$Content,$CacheFileType = 'html') { private function CheckCacheDir() { private function CleanCacheFile() { function Debug($msg='') { function GetError() {
|
一、LycFtpAbstract.class.php FTP基类
代码如下 | 复制代码 |
<?php /* author:凹凸曼(lyc) /* email: jar-c@163.com /* time : 2011-04-22 */ abstract class Lyc_Ftp_Abstract { protected $ftpobj=null; protected $host=''; protected $user='anonymous'; protected $pwd=''; protected $mode=FTP_BINARY; protected $port=21; protected $timeout=90; protected $pasv=TRUE; protected function init(){ } /** * 建立ftp连接 * */ protected function connect(){ $this->ftpobj=@ftp_connect($this->host,$this->port,$this->timeout); if(null==$this->ftpobj){ require_once 'Lyc/Ftp/Exception.class.php'; throw new Lyc_Ftp_Exception("FTP ERROR : Couldn't connect to $this->host"); } } /** * 建立ssl ftp连接 * */ protected function connectSsl(){ $ftpobj=@ftp_ssl_connect($this->host,$this->port,$this->timeout); if(null==$ftpobj){ require_once 'Lyc/Ftp/Exception.class.php'; throw new Lyc_Ftp_Exception("FTP ERROR : Couldn't connect to $this->host"); } } /** * 登录验证ftp 及设置模式 * */ protected function login(){ if(@ftp_login($this->ftpobj,$this->user,$this->pwd)){ ftp_pasv($this->ftpobj,$pasv); }else{ require_once 'Lyc/Ftp/Exception.class.php'; throw new Lyc_Ftp_Exception("FTP ERROR : Couldn't login to $this->host"); } } /** * 上传文件 * */ public function upload($remotefile,$localfile){ } /** * 下载文件 * */ public function download($localfile,$remotefile){ } /** * 关闭连接 * */ public function close(){ if(is_string($this->ftpobj)){ ftp_close($this->ftpobj); } } } ?> |
二、LycFtpFtp.class.php 实现类
代码如下 | 复制代码 |
<?php /* author:凹凸曼(lyc) /* email: jar-c@163.com /* time : 2011-04-22 /* */ require_once 'Lyc/Ftp/Abstract.class.php'; class Lyc_Ftp_Ftp extends Lyc_Ftp_Abstract{ public function __construct($host,$user,$pwd,$mode=FTP_BINARY,$port=21,$timeout=90,$pasv=TRUE){ $this->host=$host; $this->user=$user; $this->pwd=$pwd; $this->mode=$mode; $this->port=$port; $this->timeout=$timeout; $this->pasv=$pasv; $this->init(); } protected function init(){ $this->connect(); $this->login(); } /** * 上传文件 * */ public function upload($remotefile,$localfile){ $res=ftp_nb_put($this->ftpobj,$remotefile,$localfile,$this->mode,ftp_size($this->ftpobj,$remotefile)); while($res==FTP_MOREDATA){ $res=ftp_nb_continue($this->ftpobj); } if($res!=FTP_FINISHED){ return FALSE; } return TRUE; } /** * 下载文件 * */ public function download($localfile,$remotefile){ ftp_set_option($this->ftpobj,FTP_AUTOSEEK,FALSE); $res=ftp_nb_get($this->ftpobj,$localfile,$remotefile,$this->mode,ftp_size($this->ftpobj,$localfile)); while($res==FTP_MOREDATA){ $res=ftp_nb_continue($this->ftpobj); } if($res!=FTP_FINISHED){ return FALSE; } return TRUE; } } ?> |
三、LycException.class.php 异常基类
代码如下 | 复制代码 |
<?php /* author:凹凸曼(lyc) /* email: jar-c@163.com /* time : 2011-04-22 /* */ class Lyc_Exception extends Exception{ } ?> |
四、LycFtpException.class.php FTP异常类
代码如下 | 复制代码 |
<?php /* author:凹凸曼(lyc) /* email: jar-c@163.com /* time : 2011-04-22 */ require_once 'Lyc/Exception.class.php'; class Lyc_Ftp_Exception extends Lyc_Exception{ } ?> |
五、测试区
代码如下 | 复制代码 |
|
相关文章
php 中file_get_contents超时问题的解决方法
file_get_contents超时我知道最多的原因就是你机器访问远程机器过慢,导致php脚本超时了,但也有其它很多原因,下面我来总结file_get_contents超时问题的解决方法总结。...2016-11-25- 相信很多站长都遇到过这样一个问题,访问页面时出现408错误,下面一聚教程网将为大家介绍408错误出现的原因以及408错误的解决办法。 HTTP 408错误出现原因: HTT...2017-01-22
- php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享...2015-10-30
- 下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
- ps软件是现在非常受大家喜欢的一款软件,有着非常不错的使用功能。这次文章就给大家介绍下ps把文字背景变透明的操作方法,喜欢的一起来看看。 1、使用Photoshop软件...2017-07-06
intellij idea快速查看当前类中的所有方法(推荐)
这篇文章主要介绍了intellij idea快速查看当前类中的所有方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-09-02- 1.在没有设置默认值的情况下: 复制代码 代码如下:SELECT userinfo.id, user_name, role, adm_regionid, region_name , create_timeFROM userinfoLEFT JOIN region ON userinfo.adm_regionid = region.id 结果:...2014-05-31
js导出table数据到excel即导出为EXCEL文档的方法
复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta ht...2013-10-13- 这篇文章主要介绍了解决echarts 一条柱状图显示两个值,类似进度条的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-20
- 批量更新mysql更新语句很简单,更新一条数据的某个字段,一般这样写:复制代码 代码如下:UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value';如果更新同一字段为同一个值,mysql也很简单,修改下where即...2013-10-04
- 本文涉及的主题虽然很基础,在许多人看来属于小伎俩,但在JavaScript基础知识中属于一个综合性的话题。这里会涉及到对象属性的封装、原型、构造函数、闭包以及立即执行表达式等知识。公有方法 公有方法就是能被外部访问...2015-11-08
- 本文章来人大家介绍一个php文件上传类的使用方法,期望此实例对各位php入门者会有不小帮助哦。 简介 Class.upload.php是用于管理上传文件的php文件上传类, 它可以帮...2016-11-25
- ps软件是一款非常不错的图片处理软件,有着非常不错的使用效果。这次文章要给大家介绍的是ps怎么制作倒影,一起来看看设计倒影的方法。 用ps怎么做倒影最终效果̳...2017-07-06
安卓手机wifi打不开修复教程,安卓手机wifi打不开解决方法
手机wifi打不开?让小编来告诉你如何解决。还不知道的朋友快来看看。 手机wifi是现在生活中最常用的手机功能,但是遇到手机wifi打不开的情况该怎么办呢?如果手机wifi...2016-12-21- 最近想自学PHP ,做了个验证码,但不知道怎么搞的,总出现一个如下图的小红叉,但验证码就是显示不出来,原因如下 未修改之前,出现如下错误; (1)修改步骤如下,原因如下,原因是apache权限没开, (2)点击打开php.int., 搜索extension=ph...2013-10-04
- 单个字符分割 string s="abcdeabcdeabcde"; string[] sArray=s.Split('c'); foreach(string i in sArray) Console.WriteLine(i.ToString()); 输出下面的结果: ab de...2020-06-25
- 又码了一个周末的代码,这次在做一些关于文件上传的东西。(PHP UPLOAD)小有收获项目是一个BT种子列表,用户有权限上传自己的种子,然后配合BT TRACK服务器把种子的信息写出来...2016-11-25
- javascript控制页面控件隐藏显示的两种方法,方法的不同之处在于控件隐藏后是否还在页面上占位 方法一: 复制代码 代码如下: document.all["panelsms"].style.visibility="hidden"; document.all["panelsms"].style.visi...2013-10-13
连接MySql速度慢的解决方法(skip-name-resolve)
最近在Linux服务器上安装MySql5后,本地使用客户端连MySql速度超慢,本地程序连接也超慢。 解决方法:在配置文件my.cnf的[mysqld]下加入skip-name-resolve。原因是默认安装的MySql开启了DNS的反向解析。如果禁用的话就不能...2015-10-21- 本文实例讲述了jQuery实现文件上传进度条效果的代码。分享给大家供大家参考。具体如下: 运行效果截图如下:具体代码如下:<!DOCTYPE html><html><head><meta charset="utf-8"><title>upload</title><link rel="stylesheet...2015-11-24