阿里云新用户优惠

第七章 文件与目录访问操作

一、文件系统概述

  在任何计算机设备中,各种数据、信息、程序主要以文件的形式储存。一个文件通常对应着磁盘上的一个或多个存储单元,利用目录可以有效地对文件进行区分和管理。负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统,从系统角度来看,文件系统是对文件存储器空间进行组织和分配,负责文件的存储并对存入的文件进行保护和检索的系统,具体地说,它负责为用户建立文件,存入读出、修改、转储文件,控制文件的存取,当用户不再使用时删除文件等。

1、文件类型

  PHP是以UNIX的文件系统为模型的,因此在Windows系统中我们只能获得“file”,“dir”或者“unknown”三种文件类型。而在UNIX系统中,我们可以获得“block”、“char”、“dir”、“fifo”、“file”、“link”和“ unknown”7种类型,各种文件类型的详细说明如下所示。

文件类型 描述
block 块设备文件,如磁盘分区、光驱等
char 字符设备是指在I/O传输过程中以字符为单位进行传输的设备,如键盘、打印机等
dir 目录类型。目录也是文件的一种。
fifo 命名管道,常用于将信息从一个进程传递到另一个进程。
file 普通文件类型
link 符号链接,是指向文件指针的指针,类似windows中的快捷方式
unknown 未知类型
<?php
    echo filetype("test.txt");//输出:file
    echo filetype("images");//输出:dir
?>

2、文件属性

  在进行编程时,需要使用到文件的一些常见属性,如文件的大小、文件的类型、文件的修改时间、文件的访问时间和文件的权限等。PHP中提供了非常全面的用来获取这些属性的内置函数,如下所示。

文件类型 描述
file_existes($path|$filename) 检查文件或目录是否存在
filesize($filename) 获取文件的大小
is_readable($filename) 判断文件是否可读
is_writeable($filename) 判断文件是否可写
is_executable($filename) 判断文件是否可执行
filectime($filename) 获取文件的创建时间
fileatime($filename) 获取文件的最后访问时间
filemtime($filename) 获取文件的最后修改时间
stat($filename) 获取给定文件的大部分属性值,返回关于给定文件有用信息的数组
filetype($filename) 只读,返回文件的类型,如文件或文件夹
realpath($path) 返回文件的绝对路径
pathinfo($path) 以数组形式返回文件的路径和文件名信息
dirname($path) 返回文件相对于当前文件的路径信息
basename($path) 返回路径中的文件名部分
<?php
	$file = 'tang.txt';
	echo "<br>文件名:" .basename($file);   //echo "<br>文件名:".__FILE__;
	$patharr = pathinfo($file);
	echo "<br>文件扩展名:".$patharr['extension'];	
	echo "<br>文件属性:" . filetype ($file);
	echo "<br>路径:". realpath($file); 
	echo "<br>大小:" . filesize ($file);
	echo "<br>创建日期:" . date('Y-m-d H:i:s',filectime($file));
?>

二、目录的基本操作

常用目录操作函数

函数名 描述
mkdir(pathname) 新建一个指定的目录
rmdir(dirname) 删除目录,该目录必须为空
getcwd() 取得当前文件所在的目录
chdir(dirname) 改变当前目录
opendir(path) 打开目录,返回目录的指针
closedir($dir_handle) 关闭目录,参数为目录指针
readdir($dir_handle) 遍历目录
scandir(path, sort) 以数组形式遍历目录
rewinddir($dir_handle) 将目录指针重置到目录开头处

1、创建和删除目录

mkdir() - 新建一个指定的目录

mkdir(string $pathname, int $mode = 0777, bool $recursive = false): bool

  • 参数
    • pathname 目录的路径。
    • mode 默认的 mode 是 0777,意味着最大可能的访问权
      注意:
      mode 在 Windows 下被忽略。指定模式需要是八进制数,由四个数字组成,该数应以零打头。
    • recursive 允许递归创建由 pathname 所指定的多级嵌套目录。

组成 $mode 参数的四个数字的含义如下所示:

  • 第一个数字通常是 0;
  • 第二个数字规定所有者的权限;
  • 第三个数字规定所有者所属的用户组的权限;
  • 第四个数字规定其他所有人的权限。

