PHP教程之上传多个文件的PHP剧本
给你的建议是,有些最常用的语句是需要记住的 比如if for while这些、其他的一般语句你只要知道有这个函数或者有这个功能就可以了,当你用的时候你可以凭借记忆搜索就可以了。剧本|上传 译者注:本文的原名是《Creating a Multi-File Upload Script in PHP》。我个个感觉这文章写得普通,代码也不长短常专业,然而它对照短,并且一工夫也找不到好一点的文章,就把这个译过去了。其实PHP手册里也有一节是说多文件上传的,人人可以对照对照。文章内有的字句译出来不太顺眼,所以依照原意作了必定量的修正。自己程度无限,还望列位高手多指导。导言
作为一个PHP的法式员,我曾碰到过这么一个客户,他需求一个可以同时上传多个文件的表单。因而,一天夜里我就用了一个小时的工夫,找到了最好最复杂的办法来完成这个请求。在这篇教程里,“for”这个轮回语句,将会成为中心代码。
剧本1:让用户设定需求上传的文件数量
uploadForm1.php
<html>
<head>
<title>文件上传</title>
</head>
<body>
<form name="form1" method="post" action="uploadForm2.php">
<p>请输出你要同时上传的文件的数量,最大值是9</p>
<p>
<input name="uploadNeed" type="text" id="uploadNeed" maxlength="1">
</p>
<p>
<input type="submit" name="Submit" value="Submit">
</p>
</form>
</body>
</html>
下面的HTML代码十分复杂。在这段代码里,我把uploadNeed这个组件的maxlength属性设为1,那末用户所能输出的最大值就是9了。固然,你可以依据需求自行修正这部分。
剧本2:创立静态表单
好了,做好上面的这个页面今后,咱们就完玉成部任务的一半了。咱们用for轮回语句来完成这个义务。
uploadForm2.php
<html>
<head>
<title>文件上传</title>
</head>
<body>
<form name="form1" enctype="multipart/form-data" method="post" action="processFiles.php">
<?php
// 创立静态表单
$uploadNeed = $_POST['uploadNeed'];
for($x=0;$x<$uploadNeed;$x++){
?>
<input name="uploadFile<?php echo $x;?>" type="file" id="uploadFile<?php echo $x;?>">
<?php
// 完成轮回
}
?>
<input name="uploadNeed" type="hidden" value="<?php echo $uploadNeed;?>">
<input type="submit" name="Submit" value="Submit">
</form>
</body>
</html>
在这个页面里,我只是创立了一个带有“type”属性的HTML表单。在表单两头,我拔出了一段PHP代码来完成轮回。我把$x设为0而且把轮回次数设为所需求的值$uploadNeed(就是方才用户提交的谁人值)。我还把$uploadNeed的值输入到hidden域里,以便它能传递到最初的一个页面。
作这些任务的目标是为了把$x这个变量的值,加在“name”属性的值“uploadFile”的前面。如许每一个“name”属性的值“uploadFile”的前面城市有一个分歧的数字来区分第一个文件。
如今就来完成上传文件的最初一步 processFiles.php
<?php
$uploadNeed = $_POST['uploadNeed'];
// 入手下手轮回
for($x=0;$x<$uploadNeed;$x++){
$file_name = $_FILES['uploadFile'. $x]['name'];
// 去除文件名中的特别字符
$file_name = stripslashes($file_name);
$file_name = str_replace("'","",$file_name);
$copy = copy($_FILES['uploadFile'. $x]['tmp_name'],$file_name);
// 反省是不是复制胜利
if($copy){
echo "$file_name 上传胜利<br />";
}else{
echo "$file_name 上传掉败<br />";
}
} // 停止轮回
?>
在这个剧本里,咱们起首要从uploadForm2.php中获得$uploadNeed这个变量。和前页谁人页面一样,咱们用“for”语句来还创立轮回。分歧的时,咱们需求在轮回内利用预界说全局变量$_FILES,我把它传递给了$file_name这个变量。
下一步,咱们挪用了stripslashes和str_replace两个函数来处置。因为文件名内能够包括一些特别字符,所以咱们利用stripslashes函数来避免上传时呈现注释毛病。
注重我是若何添加$x这个变量的,在$_FILES里$x会酿成数字。如许法式就会晓得得处置哪一个文件了。
当咱们利用copy函数时,才真实的入手下手把上传的文件复制到指定今朝内。最初还加上了一段复杂的代码来判别复制是不是胜利,并把了局输入到屏幕上。
停止语
我一定这个小小的剧本会使你一次上传多个文件的任务变得更便利。你可以依据以下的提醒,在这个剧本内到场相干的代码来完美它。
[*]把文件名保留在MySQL数据库中
[*]获得文件的巨细并保留到数据库中
[*]创立一个一时文件保留上传掉败的文件的文件名,并在法式履行完今后再试测验考试
[*]添加批量删除文件的功效
学习如何将PHP与HTML结合起来完成简单动态页面 有时候汉字的空格也能导致页面出错,所以在写代码的时候,要输入空格最好用引文模式。 最后介绍一个代码出错,但是老找不到错误方法,就是 go to wc (囧),出去换换气没准回来就找到错误啦。 小鸟是第一次发帖(我习惯潜水的(*^__^*) 嘻嘻……),有错误之处还请大家批评指正,另外,前些日子听人说有高手能用php写驱动程序,真是学无止境,人外有人,天外有天。 在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。 php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。 曾经犯过一个很低级的错误,我在文件命名的时候用了一个横线\\\\\\\'-\\\\\\\' 号,结果找了好几个小时的错误,事实是命名的时候 是不能用横线 \\\\\\\'-\\\\\\\' 的,应该用的是下划线\\\\\\\'_\\\\\\\' ; Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81 学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。 php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会) 基础有没有对学习php没有太大区别,关键是兴趣。 说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年具体的记不清啦,囧。 当然这种网站的会员费就几十块钱。 对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。 不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。 Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81 基础有没有对学习php没有太大区别,关键是兴趣。 最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。 作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。 我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。
页:
[1]