澳门新浦京娱乐游戏php入门教程单文件上传与多文件上传实例

一、文件的上传

1、php.ini中关于文件上传的设置指令

先来看看$_FILES数组内容如下:

1、客户端设置:
(1)、在标签中将enctype和method两个属性指明相应的值。Enctype=”multipart/form-data”;
Method=”POST”(2)、form表单中设置一个hidden类型的input框,其中name的值为MAX_FILE_SIZE的隐藏值2、服务器端设置:

2、文件上传过程

$_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 版本中增加的。

(1)、$_FILES多维数组:用于存储各种上传文件有关的信息

上传文件提交表单html代码:

下面是它的说明:(它们在PHP3.0以后成了常量)

(2)、文件上传与php配置文件的设置,如以下php.ini文件中的一些指令

    Adminstration - upoload new files   Upload new files  

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.

指令 默认值 功能描述

php处理上传文件代码

注:
1.
文件被上传结束后,默认地被存储在了临时目录中,这时必须将它从临时目录中删除或移动到其它地方,如果没有,则会被删除。也就是不管是否上传成功,脚本执行完后临时目录里的文件肯定会被删除。所以在删除之前要用PHP的
copy() 函数将它复制到其它位置,此时,才算完成了上传文件过程。

file_uploads ON 确定服务器上的PHP脚本是否可以接受HTTP文件上传

①在php脚本中,需要处理的数据保存在超级变量数组$_FILES中,开启register_globals指令可以直接通过变量名访问这些信息;

  1. 在 PHP 4.1.0 版本以前该数组的名称为 $HTTP_POST_FILES,它并不像
    $_FILES 一样是自动全局变量。PHP 3 不支持 $HTTP_POST_FILES 数组。

  2. 用form上传文件时,一定要加上属性内容
    enctype=”multipart/form-data”,否则用$_FILES[filename]获取文件信息时会报异常。

memory_limit 8M
设置脚本可以分配的最大内存量,防止失控的脚本独占服务器内存

②假如表单变量名为“username“则有:

 代码如下

upload_max_file 2M
限制PHP处理上传文件大小的最大值,此值必须小于POST_MAX_SIZE值

$_FILES[‘userfile’][‘tmp_name’]:储存文件在Web服务器中的临时保存位置;$_FILES[‘userfile’][‘name’]:储存用户系统中文件的名称;$_FILES[‘userfile’][‘size’]:储存文件的大小;$_FILES[‘userfile’][‘type’]:储存文件的类型;$_FILES[‘userfile’][‘error]:储存任何与文件上传相关的错误代码;

<form enctype=”multipart/form-data” action=”URL” method=”post”>
<input name=”myFile” type=”file”>
<input type=”submit” value=”上传文件”>
</form>

post_max_size 8M 限制通过POST方法可以接受信息的最大值

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,没有文件被上传。UPLOAD_ERR_NO_TMP_DIR:6,找不到临时文件夹。PHP
4.3.10 和 PHP 5.0.3 引进。UPLOAD_ERR_CANT_WRITE:7,文件写入失败。PHP
5.1.0 引进。

php代码

upload_tmp_dir NULL 上传文件的临时路径,可以是一个绝对路径

0){ echo 'Problem'; switch($_FILES['userfile']['error']){ case 1: echo 'File exceeded upload_max_filesize';break; case 2: echo 'File exceeded max_file_size';break; case 3: echo 'File only partially upload';break; case 4: echo 'No file uploaded';break; case 6: echo 'Cannot upload file: No temp directory specified';break; case 7: echo 'Upload failed:Cannot write to disk';break; } exit; } //检验传输的文件是否为文本文件 if($_FILES['userfile']['type'] != 'text/plain'){ echo 'Problem: file is not plain text'; exit; } //将上传文件包含在服务器中/uploads/的目录下 $upfile = '/uploads/'.$_FILES['userfile']['name']; //在指定目录下以传输文件的文件名创建一个新文件 if(is_uploaded_file($_FILES['userfile']['tmp_name'])){ if(! move_uploaded_file($_FILES['userfile']['tmp_name'],$upfile)){ //将传输文件的临时文件移动到创建的新文件 echo 'Problem: Could not move file to destination directory'; exit; } } else{ echo 'Problem: Possible file upload attack.Filename:'; echo $_FILES['username']['name']; exit; } echo "File uploaded seuucessfully