$mode 参数中,除第一个数字外,其它三个数字的取值范围如下(如需设置多个权限,可以将对应权限的数字相加):

  • 1 => 执行权限;
  • 2 => 写权限;
  • 4 => 读权限。
<?php
    $dir = './test/ttt';
    if(is_dir($dir)){
        echo "该目录已存在!";
    }else{
        if(mkdir($dir,0777,true)) echo '目录创建成功!';
    }
?>
rmdir() - 删除目录

  同普通文件类似的,如果确认某个目录已经不会被使用了,那么就可以把这个目录删除。在 PHP 中可以使用 rmdir() 函数来删除指定的目录,该函数的语法格式如下所示:

rmdir(string $dirname): bool

  • 参数
    • $dirname 为要删除的目录路径。
    • 注意:使用 rmdir() 函数删除指定目录时,这个目录必须是空的,而且要有相应的权限。函数执行成功时返回 TRUE,执行失败则返回 FALSE,如果删除一个不为空的目录还会产生一个 E_WERNING 级别的错误。
<?php
$dir = './test';
if(is_dir($dir)){
    if(rmdir($dir)) echo '目录删除成功!';
}else{
    echo "目录不存在!";
}
//如果存在文件则 需要递归删除
function delDir($directory){  //自定义函数递归的函数整个目录
    if(file_exists($directory)){    
        if($dir_handle=@opendir($directory)){ 
            while($filename=readdir($dir_handle)){
                //var_dump($filename);
                if($filename!='.' && $filename!='..'){  //一定要排除两个特殊的目录
                    $subFile=$directory."/".$filename;  
                    if(is_dir($subFile)){  //如果是目录条件则成了
                        delDir($subFile);  //递归调用自己删除子目录
                    }
                    if(is_file($subFile)){  //如果是文件条件则成立
                        unlink($subFile);  //直接删除这个文件
                    }
                }
            } 
            closedir($dir_handle);//关闭目录资源
            rmdir($directory);//删除空目录
        }
    }
}
delDir("test");//调用delDir函数
?>

2、获取和更改当前工作目录

getcwd() — 取得当前工作目录
<?php
    echo getcwd() . "<br/>";
    echo dirname(__FILE__);
?>
chdir() — 改变目录
<?php
    echo getcwd()."<br>";
    @mkdir("./test1");
    @chdir('./test1');
    echo getcwd();
?>

3、遍历目录

<?php
    function readFileFromDir($dir)
    {
        if(!is_dir($dir)) return false;
        $handle=opendir($dir);          //打开目录
        while(($file=readdir($handle))!==false) 
        {
            if($file=='.'||$file=='..') //判断是否为.或..,默认都会有
            {
                continue;
            }
            $file=$dir.DIRECTORY_SEPARATOR.$file; // DIRECTORY_SEPARATOR系统分隔符 /、\
            if(is_file($file))                 //是文件就输出
            {
                print $file.'<br/>';
            }
            elseif(is_dir($file))  //如果为目录
            {
                readFileFromDir($file);          //递归查询
            }
        }
        closedir($handle);                 //关闭目录
    }
    $dir = '../test';
    readFileFromDir($dir);
    echo "<hr>";
    function readAllFileFromDir($dir)
    {
        if(!is_dir($dir)) return false;
        $dirs = scandir($dir, 1);
        foreach($dirs as $d){
            if($d =='.' || $d =='..'){
                continue;
            }
            $file = $dir.DIRECTORY_SEPARATOR.$d; // DIRECTORY_SEPARATOR系统分隔符 /、\
            if(is_file($file))                 //是文件就输出
            {
                print $file.'<br/>';
            }
            elseif(is_dir($file))  //如果为目录
            {
                readAllFileFromDir($file);          //递归查询
            }
        }
    }
    readAllFileFromDir($dir);
?>

三、文件的基本操作

1、文件的复制、移动和删除

语法 描述
copy(string $source, string $dest) 复制文件
unlink(string $filename) 删除文件
rename(string $oldname, string $newname) 重命名文件或目录
ftruncate(resource $handle, int $size) 将文件截断到给定的长度
is_file(string $filename) 判断给定文件名是否为一个正常的文件
copy() - 将一个文件复制到指定目录中
  • $source:源文件路径;
  • $dest:目标路径,如果文件存在,则会将其覆盖;
