PHP开发之简单文件上传到MySql数据库(三)
这一节,我们将设置几个自定义函数来实现生成新文件地址保存到数据库中。
首先我们上传的图片都有一个地址,比如123.jpg, abc.png等等
我们需要保留后面的 .jpg, .png的后缀
使用两个函数来截取原文件路径的后缀名
strrchr() 函数查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符。
substr() 函数返回字符串的一部分。
<?php function fileext($filename) { return substr(strrchr($filename, '.'), 1); } ?>
fileext是我们设置的函数名称,filename是原文件名称。
下面我们就要生成一个新的路径名来保存到数据库中
这里也需要自定义一个函数random
设定一个前缀CR-, 从字母A-Z,a-z,0-9随机抽选几个来混搭来生成新的路径名前缀
使用函数:strlen() 函数返回字符串的长度。
<?php function random($length) { $hash = 'CR-'; $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz'; $max = strlen($chars) - 1; mt_srand((double)microtime() * 1000000); for($i = 0; $i < $length; $i++) { $hash .= $chars[mt_rand(0, $max)]; } return $hash; } ?>
生成目标文件名
<?php $filename=explode(".",$_FILES['file']['name']); do{ $filename[0]=random(10); //设置随机数长度 $name=implode(".",$filename); $uploadfile = $uploaddir.$name; } while(file_exists($uploadfile)); ?>
explode() 函数把字符串打散为数组。
implode() 函数返回由数组元素组合成的字符串。
最后把所有的文件打包成一个PHP文件upload.php(名字可以根据需求和功能创建)
<?php $uploaddir = "upfiles/";//设置文件保存目录 注意包含/ $type=array("jpg","gif","bmp","jpeg","png");//设置允许上传文件的类型 //获取文件后缀名函数 function fileext($filename) { return substr(strrchr($filename, '.'), 1); } //生成随机文件名函数 function random($length) { $hash = 'CR-'; $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz'; $max = strlen($chars) - 1; mt_srand((double)microtime() * 1000000); for($i = 0; $i < $length; $i++) { $hash .= $chars[mt_rand(0, $max)]; } return $hash; } $a = strtolower(fileext($_FILES['file']['name'])); //判断文件类型 if(!in_array(strtolower(fileext($_FILES['file']['name'])),$type)) { $text=implode(",",$type); echo "您只能上传以下类型文件: ",$text,"<br>"; } //生成目标文件的文件名 else{ $filename=explode(".",$_FILES['file']['name']); do{ $filename[0]=random(10); //设置随机数长度 $name=implode(".",$filename); $uploadfile = $uploaddir.$name; } while(file_exists($uploadfile)); if (move_uploaded_file($_FILES['file']['tmp_name'],$uploadfile)) { if(is_uploaded_file($_FILES['file']['tmp_name'])) { echo "上传失败!"; } else {//输出图片预览 echo "<tr><td>您的文件已经上传完毕 上传图片预览: <br><img src='$uploadfile'></td></tr>"; echo "<tr><td><a href='tu2.php'style='margin-left: 3%;'>继续上传</a></td></tr>"; } //可以在前端HTML页面显示上传的文件预览 } } ?>