手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表Tag:分析

PHP文件上传全攻略

这是一篇比较老的文章,其实从情感上来说,我更愿意推荐手册上的介绍,但事实上,在一些PHP群中,有些朋友在问的时候,他们总是想不到翻手册的。嗯,英文的手册确实让人不太舒服,但,不可能在手册一出来就帮你翻译好的吧?事事都去期待别人,还不如把英文好好看看,再者,手册上的英文真的很简单的。
我不知道你们的手册是怎么样的,版本多少,但是我在我的手册里是有这么一个章节:

Chapter 38. Handling file uploads
  1. POST method uploads  
  2. Error Messages Explained  
  3. Common Pitfalls  
  4. Uploading multiple files  
  5. PUT method support  

一共讲了5种情况,而且对于不能上传大文件也专门做了介绍,他是这么说的:

PHP is capable of receiving file uploads from any RFC-1867 compliant browser (which includes Netscape Navigator 3 or later, Microsoft Internet Explorer 3 with a patch from Microsoft, or later without a patch).

Related Configurations Note: See also the file_uploads, upload_max_filesize, upload_tmp_dir, post_max_size and max_input_time directives in php.ini

PHP also supports PUT-method file uploads as used by Netscape Composer and W3C's Amaya clients. See the PUT Method Support for more details.

OK,我知道你们不愿意看,所以我也不多说了,看中文版吧,原文来自于:http://www.sourcejoy.com/php_dev/PHP_upload.html。
PHP文件上传功能一般都是大家使用事先封装好的函数,要用的时候直接使用已封装的函数就完了,但有时候不能使用封装函数,还真不大能记住PHP的上传相关的东西,在此做个总结,以备后用。

1.表单部分
允许用户上传文件,在HTML表单的声明中要加上一个上传的属性:
enctype = 'multipart/form-data'
表单的method必须是POST
表单选项MAX_FILE_SIZE隐藏域用于限制上传文件大小,它必须放在文件表单元素前面,单位为字节。
如:
<form enctype='multipart/form-data' id='aa' name='aaa' method='post' action='xxx.php'>
<input type='hidden' name='MAX_FILE_SIZE' value='2621114' />
<input name='upload_file' type='file' />
</form>

2.处理上传文件
上传时,PHP收到关于该文件的信息数组,这些信息可以在$_FILES这个超级全局数组中找到。
如:如果表单中的文件输入框名字为upload_file,那么关于该文件的所有信息都包含在数组$_FILES['upload_file']里面。
如:客户上传了一个“aaa.jpg”的图片数组值如下:
name "p5pp.jpg" 上传时文件的名字
type “image/jpeg" 文件类型
tmp_name "/tmp/phpjksdf" 服务器端的临时文件名
error 上传错误的返回值
size 2045 文件实际大小

上面数组里面的error会返回不同的常量值,如下:
UPLOAD_ERR_OK 没有错误发生,文件上传成功
UPLOAD_ERR_INI_SIZE 文件大小超过了PHP.INI中upload_max_filesize选项限制的值
UPLOAD_ERR_FORM_SIZE 上传文件的大小超过了HTML表单中MAX_FILE_SIZE选项值。可在程序中检查表单$FILES ['up_file']['size']来处理
UPLOAD_ERR_PARTIAL 文件只有部分被上传
UPLOAD_ERR_NO_FILE 用户没有提供任何文件上传
上传后处理的具体例子:
if(!move_uploaded_file($_FILES['f']['tmp_name'],"uploads/".$_FILES['f']['name'].".jpg")){
echo "error";
}

函数:
move_uploaded_file 移动上传的临时文件到指定的目录下
例子:
move_uploaded_file('临时文件名','指定文件路径')

is_uploaded_file 判断是否是通过http Post上传的文件
例子:
if(!is_uploaded_file($_FILES['f']['tmp_name'])){
echo '非法';
}

3.相关参数
PHP上传设计到的php.ini中的参数:
file_uploads 是否允许上传文件,默认ON