<?php
if(copy('./test/1.txt', './test2/2.txt')){
    echo '文件复制成功';
} else {
    echo '文件复制失败,源文件可能不存在';
}
?>
rename()- 重命名一个文件或者目录
  • 对于非空文件夹,只能在同一盘符下移动;
  • 对于空文件夹,rename() 可以在不同盘符间移动。但是目标文件夹的父目录必须存在;
  • 对于文件,rename() 也能在不同盘符之间移动。
<?php
if(file_exists('./test/1.txt'))  //判断源文件是否存在
{	  
    if(rename('./test/1.txt', './test1/2.txt')) //移动到当前路径并重命名为tang.txt
        echo '文件移动并重命名成功';
    else echo '文件移动失败';	
    // 移动文件夹
    // rename('./test', './test2');
    // rename('./test2', './test1');	
}
?>
  • $filename 为要删除的文件路径;
<?php    
    //删除文件示例
    unlink('./test.txt');    
?>

2、获取文件属性函数

<?php
    var_dump(pathinfo('test.txt'));
?>

3、文件操作的一般方法

  目录可以进行打开、读取、关闭、删除等操作,文件的操作与对目录的操作有类似之处,操作文件的一般方法有打开、读取、写入、关闭等。
PHP对文件操作的一般流程是:①打开文件。②读取或者写入文件。③关闭文件。这些操作都是通过相应的文件访问函数实现的。

fopen() - 打开文件

  PHP 中可以使用 fopen() 函数来打开文件或者 URL。如果打开成功,则返回文件指针资源;如果打开失败则返回 FALSE,该函数的语法格式如下所示: fopen(string $filename, string $mode)

  • 参数说明
    • $filename:为待打开文件的 URL,这个 URL 可以是文件所在服务器中的绝对路径,也可以是相对路径或者网络资源中的文件;
    • $mode:用来设置文件的打开方式(文件模式)。具体的值可以从下表中选取:
      model 描述
      r 以只读方式打开,将文件指针指向文件头。
      r+ 以读写方式打开,将文件指针指向文件头。
      w 以写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则创建该文件。
      w+ 以读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则创建该文件。
      a 以写入方式打开,将文件指针指向文件末尾。如果文件不存在则创建该文件。
      a+ 以读写方式打开,将文件指针指向文件末尾。如果文件不存在则创建该文件。
      x 创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则创建该文件。仅适用于本地文件。
      x+ 创建并以读写方式打开,其他的行为和 x 一样。
      c 只打开文件进行写入,如果文件不存在,则创建该文件。如果文件存在,不会清空文件内容,并将文件指针指向文件头。
      c+ 打开文件进行读写,如果文件不存在,则创建该文件。如果文件存在,不会清空文件内容,并将文件指针指向文件头。
<?php
    $file = fopen ("1.txt","r");
    $file = fopen ("https://www.php.net/","r");//以只读方式打开网站的首页文件
?>
fclose() - 关闭文件

  资源类型属于 PHP 的基本类型之一,一旦完成资源的处理,一定要将其关闭,否则可能会出现一些意料不到的错误。 函数 fclose() 可以关闭一个已打开的文件指针,成功时返回 TRUE,失败则返回 FALSE。函数的语法格式如下: fclose(resource $handle)
其中 $handle 为要关闭的文件指针,这个指针必须是有效,并且是通过 fopen() 或 fsockopen() 函数成功打开的。

<?php
    $handle = fopen("https://www.php.net/", "r");
    echo '文件指针关闭之前:';
    var_dump($handle);
    fclose($handle);
    echo '<br>文件指针关闭之后:';
    var_dump($handle);
?>

4、文件的读取

函数名 描述
readfile() 读入一个文件并写入到输出缓冲,出错则返回 FALSE
file() 将整个文件读入一个数组中,出错则返回 FALSE
file_get_contents() 将整个文件读入一个字符串,出错则返回 FALSE
fgets() 从文件指针中读取一行,出错则返回 FALSE
fgetss() 从文件指针中读取一行并过滤掉 HTML 和 PHP 标记,出错则返回 FALSE
fgetc() 从文件指针中读取一个字符,出错则返回 FALSE
fread() 从文件读取指定字节数的数据,出错则返回 FALSE
fread() - 读取文件(任意长度)