"; //对传输文件清除html和php标记 $contents = file_get_contents; //将文件内容提取为一个字符串; $contents = strip_tags; //对该字符串擦除html和tags标记; file_put_contents($_FILES['userfile']['name'],$contents); //将该字符串重新写入文件中; //在浏览器上显示传输的文本文件内容 echo "Preview of uploaded file contents:
>"; echo nl2br; echo "";

 

澳门新浦京娱乐游戏 1

3、使用目录函数

 代码如下

澳门新浦京娱乐游戏 2

①使用opendir,closedir()函数;

 function uploadfile($file) {
        $destinationpath = “./upload/”;
        if (!file_exists($destinationpath)){
            mkdir($destinationpath , 0777);     }
        //重命名
        $filename = date(‘ymdhis’) . ‘_’ .
iconv(‘utf-8’ , ‘gb2312’ ,
basename($file[‘name’]));
        if (move_uploaded_file($file[‘tmp_name’], $destinationpath
. $filename)) {         return iconv(‘gb2312’ , ‘utf-8’ , $filename);
        }     return ”;
}

澳门新浦京娱乐游戏 3

Upload directory is $current_dir"; echo "Directory Listing:

多文件上传的原理也差不多,下面看个实例

3、PHP的文件上传及资源指令

  • $file

 

file_uploads(boolean)

“; closedir; //关闭目录; ?>

 代码如下

是否开启HTTP POST文件上传功能

②使用php的dir类

<form action=”fileclass.php” enctype=”multipart/form-data”
method=”post” id=”userfile”>
<table width=”350″ border=”0″ cellpadding=”0″ cellspacing=”5″>
  <tr>
    <td><input name=”userfile[]” type=”file” size=”30″
/></td>
  </tr>
  <input type=”hidden” name=”MAX_FILE_SIZE” value=”1000000″ />
  <tr>
    <td><input name=”userfile[]” type=”file” size=”30″
/></td>
  </tr>
  <tr>
    <td><input name=”userfile[]” type=”file” size=”30″
/></td>
  </tr>
  <tr>
    <td><input name=”userfile[]” type=”file” size=”30″
/></td>
  </tr>
  <tr>
    <td><input name=”userfile[]” type=”file” size=”30″
/></td>
  </tr>
   <tr>
    <td><input name=”submitfile” type=”submit”
value=”确认上传文件”/> <input name=”resetfile” type=”reset”
value=”取消上传文件”/></td>
  </tr>
</table>

max_execution_time(integer)

Handle is $dir->handle"; echo "Upload directory is $current_dir"; echo "Directory Listing:

</form>

PHP脚本最长执行时间

  • $file

fileclass.php文件代码如下:

memory_limit(integer) 单位M

“; $dir->close(); //关闭目录 ?>

 

PHP脚本运行的最大内存

函数对文本名称进行字母表的排序方式

 代码如下

upload_max_filesize(integer) 单位M

Upload directory is $current_dir"; echo "Directory Listing in alphabetical order,ascending:

<?php
class more_file_upload{
 const FILE_PATH=’../filehandle/uploadfile/’;
 var $file_type;
 var $file_type_array;
 var $file_type_string;
 var $file_name;
 var $file_size;
 var $file_tmp_name;
 var $file_error;
 var $handledate;
 static $totalsize=0;

PHP上传文件的最大尺寸

  • $file1