upload_tmp_dir 上传文件防止的临时目录,未指定则使用系统默认位置

upload_max_filesize 允许上传文件的大小的最大值,默认为2M

post_max_size 控制采用POST方法进行一次表单提交中PHP所能接受的最大数据量,如果希望用PHP文件上传,则此值要改为比upload_max_filesize要大

max_input_time 以秒为单位对通过POST/GET/PUT方式接受数据时间进行限制。

memory_limit 为了避免正在运行的脚本大量使用系统内存,PHP允许定义内存使用限额。通过设置此参数来制定单个脚本程序可以使用的最大内存容量,应适当大于post_max_size值

max_execution_time 用来设置在强制终止脚本前PHP等待脚本执行完毕的时间,单位秒。次选项可限制死循环脚本,但当存在一个长时间的合法活动时(如:上传大文件),这项功能也会导致操作失败。这样情况下必须考虑将此变量增加。

4.考虑多文件上传
可以利用$_FILES数组就可以轻松实现多文件上传。$_FILES数组可以获取客户端表单里面所有的file域内容,从而获得所有在同一表单上传的文件。

5.突破上传的内存限制
方法一:
修改php.ini中memory_limit值,改为更大,如 64M
方法二:
使用Apache Rewrite方法,动态修改memory_limit的值。首先建立一个.htaccess文件,保存在上传文件程序的 当前目录即可.代码如下:
php_value memory_limit 100M
php_value post_max_size 30M
php_value upload_max_filesize 30M
php_value max_execution_time 300
php_value max_input_tim 300
php_value display_errors On

——EOF——
当然,如果你在这种下也还是看不懂不能理解的话,我也就没有话说喽。

Tags: 上传

服务器版:Paragon Partition Manager

本软件是我非常喜欢的软件之一,为防止哪天某些网站被和谐了,留下来做个备份

介绍:Paragon Partition Manager是一个类似于PQ PartitionMagic的磁盘分区工具集,是一套磁盘管理软件,PartitionMagic的最佳替代品!有着直觉的图形使用介面和支持鼠标操 作。主要功能包括:能够不损失硬盘资料下对硬盘分区做大小调整、能够将NTFS文件系统转换成FAT、FAT32或FAT32文件系统转换成FAT文件系 统、支持制作、格式化、删除、复制、隐藏、移动分区、可复制整个硬盘资料到其它分区、支持长文件名、支持FAT、FAT32、NTFS、HPFS、 Ext2FS分区和大于8GB大容量硬盘。
本软件的特色在于,可以自由选择语言代码页来进行分区转换,从而可以在任何语言的分区上进行操作。而 PQ PartitionMagic在简体中文环境下进行 FAT32<->NTFS 的转换时会有乱码产生,而Paragon Partition Manager却不会有乱码问题。
此为服务器版,支持 Windows NT4/2000/2003
汉化注意事项:
1、此为零售简装版,不需要原版,直接安装后即可使用。去掉了不常用的组件,只保留 Partition Manager 和 ImageExplorer。
2、为减小安装包的大小,只保留了英语、简体中文和繁体中文的代码页文件,也就是说,此三种语言的操作系统在转换文件系统时不会有任何乱码问题,如需其他特殊语言代码,请安装原版。
3、为确保转换正确,请按以下进行设置:选择菜单“常规--设置”,再选“本地信息”,时区选择“北京、香港”,文件名语言选择“Chinese(RPC)”,然后确定即可。
4、 在2004年初即已获得作者授权做官方简体中文版,不过全部完成后,德国佬却音讯全无,不再给我回信,所以至今也没有发行官方中文版。此版是我根据作者以 前给的资源结合新版资源做成的,因汉化方法特殊,新增的资源只能一条条查找并自己加到语言包中,所以有遗漏在所难免。另外,部分地方会有乱码,原因未知。

附件: partitionserver.rar (4.21 M, 下载次数:3043)

Tags: paragon, partition, manager

如何更好的提高博客性能[转载+自己的理解分析]