该函数的语法格式如下:
fread(resource $handle, int $length)
其中 $handle 为通过 fopen() 函数创建的文件资源;$length 为最多读取 $length 个字节。
fread() 函数可以从文件中读取指定长度的数据,当读取了 $length 个字节或者读取到了文件末尾(EOF)时函数会停止读取,并返回所读取到的字符串。如果读取失败则返回 FALSE。

<?php
    $filename = "./test.txt";
    $handle = fopen($filename, "r");
    $contents = fread($handle, '16');
    echo '从文件中读取 16 个字符长度:'.$contents.'<br>';
    rewind($handle);
    $contents = fread($handle, filesize($filename));
    echo '读取全部的文件内容:'.$contents;
    fclose($handle);                            
?>
fgets() - 用于一次读取一行数据

函数的语法格式如下:
fgets(resource $handle[, int $length])
其中参数 $handle 是被打开的文件;参数 $length 为可选参数,用来设置读取的数据长度。函数能够实现从指定文件 $handle 中读取一行并返回长度最大值为 $length-1 个字节的字符串。在遇到换行符、EOF 或者读取了 $length-1 个字节后停止。如果忽略 $length 参数,则默认读取 1k(1024字节)长度。

<?php
    $handle = @fopen("./test.txt", "r");
    if ($handle) {
        while (($info = fgets($handle, 1024)) !== false) {
            echo $info.'<br>';
        }
        fclose($handle);
    }                                
?>
fgetc() - 从文件中读取一个字符

  在对某一个字符进行查找、替换时,就需要有针对性地对某个字符进行读取,在 PHP 中可以使用 fgetc() 函数实现此功能。该函数语法格式如下:
fgetc(resource $handle)
其中参数 $handle 为使用 fopen() 或 fsockopen() 成功打开的文件资源。

  • 注意:
    • fgetc() 函数可能返回布尔值 FALSE,也可能返回等同于 FALSE 的非布尔值。所以应该使用===运算符来测试此函数的返回值。
    • fgetc() 函数可安全用于二进制对象,但不适用于读取中文字符串,因为一个中文通常占用 2~3 个字符。
<?php
    header("Content-Type: text/html;charset=utf-8");    //设置字符编码
    $handle = fopen('./test.txt', 'r');                 //打开文件
    if (!$handle) {                                     //判断文件是否打开成功
        echo '文件打开失败!';
    }
    while (false !== ($char = fgetc($handle))) {        //循环读取文件内容
        echo $char;
    }
    fclose($handle);                                    //关闭文件
?>
file_get_contents() - 将文件读入一个字符串

函数的语法格式如下:
file_get_contents(string $filename)

  • 参数说明如下:
    • $filename:要读取的文件的名称;
<?php
    $file = 'test.txt';
    $filestr = file_get_contents($file);
    if($filestr){
      echo $filestr;
    }else{
      echo '读取失败!';
    }
?>
file() - 把整个文件读入一个数组中

file() 函数会将文件的内容按行存放到数组中(包括换行符在内)。如果成功则返回这个数组,失败则返回 FALSE。file() 函数的语法格式如下:
file(string $filename[, int $flags = 0])

  • 参数说明如下:
    • $filename:要读取的文件名称或路径;
    • $flags:可选参数,flags 可以是以下一个或多个常量:
    • FILE_USE_INCLUDE_PATH:在 include_path 中查找文件;
    • FILE_IGNORE_NEW_LINES:在数组每个元素的末尾不要添加换行符;
    • FILE_SKIP_EMPTY_LINES:跳过空行。
<?php
    $file = 'test.txt';
    $arr = file($file, FILE_IGNORE_NEW_LINES);
    $arr2 = file($file);
    echo '<pre>';
    var_dump($arr);
    var_dump($arr2);
?>
readfile() - 读取全部文件并输出到缓冲

readfile() 函数用于读取一个文件并将其写入到输出缓冲,同时返回从文件中读入的字节数。如果出错则返回 FALSE,该函数的语法格式如下:
readfile(string $filename[, bool $use_include_path = false])

  • 参数说明如下:
    • $filename:要读取的文件名或文件路径;
    • $use_include_path:可选参数,用来设定是否想要在 include_path 中搜索该文件,默认为 FALSE;
