PHP文件上传处理案例分析
本文实例讲述了php文件上传处理的方法。分享给大家供大家参考,具体如下:
最近遇到一个事,把自己坑了好久,我想说说我开始的想法
php的上传机制封装的很完全,基本几行代码就能实现,他的实现流程是这样的
upload到文件到临时目录中–>使用move_uploadde_file()到指定的目录
这就是php上传流程,或者你在中途再进行一些验证。例如判断是不是通过upload方式提交的文档,或者文件的扩展是不是我们允许的
等等一系列验证。我给出简单的代码也算是抛砖引玉了。
$targetfolder = '/uploads'; // 定义根目录 if (!empty($_files)) { $tempfile = $_files['filedata']['tmp_name']; if(is_uploaded_file($tempfile)) { $targetpath = $_server['document_root'] . $targetfolder; $targetfile = rtrim($targetpath,'/') . '/' . $_files['filedata']['name']; $filetypes = array('jpg','jpeg','gif','png'); // 允许的后缀扩展 $fileparts = pathinfo($_files['filedata']['name']); if (in_array($fileparts['extension'],$filetypes)) { move_uploaded_file($tempfile,$targetfile); echo '1'; } else { echo '非法上传文档.'; } }else { echo "非法上传文件"; } }
上面的这种方式基本就满足了文件上传。但我需要的不是这样的。
上传功能
需求:先点击上传文档,然后选择上传文件,js上传后会返回一个值,显示当前时间戳问名称的文件在文档名称这个框框中。
然后点击提交后,提交表单。
服务器处理提交的表单,对上传的文件进行重命名。
问题也随之而来了,服务器是iis的,然后它是用的映射的方式实现的虚拟跟目录。
这样的话$_server[‘document_root']就不在php站点的根目录
虽然完成了上传的功能,但无法下载这个文件。从服务器的安全考虑,还是打算把文件放在php站点内。
然后我就陷进了一个思维局限中。
再仔细想一想:
为何我不用实现php的上传机制的方式在重复一次。
php不是将文件先放到临时目录里面吗?然后我为嘛假设js上传成功后的目录也是一个临时目录,
然后在再一次提交表单的时候进行文件复制。到指定的目录这样就完成了需要的功能。
php有一个文件复制函数copy(); 然后在配合rename()函数。这样就可以完成上传后文件的第二次移动和重命名了。
注意:在window平台下如果复制一个零字节的文件,copy() 将返回 false ,但文件也会被正确复制。
然后php在文件处理上,积极的参考了liunx的文件处理机制。php的文件操作效率,这跟i/o对写和操作系统有关。
总结:其实解决问题的方式很多,而且不要给自己画圈从而限定自己的思维。
更多关于php相关内容感兴趣的读者可查看本站专题:《php文件操作总结》、《php图形与图片操作技巧汇总》、《php数组(array)操作技巧大全》、《php基本语法入门教程》、《php运算与运算符用法总结》、《php面向对象程序设计入门教程》、《php网络编程技巧总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家php程序设计有所帮助。