 function
__construct($file_name,$file_error,$file_size,$file_tmp_name,$file_type){   
  $this->handledate=date(‘m-d-Y’);
  if (!empty($file_name)){
   $this->file_name=$file_name;
   $this->file_error=$file_error;
   $this->file_size=$file_size;
   $this->file_tmp_name=$file_tmp_name;
   $this->file_type=$file_type;
  
$this->file_type_array=array(‘text/plain’,’image/gif’,’image/jpg’,’text/html’,’image/pjpeg’,’image/png’,’application/msword’,’application/pdf’);
  
  
$this->show_execute_message($this->file_error,$this->file_name,$this->file_type,$this->file_size);
  }
 }
 
 function __destruct(){
  $this->file_name = NULL;
  $this->file_error = NULL;
  $this->file_size = NULL;
  $this->file_tmp_name = NULL;
  $this->file_type = NULL;
  self::$totalsize = 0;
 }
 
 function
show_execute_message($smfileerror,$smfilename,$smfiletype,$smfilesize){
  if($smfileerror>0){
   switch ($smfileerror){
    case 1:
$smfilemessage='<strong>文件超过服务器的约定大小!</strong>’;break;
    case 2:
$smfilemessage='<strong>文件超过指定的文件大小!</strong>’;break;
    case 3:
$smfilemessage='<strong>文件只上传了部分!</strong>’;break;
    case 4: echo “$this->file_name
“.’文件上传失败!<br/>’;break;
   }
   self::__destruct();      
  }else{
  
$smfiletypeflag=array_search($smfiletype,$this->file_type_array);
   if($smfiletypeflag == false){
   
$smfilemessage='<strong>文件类型不对,请核实!</strong>’;
   self::__destruct(); 
   }else{
   
$resflag=$this->move_file($this->file_tmp_name,$this->file_name);
    if ($resflag == 1){
     $smfilemessage=’文件上传成功!’;
     self::$totalsize+=intval($smfilesize);
     self::__destruct();
    }else{
     $smfilemessage='<strong>文件上传失败!</strong>’;
     self::__destruct();
    }
   }
  }
   $smfilesize=$smfilesize/1024;
   $smfilesizeformat=sprintf(‘%01d’,$smfilesize);
   echo ‘<tr>
    <td align=”left” >’.$smfilename.'</td>
               <td align=”center” >’.$smfiletype.'</td>
               <td align=”center”
>’.$smfilesizeformat.'</td>
               <td align=”center” >’.$smfilemessage.'</td>
    </tr>’;   
 }
 
 function move_file($mvfiletmp,$mvfilename){          //移动文件
 
$mvfilenamearr=explode(‘.’,basename($mvfilename));
  $mvtime=mktime();
  $mvfilenamearr[0]=$this->rand_string(10).”$mvtime”;
  $mvfilename=implode(‘.’,$mvfilenamearr);

upload_tmp_dir(string)

“; ?>

  if (is_uploaded_file($mvfiletmp)){
   $uploadfile=self::FILE_PATH.”$mvfilename”;
   $result=move_uploaded_file($mvfiletmp,$uploadfile);
   return $result;
  } 
 }

上传文件存储的临时位置

获取当前目录的其他信息

 function rand_string($len, $chars =
‘ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789’){ //指定范围内随机提取字符
     $string = ”;
     for ($i = 0; $i < $len; $i++){
         $pos = rand(0, strlen($chars)-1);
         $string .= $chars{$pos};
     }
     return $string;
 }
}
echo ‘<table width=”90%” border=”1″ cellpadding=”0″ align=”center”
cellspacing=”2″>’;
  echo ‘<tr>
        <td align=”center” >文件名</td>
              <td align=”center” >文件类型</td>
              <td align=”center” >文件大小(KB)</td>
              <td align=”center” >执行结果</td>
             </tr>’;