<?php
    $file = 'test.txt';
    $info = readfile($file);

    //常用于浏览器下载
    $file_Size = filesize($file);
    $downname = $file;
    header("Content-type:application/octet-stream");
    header("Accept-Ranges:bytes");
    header("Accept-Length:".$file_Size);
    header("Content-Disposition: attachment; filename=".$downname);
    readfile($file);
?>

5、文件的写入和追加

文件在写入前需要打开文件,如果文件不存在则先要创建它。在PHP中没有专门用于创建文件的函数,一般可以使用fopen()函数来创建,文件模式可以是“w”、“w+”、“a”、“a+”。

fwrite() - 将字符串写入到文件中

fwrite(resource $handle, string $string[, int $length])

  • 参数说明如下:
    • $handle:待写入的文件,是由 fopen() 创建的 resource(资源);
    • $string:要写入的字符串;
    • $length:可选参数,用来设定要写入的字节数。
    • fwrite() 函数可以把 $string 的内容写入文件指针 $handle 处。 如果指定了 $length,当写入了 $length 个字节或者写完了 $string 以后,写入就会停止。函数执行成功,会返回写入的字节数,执行失败,则返回 FALSE。
    • 如果以写入方式“w”打开文件,写入的数据将覆盖旧数据,如果不想覆盖之前的数据而将新数据添加到文件末尾,可以使用追加模式“a”来打开文件。
<?php
    $fp = fopen('test.txt', 'w');
    fwrite($fp,'这是写入的一行话\n');
    fwrite($fp,'最多写入12个字符\n',12);
    fclose($fp);
    echo "<pre>";
    print_r(file('test.txt'));
?>

写入后文件指针指向了文件末尾,要读取文件内容的话,需要先将指针移回文件开头。

<?php
    $fp=fopen("new.txt","w+");	
    fwrite($fp,'这是写入的一行话\n\r');
    rewind($fp);	                    //将指针指向文件开头
    $str=fread($fp,20);                //读取文中前20个字符保存到$srt中
    echo $str;
    fclose($fp);
?>
file_put_contents - 将字符串写入到文件中

语法格式如下:
file_put_contents(string $filename, mixed $data[, int $flags = 0])

  • 参数说明如下:
    • $filename:要被写入数据的文件名;
    • $data:要写入的数据,可以是字符串、一维数组或者资源等类型;
    • $flags:可选参数,它的值可以是以下几种(可以使用|运算符组合使用):
      • FILE_USE_INCLUDE_PATH:在 include 目录里搜索 $filename。
      • FILE_APPEND:如果文件 $filename 已经存在,追加数据而不是覆盖。
      • LOCK_EX:在写入时获得一个独占锁。
<?php
  $file = 'test.txt';
  echo "<pre>写入前:";
  echo file_get_contents($file).'<br>';
  $arr = [
    'php官网',
    'https://www.php.net/'
  ];
  file_put_contents($file, $arr, FILE_APPEND|LOCK_EX);
  echo '写入后:'.file_get_contents($file);
?>

四、文件的上传与下载

1、相关设置

php.ini文件设置
参数 描述
file_uploads 值为on,表明服务器支持文件上传,否则不支持
upload_tmp_dir 上传文件的临时目录。默认情况下是注释,删除行开头的分号即可启动,文件在成功上传之前首先被保存在该目录下
upload_max_filesize 服务器允许上传文件的最大值
#配置php.ini文件 (以上传500M以下大小的文件为例) 
#查找以下选项并修改
file_uploads = On ;打开文件上传选项 
upload_max_filesize = 500M ;上传文件上限
post_max_size = 500M ;POST方法可以接受的信息最大量,该参数的值要大于等于upload_max_filesize
max_execution_time = 1800 ; 脚本最大执行时间,默认30秒
max_input_time = 1800 ; 页面接收数据所需的最大时间,默认60秒
memory_limit = 128M ; 脚本可以分配的最大内存量 (128MB)内存上限
$_FILES 全局变量

全局变量$_FILES存储的是上传文件的相关信息,该变量是一个二维数组,其存储的信息如下所示:

