php上传大文件设置方法
打开php.ini,首先找到
;;;;;;;;;;;;;;;;
; file uploads ;
;;;;;;;;;;;;;;;;
区域,有影响文件上传的以下几个参数:
file_uploads = on ;是否允许通过http上传文件的开关。默认为on即是开
upload_tmp_dir ;文件上传至服务器上存储临时文件的地方,如果没指定就会用系统默认的临时文件夹
upload_max_filesize = 8m ;望文生意,即允许上传文件大小的最大值。默认为2m
在
;;;;;;;;;;;;;;;;;
; data handling ;
;;;;;;;;;;;;;;;;;
区域,还有一项:
post_max_size = 8m ;指通过表单post给php的所能接收的最大值,包括表单里的所有值。默认为8m
一般地,设置好上述四个参数后,上传<=8m的文件是不成问题,在网络正常的情况下。
但如果要上传>8m的大体积文件,只设置上述四项还一定能行的通。除非你的网络真有100m/s的上传高速,否则你还得关心关心下面的参数:
;;;;;;;;;;;;;;;;;;;
; resource limits ;
;;;;;;;;;;;;;;;;;;;
max_execution_time = 600 ;每个php页面运行的最大时间值(秒),默认30秒
max_input_time = 600 ;每个php页面接收数据所需的最大时间,默认60秒
memory_limit = 8m ;每个php页面所吃掉的最大内存,默认8m
author: lajabs
email: agl0dhlvqgdtywlslmnvbq==
本文以php作为描述语言较详细讲解堆排序原理
因保证程序可读性,故不做优化.
php程序中关于堆的一些概念:
假设n为当前数组的key则
n的父节点为 n>>1 或者 n/2(整除);
n的左子节点l= n<<1 或 l=n*2,n的右子节点r=(n<<1)+1 或 r=l+1
*/
$arr=array(1,8,7,2,3,4,6,5,9);
/*
数组$arr的原形态结构如下:
1
/
8 7
/ /
2 3 4 6
/
5 9
*/
heaps教程ort($arr);
print_r($arr);
/*
排序后生成标准的小顶堆结构如下:
1
/
2 3
/ /
4 5 6 7
/
8 9
既数组:array(1,2,3,4,5,6,7,8,9)
*/
function heapsort(&$arr)
{
//求最后一个元素位
$last=count($arr);
//堆排序中通常忽略$arr[0]
array_unshift($arr,0);
//最后一个非叶子节点
$i=$last>>1;
//整理成大顶堆,最大的数整到堆顶,并将最大数和堆尾交换,并在之后的计算中忽略数组后端的最大数(last),直到堆顶(last=堆顶)
while(true)
{
adjustnode($i,$last,$arr);
if($i>1)
{
//移动节点指针,遍历所有非叶子节点
$i--;
}
else
{
//临界点last=1,既所有排序完成
if($last==1)break;
//当i为1时表示每一次的堆整理都将得到最大数(堆顶,$arr[1]),重复在根节点调整堆
swap($arr[$last],$arr[1]);
//在数组尾部按大小顺序保留最大数,定义临界点last,以免整理堆时重新打乱数组后面已排序好的元素
$last--;
}
}
//弹出第一个数组元素
array_shift($arr);
}
//整理当前树节点($n),临界点$last之后为已排序好的元素
function adjustnode($n,$last,&$arr)
{
$l=$n<<1; //$n的左孩子位
if(!isset($arr[$l])||$l>$last) return ;
$r=$l+1; //$n的右孩子位
//如果右孩子比左孩子大,则让父节点的右孩子比
if($r<=$last&&$arr[$r]>$arr[$l]) $l=$r;
//如果其中子节点$l比父节点$n大,则与父节点$n交换
if($arr[$l]>$arr[$n])
{
//子节点($l)的值与父节点($n)的值交换
swap($arr[$l],$arr[$n]);
//交换后父节点($n)的值($arr[$n])可能还小于原子节点($l)的子节点的值,所以还需对原子节点($l)的子节点进行调整,用递归实现
adjustnode($l,$last,$arr);
}
}
//交换两个值
function swap(&$a,&$b)
{
$a=$a ^ $b; $b=$a ^ $b; $a=$a ^ $b;
}
代码如下 | 复制代码 |
function deleteemptyarray( $val ) function getoutlink($body) |
//调用方法
代码如下 | 复制代码 |
$body ="<a href=/ab.htm>aaa</a><a href=http://www.111cn.net>我是外部连接</a>"; echo getoutlink($body); |
代码如下 | 复制代码 |
function imagebmp($img,$file="",$rle=0)
$transparent=imagecolortransparent($img);
if($colorcount==0) {$colorcount=0; $bitcount=24;};
$zbytek=(4-($width/(8/$bitcount))%4)%4; if($bitcount<24) $palsize=pow(2,$bitcount)*4; $size=(floor($width/(8/$bitcount))+$zbytek)*$height+54; // bitmap file header $cc=$colorcount; for($p=0;$p<$colortotal;$p++) $ct=$colortotal;
for($y=$height-1;$y>=0;$y--) if((strlen($bwrite)<8)and(strlen($bwrite)!=0)) if(($rle==1)and($bitcount==8)) if(($t+5)%$width==0)
for($y=$height-1;$y>=0;$y--) }; if($file!="")
function imagecreatefrombmp($file) $f=fopen($file,"r"); if($header=="bm") $sizebitmapinfoheader=freaddword($f); if($bibitcount<24)
for($y=$height-1;$y>=0;$y--) };
$pocetb=0; while(true) $echoit=false; if($echoit)echo "prefix: $prefix suffix: $suffix<br>"; while(!(($prefix==0)and($suffix==0))) for($x=0;$x<strlen($data);$x++) }; };
/*while(!feof($f)) $echoit=false; if($echoit)echo "prefix: $prefix suffix: $suffix<br>"; while(!(($prefix==0)and($suffix==0))) $currentbit=0; for($x=0;$x<strlen($data);$x++) }; };
for($y=$height-1;$y>=0;$y--) };
/* function freadbyte($f) function freadword($f)
function freaddword($f)
function retbits($byte,$start,$len) };
$currentbit=0;
function rgbtohex($red,$green,$blue) function int_to_dword($n)
function decbinx($d,$n) function inttobyte($n) |
//实例方法
代码如下 | 复制代码 |
include_once('bmp.php'); $image=imagecreatefrombmp('a.bmp'); imagejpeg($image,'a.jpeg'); imagedestroy($image); |
fck 上传图片增加水印代码修改 //我们只要找到editor/filemanger/conectors/php/commands.php文件把下面这段php代码替换成你的commands.php文件就行了。
function getfolders( $resourcetype, $currentfolder )
{
// map the virtual path to the local server path.
$sserverdir = servermapfolder( $resourcetype, $currentfolder, 'getfolders' ) ;
// array that will hold the folders names.
$afolders = array() ;
$ocurrentfolder = opendir( $sserverdir ) ;
while ( $sfile = readdir( $ocurrentfolder ) )
{
if ( $sfile != '.' && $sfile != '..' && is_dir( $sserverdir . $sfile ) )
$afolders[] = '<folder name="' . converttoxmlattribute( $sfile ) . '" />' ;
}
closedir( $ocurrentfolder ) ;
// open the "folders" node.
echo "<folders>" ;
natcasesort( $afolders ) ;
foreach ( $afolders as $sfolder )
echo $sfolder ;
// close the "folders" node.
echo "</folders>" ;
}
function getfoldersandfiles( $resourcetype, $currentfolder )
{
// map the virtual path to the local server path.
$sserverdir = servermapfolder( $resourcetype, $currentfolder, 'getfoldersandfiles' ) ;
// arrays that will hold the folders and files names.
$afolders = array() ;
$afiles = array() ;
$ocurrentfolder = opendir( $sserverdir ) ;
while ( $sfile = readdir( $ocurrentfolder ) )
{
if ( $sfile != '.' && $sfile != '..' )
{
if ( is_dir( $sserverdir . $sfile ) )
$afolders[] = '<folder name="' . converttoxmlattribute( $sfile ) . '" />' ;
else
{
$ifilesize = @filesize( $sserverdir . $sfile ) ;
if ( !$ifilesize ) {
$ifilesize = 0 ;
}
if ( $ifilesize > 0 )
{
$ifilesize = round( $ifilesize / 1024 ) ;
if ( $ifilesize < 1 ) $ifilesize = 1 ;
}
$afiles[] = '<file name="' . converttoxmlattribute( $sfile ) . '" size="' . $ifilesize . '" />' ;
}
}
}
// send the folders
natcasesort( $afolders ) ;
echo '<folders>' ;
foreach ( $afolders as $sfolder )
echo $sfolder ;
echo '</folders>' ;
// send the files
natcasesort( $afiles ) ;
echo '<files>' ;
foreach ( $afiles as $sfiles )
echo $sfiles ;
echo '</files>' ;
}
function createfolder( $resourcetype, $currentfolder )
{
if (!isset($_get)) {
global $_get;
}
$serrornumber = '0' ;
$serrormsg = '' ;
if ( isset( $_get['newfoldername'] ) )
{
$snewfoldername = $_get['newfoldername'] ;
$snewfoldername = sanitizefoldername( $snewfoldername ) ;
if ( strpos( $snewfoldername, '..' ) !== false )
$serrornumber = '102' ; // invalid folder name.
else
{
// map the virtual path to the local server path of the current folder.
$sserverdir = servermapfolder( $resourcetype, $currentfolder, 'createfolder' ) ;
if ( is_writable( $sserverdir ) )
{
$sserverdir .= $snewfoldername ;
$serrormsg = createserverfolder( $sserverdir ) ;
switch ( $serrormsg )
{
case '' :
$serrornumber = '0' ;
break ;
case 'invalid argument' :
case 'no such file or directory' :
$serrornumber = '102' ; // path too long.
break ;
default :
$serrornumber = '110' ;
break ;
}
}
else
$serrornumber = '103' ;
}
}
else
$serrornumber = '102' ;
// create the "error" node.
echo '<error number="' . $serrornumber . '" originaldescription="' . converttoxmlattribute( $serrormsg ) . '" />' ;
}
function fileupload( $resourcetype, $currentfolder, $scommand )
{
if (!isset($_files)) {
global $_files;
}
$serrornumber = '0' ;
$sfilename = '' ;
if ( isset( $_files['newfile'] ) && !is_null( $_files['newfile']['tmp_name'] ) )
{
global $config ;
$ofile = $_files['newfile'] ;
// map the virtual path to the local server path.
$sserverdir = servermapfolder( $resourcetype, $currentfolder, $scommand ) ;
// get the uploaded file name.
$sfilename = $ofile['name'] ;
$sfilename = sanitizefilename( $sfilename ) ;
$soriginalfilename = $sfilename ;
// get the extension.
$sextension = substr( $sfilename, ( strrpos($sfilename, '.') + 1 ) ) ;
$sextension = strtolower( $sextension ) ;
if ( isset( $config['secureimageuploads'] ) )
{
if ( ( $isimagevalid = isimagevalid( $ofile['tmp_name'], $sextension ) ) === false )
{
$serrornumber = '202' ;
}
}
if ( isset( $config['htmlextensions'] ) )
{
if ( !ishtmlextension( $sextension, $config['htmlextensions'] ) &&
( $detecthtml = detecthtml( $ofile['tmp_name'] ) ) === true )
{
$serrornumber = '202' ;
}
}
// check if it is an allowed extension.
if ( !$serrornumber && isallowedext( $sextension, $resourcetype ) )
{
$icounter = 0 ;
while ( true )
{
$sfilepath = $sserverdir . $sfilename ;
//$sfilepath =$sserverdir.time().$sextension;
if ( is_file( $sfilepath ) )
{
$icounter++ ;
$sfilename = removeextension( $soriginalfilename ) . '(' . $icounter . ').' . $sextension ;
$serrornumber = '201' ;
}
else
{
move_uploaded_file( $ofile['tmp_name'], $sfilepath ) ;
if ( is_file( $sfilepath ) )
{
if ( isset( $config['chmodonupload'] ) && !$config['chmodonupload'] )
{
break ;
}
$permissions = 0777;
if ( isset( $config['chmodonupload'] ) && $config['chmodonupload'] )
{
$permissions = $config['chmodonupload'] ;
}
$oldumask = umask(0) ;
chmod( $sfilepath, $permissions ) ;
umask( $oldumask ) ;
}
break ;
}
}
代码如下 | 复制代码 |
//增加水印 // add start $waterimg="111cn.net.png"; //水印图片 这里修改你的水印图片所在的地址 if($watermark==1) { $image_size = getimagesize($sfilepath); $iinfo=getimagesize($sfilepath,$iinfo); $nimage=imagecreatetruecolor($image_size[0],$image_size[1]); $white=imagecolorallocate($nimage,255,255,255); $black=imagecolorallocate($nimage,0,0,0); $red=imagecolorallocate($nimage,255,0,0); imagefill($nimage,0,0,$white); switch ($iinfo[2]) { case 1: $simage =imagecreatefromgif($sfilepath); break; case 2: $simage =imagecreatefromjpeg($sfilepath); break; case 3: $simage =imagecreatefrompng($sfilepath); break; // case 6: // $simage =imagecreatefromwbmp($sfilepath); // break; default: die("不支持的文件类型"); exit; } imagecopy($nimage,$simage,0,0,0,0,$image_size[0],$image_size[1]); switch($watertype) { case 1: //加水印字符串 imagestring($nimage,2,3,$image_size[1]-15,$waterstring,$black); break; case 2: //加水印图片 $simage1 =imagecreatefrompng($waterimg); imagecopy($nimage,$simage1,$image_size[0]/2,$image_size[0]/2,0,0,240,65); imagedestroy($simage1); break; } switch ($iinfo[2]) { case 1: imagegif($nimage, $sfilepath); // imagejpeg($nimage, $sfilepath); break; case 2: imagejpeg($nimage, $sfilepath); break; case 3: imagepng($nimage, $sfilepath); break; // case 6: // imagewbmp($nimage, $sfilepath); // //imagejpeg($nimage, $sfilepath); // break; } //覆盖原上传文件 imagedestroy($nimage); imagedestroy($simage); } |
//增加水印结果
if ( file_exists( $sfilepath ) )
{
//previous checks failed, try once again
if ( isset( $isimagevalid ) && $isimagevalid === -1 && isimagevalid( $sfilepath, $sextension ) === false )
{
@unlink( $sfilepath ) ;
$serrornumber = '202' ;
}
else if ( isset( $detecthtml ) && $detecthtml === -1 && detecthtml( $sfilepath ) === true )
{
@unlink( $sfilepath ) ;
$serrornumber = '202' ;
}
}
}
else
$serrornumber = '202' ;
}
else
$serrornumber = '202' ;
$sfileurl = combinepaths( getresourcetypepath( $resourcetype, $scommand ) , $currentfolder ) ;
$sfileurl = combinepaths( $sfileurl, $sfilename ) ;
senduploadresults( $serrornumber, $sfileurl, $sfilename ) ;
exit ;
}?>
相关文章
- 步骤:Window -> PHP -> Editor -> Templates,这里可以设置(增、删、改、导入等)管理你的模板。新建文件注释、函数注释、代码块等模板的实例新建模板,分别输入Name、Description、Patterna)文件注释Name: 3cfileDescriptio...2013-10-04
- photoshop的直排文字工具,打出的字特别是英文字母,默认排列侧向的,如何调整为正向排列呢?下面我们就来看看标准的罗马对齐方式应该怎么设置。 1、在PS中点击“工具面...2017-01-22
- 这篇文章主要介绍了c#之FileStream对象读写大文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
- 本文章来介绍的是小米手机的无线网络wifi的设置方法,有需要学习wifi网络设置上网的朋友可详细的参考参考。 ==进入小米手机的主界面: ==然后点击wifi快速打开的地...2016-09-20
- 这篇文章主要介绍了C#使用FileStream循环读取大文件数据的方法,结合实例形式分析了FileStream文件流的形式循环读取大文件的相关操作技巧,需要的朋友可以参考下...2020-06-25
- 本文章来介绍在手机中如何设置margin哦,我们做网站只要在css定义就好了,在手机中可不一样哦,下面参考在java中的设置方法。 Android在java代码中设置margin 我们平常...2016-09-20
- php cookie设置,js cookie设置方法 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">...2016-11-25
- 如果你碰到php 不显示错误的话可能是你php.ini中把错误提示给关了,解决办法很简单我们只要把php.ini中的display_error = off改成on即可。 解决办法 1、php.ini里...2016-11-25
修改PHP配置文件上传大文件几种方法(apache/nginx)
在php.ini中如果我们不对 post_max_size,upload_max_filesize 这些参数进行修改,默认最多只能上传2MB的文件了,如果几十MB或更大的就无法上传了,下面我来介绍修改PHP配置...2016-11-25- 在php中默认时区与中国相关8小时了,下面我来给大家介绍在于linux中与windows系统解决php时差8小时的方法,希望对各位同学有帮助。 大陆内地可用的值是:Asia/Chongqin...2016-11-25
.NET的file文件上传控件使用方法 修改web.config文件上传大文件
这篇文章主要介绍了.NET修改web.config文件上传大文件的方法,大家参考使用吧...2021-09-22- 本篇文章结合实例为大家介绍了php下载远程大文件(获取远程文件大小)的方法,有需要的朋友就来参考一下吧。 废话不多说,直接上代码 代码如下复制代码 <?php /...2017-07-06
帝国CMS WAP手机端独立域名绑定和设置方法(适用本站所有图片类作品源码)
网站主站域名为www.xxx.com,手机版域名为wap.xxx.com建立一个网站绑定一个域名比如wap.xxx.com!网站首页index.html的内容如下:<html> <head> <meta http-equiv="Content-Lan...2016-05-08- php时区是一个非常有意思的问题,安装好apache+php环境之后会发现我们使用date函数获取的日期都与中国时间有8小时区别了,那么这个时区问题要如何解决呢?下面本人整理了一...2016-11-25
- 需求如下: 现有一个1G左右的日志文件,大约有500多万行, 用php返回最后几行的内容,如果我们使用常用的方法估计就直接卡死了,后看到一站长写了这文章整理了一下使用起来非...2016-11-25
- 小编给大家分享一篇文章,介绍了PHP如何搭建大文件切割分块上传功能的实例代码,有兴趣的同学可以看看! 背景 在网站开发中,文件上传是很常见的一个功能。相信很多人都...2017-01-22
- 本文章来给各位同学介绍一个简单的PHP/Shell大文件数据统计并且排序实现程序,各位同学可参考使用哦。 诸多大互联网公司的面试都会有这么个问题,有个4G的文件,如何用...2016-11-25
- 作为PHP开发人员,我们不需要担心内存管理。在极少数情况下,我们可能需要走出舒适的界限—例如,当我们尝试在可以创建的最小VPS上为大型项目运行Composer时,或者需要在同样小的服务器上读取大文件时。这是我们将在本教程中讨论的一个问题。...2021-05-30
- PHP 读取大文件与读取一般的文件是有些区别的,如果你的文件到了几百MB或GB这样可能普通的php读取文件会很慢或卡死了,下面我来介绍一下PHP 读取大文件技巧吧。 一般...2016-11-25
- 在linux中增加了fastcgi+php环境,结果在文件上传时如果文件小于100KB是可以上传,但大了点就提示mod_fcgid: HTTP request length 132296 (so far) exceeds MaxRequestLe...2016-11-25