for ($i=0;$i<count($_FILES[‘userfile’]);$i++){
 $filename[$i]=$_FILES[‘userfile’][‘name’][$i];
 $fileerror[$i]=$_FILES[‘userfile’][‘error’][$i];
 $filesize[$i]=$_FILES[‘userfile’][‘size’][$i];
 $filetmpname[$i]=$_FILES[‘userfile’][‘tmp_name’][$i];
 $filetype[$i]=$_FILES[‘userfile’][‘type’][$i];
 
 $filetemp=new
more_file_upload(“$filename[$i]”,”$fileerror[$i]”,”$filesize[$i]”,”$filetmpname[$i]”,”$filetype[$i]”);
}
echo ‘</table>’;
echo ‘<a href=”upfile.html”>继续上传</a> <a
href=”index.php”>返回首页</a>’;
?>

post_max_size(integer) 单位M

dirname:返回路径的目录部分;

HTTP POST数据的最大尺寸

basename:返回路径的名称部分;

4、$_FILES数组

disk_free_space:返回路径所在磁盘可以保存上传文件的容量;

$_FILES[‘userfile’][size]

①mkdir():创建目录;

获取上传文件的字节数

$oldumask = umask; //重置当前权限码mkdir; //创建目录umask; //恢复当前权限码

$_FILES[‘userfile’][‘type’]

②rmdir():删除目录;

获取上传文件的MIME类型,每种MIME类型都是由“/”分隔的主类型和子类型组成

rmdir;或rmdir;

$_FILES[‘userfile’][‘error’]

※要删除的目录必须是空目录;

获取上传文件的错误代码,0:无任何错误,文件上传成功;1:上传文件大小超出了PHP配置文件中upload_max_filesize选项限定的值;2:上传文件大小超出了HTML表单中MAX_FILE_SIZE指定的值;3:表示文件只被部分上传;4:表示没有上传任何文件。

4、与文件系统的交互

$_FILES[‘userfile’][‘name’]

