PHP图片上传实例分析
图片上传与文件上传在php中都是一样直接使用move_uploaded_file($_FILES["filename"]["tmp_name"]就可以实现了,下面我来给大家分享一个站长分享文件上传例子.
前期需要了解的知识点:
move_uploaded_file()文件上传函数,代码如下:
- if(move_uploaded_file($_FILES["filename"]["tmp_name"])
- {
- echo '文件上传成功';
- }
$_FILES php全局变量
$_FILES:经由 HTTP POST 文件上传而提交至脚本的变量,类似于旧数组 $HTTP_POST_FILES 数组,依然有效,但反对使用,代码如下:
$_FILES['myFile']['name'] 客户端文件的原名称。
$_FILES['myFile']['type'] 文件的 MIME 类型,需要浏览器提供该信息的支持,例如"image/gif"。
$_FILES['myFile']['size'] 已上传文件的大小,单位为字节。
$_FILES['myFile']['tmp_name'] 文件被上传后在服务端储存的临时文件名,一般是系统默认。可以在php.ini的upload_tmp_dir 指定,但用 putenv() 函数设置是不起作用的。
$_FILES['myFile']['error'] 和该文件上传相关的错误代码。['error'] 是在 PHP 4.2.0 版本中增加的。下面是它的说明:(它们在PHP3.0以后成了常量)
UPLOAD_ERR_OK 值:0; 没有错误发生,文件上传成功。
UPLOAD_ERR_INI_SIZE 值:1; 上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
UPLOAD_ERR_FORM_SIZE 值:2; 上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。
UPLOAD_ERR_PARTIAL 值:3; 文件只有部分被上传。
UPLOAD_ERR_NO_FILE 值:4; 没有文件被上传。 值:5; 上传文件大小为0.
核心文件,upimg.htm,代码如下:
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
- "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- <title>上传图片</title>
- <script language="javascript">
- function $(id){
- return document.getElementById(id);
- }
- function ok(){
- $("logoimg").src = $("filename").value;
- }
- </script>
- </head>
- <body>
- <table align="center" cellpadding="0" cellspacing="0">
- <tr>
- <td height="45" align="center" valign="middle">
- <form action="uploadf.php?submit=1" method="post" enctype="multipart/form-data" name="form1"> 请选择上传的图片
- <input type="file" name="filename" onchange="ok()">
- <!-- MAX_FILE_SIZE must precede the file input field -->
- <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
- <input type="submit" name="Submit" value="上传">
- </form>
- </td>
- </tr>
- </table>
- <font color="red">注意:请上传120*45像素的GIF或者jpg格式的logo图片</font><br/>
- logo预览:<img src="images/bg-02.gif"/>
- </body>
- </html>
- uploadf.php
- <?php
- if(!emptyempty($_GET[submit]))
- {
- $path="uploadfiles/pic/"; //上传路径
- //echo $_FILES["filename"]["type"];
- if(!file_exists($path))
- {
- //检查是否有该文件夹,如果没有就创建,并给予最高权限
- mkdir("$path", 0700);
- }//END IF
- //允许上传的文件格式
- $tp = array("image/gif","image/pjpeg","image/png");
- //检查上传文件是否在允许上传的类型
- if(!in_array($_FILES["filename"]["type"],$tp))
- {
- echo "格式不对";
- exit;
- }//END IF
- if($_FILES["filename"]["name"])
- {
- $file1=$_FILES["filename"]["name"];
- $file2 = $path.time().$file1;
- $flag=1;
- }//END IF
- if($flag) $result=move_uploaded_file($_FILES["filename"]["tmp_name"],$file2);
- //特别注意这里传递给move_uploaded_file的第一个参数为上传到服务器上的临时文件
- if($result)
- {
- //echo "上传成功!".$file2;
- echo "<script language='javascript'>";
- echo "alert(\"上传成功!\");";
- //echo " location='add_aaa.php?pname=$file2'";
- echo "</script>";
- echo("<input type=\"button\" name=\"Submit\" value=\"确定\" onClick=\"window.opener.setFile('".$file2."');window.close();\">");
- echo "图片名称:".$file2;
- }//END IF
- } else {
- echo "file is null!";
- }
- ?>
调用示例文件,testUpload.htm,代码如下:
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
- "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- <title>上传图片</title>
- <script>
- function setFile(f1){
- document.frm.logoImg.value=f1;
- }
- </script>
- </head>
- <body>
- <table align="center" cellpadding="0" cellspacing="0">
- <tr>
- <td height="45" align="center" valign="middle">
- <form action="#" method="post" name="frm"> 请选择上传的图片
- <input name="regAd.logoImg" type="text" size="30"/>
- <label onClick="window.open('upimg.htm','上传图片','height=200,width=400,top=200,left=200')">上传图片</label><br/>
- </form>
- </td>
- </tr>
- </table>
- </body>
- </html>
此程序不足之处分析,上传预览功能,代码如下:
- function $(id){
- return document.getElementById(id);
- }
- function ok(){
- $("logoimg").src = $("filename").value;
- }//开源软件:phpfensi.com
这段代码其实就是一个鸡肋了,在有一些浏览器下是不兼容了,但不会影响到图片上传功能.
程序安全:对于在上传处我们并未进行数据大小限制与程序上传文件类型进行限制,这样可以利用它来上传一些像php文件,这样你的网站就不安全了.