php中上传图片文件的PHP函数

编程环境

PHP5.2.4,基本上PHP4.3以上版本,此代码都可以使用

准备工作

检查upload_tmp_dir项

如果PHP的开发环境是自行搭建的,你需要在编写文件上传程序前编辑php.ini文件,找到并编辑upload_tmp_dir选项,此项用来设定文件上传至服务器时的临时文件夹,比如upload_tmp_dir = E:/phpos/uploads,然后再重启Apache。如果PHP的开发环境使用的是傻瓜式一键安装包,一般upload_tmp_dir都是设定好了的,你也可以用phpinfo()函数查看下配置

html

 代码如下 复制代码
<input name="userfile" type="file">

示例:

 代码如下 复制代码

if (! empty ( $_FILES ['file'] ['name'] )) {
 $img = $this->up_file ( "file" );
}

up_file()函数:

 代码如下 复制代码

function up_file($inputname, $destinate = "../data/agency/", $type = "", $maxSize = 0) {
 $arr = explode ( '.', $_FILES [$inputname] ['name'] );
 $count = count ( $arr );
 $typearr = explode ( ',', $type );
 
 if (! empty ( $type )) {
  if (! in_array ( $arr [$count - 1], $typearr )) {
   $this->show_warning ( '文件类型不允许上传' );
   exit ();
  }
 }
 if ($maxSize != 0) {
  if (($_FILES [$inputname] ['size'] / 1000) >= $maxSize) {
   $this->show_warning ( '文件大小超过限制' );
   exit ();
  }
 }
 
 if (! empty ( $destinate )) {
  $destinate = substr ( str_replace ( "", "/", $destinate ), - 1 ) == "/" ? $destinate : $destinate . "/";
  if (! is_writable ( $destinate )) {
   $this->show_warning ( '文件目录发生错误' );
   exit ();
  }
 }
 $filename = date ( "YmdHis" ) . (microtime () * 1000000) . "." . $arr [$count - 1];
 
 if (is_file ( $destinate . $filename )) {
  up_file ( $inputname, $destinate = "", $type = "", $maxSize = 0 );
 } else {
  $filename = $filename;
 }
 copy ( $_FILES [$inputname] ['tmp_name'], $destinate . $filename );
 @unlink ( $_FILES [$inputname] ['tmp_name'] );
 return $filename;
}

以上范例中 $_FILES 数组的内容如下所示。我们假设文件上传字段的名称为 userfile(名称可随意命名)
如何上传多个文件?比如同时上传3个文件

只需将

 代码如下 复制代码

<input name="userfile" type="file">
改成

<input name="userfile[]" type="file">
<input name="userfile[]" type="file">
<input name="userfile[]" type="file">

对应的在调用此函数时,$_FILES['userfile']['name'][0],代表第一个文件的相关文件信息,依此类推,其他也一样。

$_FILES['userfile']['name'] 客户端机器文件的原名称。
 $_FILES['userfile']['type'] 文件的 MIME 类型,需要浏览器提供该信息的支持,例如“image/gif”。
 $_FILES['userfile']['size'] 已上传文件的大小,单位为字节。
 $_FILES['userfile']['tmp_name'] 文件被上传后在服务端储存的临时文件名。
 $_FILES['userfile']['error'] 和该文件上传相关的错误代码

值:0; 没有错误发生,文件上传成功。
 值:1; 上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
 值:2; 上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。
 值:3; 文件只有部分被上传。
 值:4; 没有文件被上传。

上传大文件失败的解决办法

文件上传时存放文件的临时目录必须是开启的并且是 PHP 进程所有者用户可写的目录。如果未指定则 PHP 使用系统默认值。

max_execution_time = 90
file_uploads = On
upload_max_filesize = 2M 设定文件上传的大小的最大值

时间: 2024-10-03 00:26:18

php中上传图片文件的PHP函数的相关文章

asp.net中上传图片文件实例(给上传图片加水印)