while() !== false){ echo "".$file."
";}Details of file"; echo "File data"; echo 'File last accessed: '.date('j F Y H:i',fileatime."
"; //返回最近访问的时间戳 echo 'File last modifixed: '.date('j F Y H:i',filemtime."
"; //返回最近修改的时间戳 $user = posix_getpwuid; //返回用户标识uid echo 'File owner: '.$user['name']."
"; $group = posix_getgrgid; //返回组织标识gid echo 'File group: '.$group['name']."
"; echo 'File permissions: '.decoct."
"; //返回8位的权限码 echo 'File type'.filetype."
"; //返回文件类型 echo 'File size'.filesize."
"; //返回文件字节数 echo "File Tests"; echo 'is_dir?'. ? 'true':'false')."
"; echo 'is_executable?'. ? 'true':'false')."
"; //判断文件是否可执行; echo 'is_file?'. ? 'true':'false')."
"; echo 'is_link?'. ? 'true':'false')."
"; echo 'is_readable?'. ? 'true':'false')."
"; echo 'is_writable?'. ? 'true':'false')."
"; ?>

获取上传文件的原始名称,包含扩展名

chgrp:修改文件的分组;

$_FILES[‘userfile’][‘tmp_name’]

chmod:修改文件的权限;

获取上传文件的临时位置名称,这是存储在临时目录中所指定的文件名。

chown:修改文件的所有者;

5、文件上传函数

bool touch($filename,[int time,[ int
atime]]):创建一个文件(time指定创建时间戳,atime指定可选时间戳)

is_upload_file

unlink:删除一个文件

判断指定的文件是否是通过HTTP POST上传

copy($source_path,$destination_path):复制一个文件

bool is_upload_file(string $filename)

rename:重命名一个文件;

move_upload_file

①String exec(String command[ ,array result [ ,int result_value]])

将上传文件移至新位置

返回命名结果的最后一行,result变量可以返回字符组数,这些字符串代表输出的每一行,result_value获取返回代码;

bool move_upload_file(string $filename, string $destination)

②void passthru(String command[ ,int result_value])

注意:文件上传后,首先会存储于服务器的临时目录中,可以使用该函数将上传文件移动到新位置,与copy()和move()相比,它能检测并确保第一个参数filename指定的文件是否是合法上传的文件。

结果直接输出到浏览器;

6、错误信息描述

③String system(string command[ ,int return_value])

UPLOAD_ERR_OK{value=0}

输出结果到浏览器,返回命令结果的最后一行或false;

UPLOAD_ERR_INI_SIZE{value=1}

※在用户提交的数据包括执行命令的一部分,应该进行以下包装:

UPLOAD_ERR_FORM_SIZE{value=2}

system(escapeshellcmd;

UPLOAD_ERR_PARTIAL{value=3}

5、与环境变量交互

UPLOAD_ERR_NO_FILE{value=4}

phpinfo()函数:获取php的所有变量列表;

UPLOAD_ERR_NO_TMP_DIR{value=6}

以上所述是小编给大家介绍的PHP与服务器文件系统的简单交互,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

UPLOAD_ERR_CANT_WRITE{value=7}
澳门新浦京娱乐游戏 4

澳门新浦京娱乐游戏 5

二、文件下载

简单文件下载只需要使用HTML的链接标记,并将属性href的URL值指定下载的文件即可。这种方法只能处理一些浏览器不能识别的MIME类型文件。

澳门新浦京娱乐游戏 6

澳门新浦京娱乐游戏 7 为了提高安全性,不希望在a标签中给出文件链接,则必须向浏览器发送必要的头信息,我们可以使用如下代码。

澳门新浦京娱乐游戏 8
三、文件函数库

touch

设置文件的访问和修饰时间

bool touch(string $filename[, int $time[, int $time]])

copy

复制文件

bool copy(string $source, string $dest)

注意:移动文件请使用rename函数

file_put_contents

将一个字符串写入文件

int file_put_contents(string $filename, string $data[, int $flag[,
resource $content]])

file_get_contents

将整个文件读到字符串

string file_get_contents(string $filename[, bool user_include_path
[, resource $content[, int $offset[, int $maxlen]]]])

四、序列化与反序列化

serialize

序列化

string serialize(mixed $value)

注意:serialize()可处理除了resouce之外的任何类型。甚至可以serialize()那些包含了指向其自身引用的数组。

unserialize

反序列化

mixed unserialize(string $str)

澳门新浦京娱乐游戏 9

澳门新浦京娱乐游戏 10
● date

格式化一个本地时间/日期

string date(string format[, int timestamp]);

● getdate

取得日期/时间信息

array getdate([int timestamp]);

澳门新浦京娱乐游戏 11

澳门新浦京娱乐游戏 12
● microtime

返回当前Unix时间戳和微秒数

mixed microtime([bool get_as_float]);

● date_default_timezone_set

设置默认时区

bool date_default_timezone_set(string timezone_identifier);

● date_default_timezone_get

获取默认时区

string date_default_timezone_get(void);
三、字符函数库
strlen

获取字符串长度

int strlen(string $str);

strtolower

字符串转换为小写

string strtolower(string $str);

strtoupper

字符串转换为大写

string strtoupper(string $str);

ucfirst

首字母大写

string ucfirst(string $str);

ucwords

将每个单词的首字母转换为大写字母

string ucwords(string $str);

ltrim

从字符串开始的位置删除空格或其他字符

string ltrim(string $str [, string $charlist]);

rtrim

从字符串结束的位置删除空格或者其他字符

string rtrim(string $str[, string $chirlist]);

trim

从字符串开始和结束的位置删除空格或者其他字符

str_replace

字符替换

mixed str_ireplace(mixed $search, mixed $replace, mixed $subject, [int
$count]);

str_ireplace

字符替换

mixed str_ireplace(mixed $search, mixed $replace, mixed $subject, [int
$count]);

md5
计算字符串的MD5哈希

string md5(string $str[, bool $raw_output=false]);

strpos

返回一个字符在另一个字符第一次出现的位置

int strpos(string haystack, mixed needle[, int offset]);

发表评论

电子邮件地址不会被公开。 必填项已用*标注