元素名 描述
$_FILES[filename][’name'] 上传文件的名称
$_FILES[filename][‘size’] 上传文件的大小,单位为字节
$_FILES[filename][’temp_name'] 上传文件存储的临时目录
$_FILES[filename][’type'] 上传文件的类型
$_FILES[filename][’error'] 上传文件的结果,0是上传成功

2、文件上传

PHP主要使用move_uploaded_file()函数以及全局变量$_FILE来实现文件上传。 move_uploaded_file(string $filename, string $destination)

  • 参数说明:
    • $filename 为上传文件的文件名;
    • $destination 为文件要移动到的位置。
① 上传单个文件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>PHP文件上传</title>
</head>
<body>
    <form action="" method="post" enctype="multipart/form-data">
        <input type="file" name="upfile">
        <input type="submit" value="上传">
    </form>
</body>
</html>
<?php
    if(!empty($_FILES)){
        $tmpname   = $_FILES['upfile']['tmp_name'];     // 临时文件名称
        $name      = $_FILES['upfile']['name'];         // 文件的原名称
        $path      = './uploads';                       // 上传目录
        $file_name = date('YmdHis').rand(100,999).$name;// 避免文件重名,更改文件名称
        if(move_uploaded_file($tmpname, $path.'/'.$file_name)){
            echo $name." 上传成功!";
        }else{
            echo $name." 上传失败!";
        }
    }
?>
② 上传多个文件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>PHP文件上传</title>
</head>
<body>
    <form action="" method="post" enctype="multipart/form-data">
        <input type="file" name="upfile[]"><br>
        <input type="file" name="upfile[]"><br>
        <input type="file" name="upfile[]"><br>
        <input type="submit" value="上传">
    </form>
</body>
</html>
<?php
    if(!empty($_FILES)){
        $tmpname = $_FILES['upfile']['tmp_name'];
        $name = $_FILES['upfile']['name'];
        $path = './uploads';
        for ($i=0; $i < count($tmpname); $i++) {
            $file_name = date('YmdHis').rand(100,999).$name[$i];
            if(move_uploaded_file($tmpname[$i], $path.'/'.$file_name)){
                echo $name[$i].' 上传成功!<br>';
            }else{
                echo $name[$i].' 上传失败!<br>';
            }
        }
    }
?>

3、文件下载

① 通过url地址下载

在网页中可以通过链接下载的格式,如: <a href=”源文件路径”>点击下载</a> 但这种方式安全性不高,很容易暴露了文件所在的路径,可能会有安全隐患。但要实现安全的文件下载,在PHP中可以使用header()和readfile()两个函数来完成。

② 数据流下载

header()函数的作用是向浏览器发送正确的HTTP报头,报头指定了网页内容的类型、页面的属性等信息。header()函数的功能有页面跳转、指定网页内容、文件下载等,下面只介绍文件下载功能。 header()文件下载功能,需要结合readfile()函数可以下载将要浏览的文件,示例如下:

<?php
    $file = 'test.txt';
    $file_Size = filesize($file);
    $downname = $file;
    header("Content-type:application/octet-stream");
    header("Accept-Ranges:bytes");
    header("Accept-Length:".$file_Size);
    header("Content-Disposition: attachment; filename=".$downname);
    readfile($file);
?>

五、综合案例

1、利用PHP文件上传的功能实现提交“PHP程序设计作业”的页面

<html>
<head>
    <meta http-equiv="Content-Language" content="zh-cn">
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>提交PHP作业</title>
</head>
<body>
    <form method="POST" enctype="multipart/form-data" action="uploadfile.php">
        <p align="center"><b>欢迎使用PHP程序设计作业上交系统</b></p>
        PHP程序设计作业文件(*.php)
        <input type="file" name="up_file"><br/>
        <input type="submit" value="上交" name="B1">
        <input type="reset" value="取消" name="B2">
    </form>
</body>
</html>
<?php
   header("Content-Type:text/html;charset=gb2312");
   //判断是否有上传文件
   if(!empty($_FILES["up_file"]["name"]))
   {
        //获取上传文件的临时文件名
        $file_name=$_FILES["up_file"]["tmp_name"];
        //上传的目录及新文件名
        $destination="./php_file/".$_FILES["up_file"]["name"];
        if($_FILES["up_file"]["size"]>1000000)
            echo "文件太大";
        else
        {
            //上传文件
            move_uploaded_file($file_name, $destination);
            //读取文件并显示在文本区内
            echo "<textarea rows=10 name=S1 cols=80 style='font-size: 12pt';>",
            file_get_contents($destination);
            echo  "</textarea>";
        }
   }
?>

关注微信公众号,与我交流吧~

分享