本款asp教程.net教程是一款asp.net教程中上传图片文件实例(给上传图片加水印)哦,他先是把图片上传服务器,然后增加图片水印,再把图片保存到数据库教程. // 涉及命名空间 using system; using system.collections; using system.componentmodel; using system.data; using system.data.sqlclient; using system.drawing; using system.drawing

php中常用文件操作读写函数介绍

用 PHP 内置函数 file_exists 可以检查某个文件或目录是否存在.如果文件或目录存在,file_exists 函数返回 TRUE,如果不存在,则返回 FALSE. 下面是一个简单的检查文件是否存在的实例代码:  代码如下 复制代码 <html><body><?php $filename = "C:\blabla\php\hello.txt"; if (file_exists($filename))  {echo "The file $

asp.net中上传图片文件实现防伪图片水印并写入数据库

复制代码 代码如下:// 涉及命名空间 using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Data.SqlClient; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.Web; using Syste

asp.net中上传图片文件实现防伪图片水印并写入数据库_实用技巧

复制代码 代码如下: // 涉及命名空间 using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Data.SqlClient; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.Web; using Syst

fopen() 函数用于在 PHP 中打开文件

打开文件 fopen() 函数用于在 PHP 中打开文件. 此函数的第一个参数含有要打开的文件的名称,第二个参数规定了使用哪种模式来打开文件: <html> <body> <?php $file=fopen("welcome.txt","r"); ?> </body> </html> 文件可能通过下列模式来打开: 模式 描述 r 只读.在文件的开头开始. r+ 读/写.在文件的开头开始. w 只写.打开并清

模板函数-函数模板在头文件和main函数中应该怎么写

问题描述 函数模板在头文件和main函数中应该怎么写 第一次写,提示找不到标示符max,求指正 解决方案 即便在外部文件中定义了max,也应该在引用文件中extern声明后再使用 另外你的max.h文件中将你的3到10行代码屏蔽了,改为: #ifndef MAX_H #define MAX_H 解决方案二: main函数究竟应该怎么写?main函数究竟应该怎么写?c++模板类/模板函数的声明与定义应该放在头文件里

c# c++ dll-C#调用C++和opencv生成的dll库文件,其中函数中带有指针

问题描述 C#调用C++和opencv生成的dll库文件,其中函数中带有指针 大家好,我用C#调用C++的dll,其中一个函数中有指针,参数的定义在C++中是一个结构体,但是我现在遇到的问题是无法获取托管类型的地址和大小,或无法声明指向它的指针,下面我把这个函数在C++中的定义和我自己转到C#中的定义给大家贴出来,大家帮帮忙,本人属于C++和C#新手. C++ 1. int THFI_Create (short nChannelNum,THFI_Param* pParam) 功能:初始化THFa

python-Python 编写以文件名为输入参数,可在文件中提取作者名字的函数

问题描述 Python 编写以文件名为输入参数,可在文件中提取作者名字的函数 Python初学者,这是最近看的<Python编程实践>中dict和set那一章的课后题,实在是解决不了,也没搜索到其他的经验贴,希望各位大神指教下,以下是题目: PDB文件格式常常用于存储有关分子的信息.一个PDB文件中可能含有零个或多个以单词AUTHOR(可能全大写,也可能全小写,还可能大小写混排)开始的行,然后是一些空格或者制表符,再然后是创建该文件的人的姓名.编写一个函数,以一个**文件名列表**为输入参数,

visual studio-关于cocos2d studio中添加按钮发布在vs中然后通过csb文件写回调函数

问题描述 关于cocos2d studio中添加按钮发布在vs中然后通过csb文件写回调函数 在cocos2d studio做好了按下效果,现在就不需要在vs里写按下效果了,直接写回调函数 就行了,但是我现在不知道是要写检测按下动作还是绑定精灵create的时候加载回调函数.我现在 auto rootNode = CSLoader::createNode("MainScene.csb"); addChild(rootNode); login = dynamic_cast(seekFro