本文是从网上COPY而来,本文原始网址为:http://www.wlue.cn/html/200863124143.html,属于SEO一类的文章,对于文章中的一些见解,如果我有不同看法,我会以不同颜色的文字标出。
请看全文:


      对于服务器租用者来说,要想在硬件环境、网络环境等来改善自身网站性能,受客观因素的影响可能会有比较大的难度。因此,只能退而求其次,在程序上狠下功 夫。对于独立博客站长来说,使用的博客程序一般都是比较成熟的发行版的程序,这些程序为了适用的广泛性往往在代码中留出了很大的改进余地,因此,我们可以 在这上面下一些功夫。

  提高博客性能方法一: 合并JavaScript文件。

     无论是在PJBlog还是其它的博客程序中,都使用了大量的外部JavaScript文件,要知道,引入一个外部文件都要 发送一个HTTP请求,而在所有影响页面响应速度的因素中,HTTP请求是最关键的一个,因此把所有的JavaScrip文件合并到一个 javascript.js的文件中是一个很好的做法。不过,你要注意不同的JavaScript文件中使用了不同的变量和函数名称,你要保证它们合并之 后还能正常工作。在某些情况下,你也可以有两个独立的JavaScript文件;

  提高博客性能方法二:精减你的JavaScript文件。

      合并 JavaScript文件是为了减少HTTP请求次数,但是基本上不会在体积上有所改观,所以你还需要精简掉JavaScript文件中那些没有用的东 西,比如注释、换行、空白等,这大概会使你的程序缩小20%~30%的空间。你可以使用ESC 1.14对文件进行压缩,它的压缩率高达60%以上,对于减少响应大小、提高响应速度来说大有裨益;

  提高博客性能方法三:合并CSS文件与精减CSS文件。

      和处理JavaScript文件一样,把所有的CSS文件合并到一个style.css中,CSS比 JavaScript 好处理的一点就是它冲突的机率较小,即便有冲突也不会是大问题。精简就去掉多余的样式化的格式,把所有的CSS规则都放到一行中。这款叫作Minify的 程序不但可以压缩CSS还可以压缩JavaScript和PHP程序。不过这里要提醒的是,如果你要合并和精简文件一定要保留原来的文件以便以后程序更改 时使用。 [在这里推荐一个在线更新CSS文件的地址:http://www.cleancss.com/]

  提高博客性能方法四: 使用CSS Spirites。

       所谓的CSS Spirites就是所有CSS中用来做背景图像的图片文件都放到一个文件中。在PJBlog以及其它博客程序的皮肤中,作者很多都没有使用CSS Spirites,这样造成每出现一次background规则都要发送一次HTTP请求,而如果使用CSS Spirites则只需要一次HTTP请求,节省不必要的开支。 [说实话,这里有点痛苦,不是每个做网站的人都懂得这点,但即使懂得这点,如果改起来,对原有的CSS文件的改动也非常大,只有建议那些做模版的朋友们在做模版的时候能够考虑这点就好了。]

  提高博客性能方法五: 使用缓存。

       对于静态内容(如Flash、 JavaScript、CSS、Image)通过加上Expires头或者Cache-Control来把它们缓存到客户端,这样用户在下次访问的时候就 可以不用下载这样内容了,这样减少了HTTP请求的次数又减少了下载文件的大小。在IIS中设置文件头很简单,在你要设置的文件或者文件夹上右键点击—— 属性——HTTP头,然后勾中“启用文件过期”,设定过期时间,可以是一年或者十年等,还可以指定某个未来的时间,如2010年等。不过你一但设置了 HTTP头,如果你要对文件作出修改你需为修改过的文件重新起一个名字。 [不知道如何在文件中设置过期时间,PHP还能通过设置头来搞定,可是CSS、JS呢?]

  提高博客性能方法六: 启用Gzip压缩。

       Gzip压缩针对 JavaScript、CSS等内容一种压缩技术,它能大大减少文件的体积提高传输速率,精简JavaScript和CSS只是去除不必要的内容,而 Gzip压缩则是将文件在服务器端打包、在客户端解包的过程。Apache和IIS6.0都内置了Gzip技术,现代浏览器都支持Gzip技术(即使不支 持它也会告诉服务器不要打包),因此可以放心使用。在IIS6.0中你需要简单配置之后才能使用Gzip技术,而在Apache 1.3中要启用mod_zip,在Apache 2.x使用moflate。Gzip大概可以节省70%的传输空间,目前互联网中有90%浏览器资料支持Gzip传输。

  提高博客性能方法七: 把JavaSCript 文件放在文档的最末尾,而把CSS文件放在之间。

       CSS放在之间会加快文档下载。在Yahoo!的研 究中发现,如果你把一个CSS文件置于文档内部,当浏览器加载到这个样式表时会终止所有文件的下载而单独下载它(一般的下载浏览器使用并行下载模式),这 是因为浏览器在下载到一个CSS文件后都要根据CSS内的规则重绘屏幕,这还会导致用户出现白屏。所以要把你所有的样式文件都放在最开始。而把 JavaScript文件放于末尾下载,一方面可以使用户首先获得文档内容,另一方面JavaScript文件的下载和其它文件不同,它不能和其它文件同 时下载,所有的JavaScript文件只有单独一个一个下载。所以在不影响使用的情况下,JavaScript文件要放在末尾加载。 [关于这点,我确实没有什么话好讲的,JS不同于其他的文件,如果网页中有JS需要在加载的时候运行,你能怎么办?说实话,如果不是用JS框架,这一点几乎不能实现,怎么可能把JS放在文件结尾呢?
CSS放在之间,我想指的应该是放在head之间吧]

  提高博客性能方法八: CSS和JavaScript文档要成为独立的外部文件。

       这是因为浏览器加载使用的是并行模式,一次可以加载多个内容,把CSS和JavaScript作为单独文件不但可以减小HTML文档的大小,而可以加快下载效率。 [关于这点,在yslow的介绍文件里也有说明,意思是如果有可能,请尽量为你的CSS中的图片和JS使用单独的域名,这样,即使出现404,也不会影响当前页面的下载,可以加快浏览速度,而且放到单独的域名里之后,也可以更方便的使用、设置过期时间什么的]

  提高博客性能方法九: 使用少量的域名。

      一般来说一个页面引用的文件(图片、Flash、CSS、JavaScript)不能多于四个主机,因为每多出一个域名就意味着多一个 DNS的查找,在浏览器查找DNS信息的过程中,浏览器由于不知道要访问的IP地址是什么,所以它什么都不做,只是在等待,所以DNS查找的次数越少,响 应速度就越快。 [这一点,我在yslow里面看到了,同样说明,如果我们要放广告的话,尽量使用同一个网站的广告,这样也能避免DNS查找花费太大的时间]

  提高博客性能方法十: 避免CSS中使用Expression。

      虽然功能很强大,但是它的计算频率太高,影响网站的整体性能。对于一个CSS Expression来说,即使你滚动一下屏幕它都要重新计算一次,甚至你移到一次鼠标它都要重新计算,所有一个CSS Express在页面中计算10000次是很容易的事情。 

       以上就如何提高博客性能方法提出的十条建议


说的虽然是提高博客性能,但几乎对每个网站的优化都有一定的好处。如果需要更详细的介绍,我想,应该是看那篇关于网页设计的14条军规(现在改为20条了),也可以通过yslow来进行检测,看看你的网站被打分多少。yslow的检测是根据以前的14条军规而进行检测的,现在还没有更新的20条。
所谓的军规也是yahoo那帮子人提出来的,现在也成为了一种规范,yslow就是在这个基础上进行开发,不过yslow是FF的插件哦,IE下面有httpwatch插件,可以清楚的看到网站的每一个页面加载花费了多少时间,在哪个文件或者图片上所花费的时间最长,那么就可以有针对性的进行更新了。

Tags: 性能, 分析, 博客, 转载