php-对文件的基本操作1

1. php对文件的基本操作

1.1 概要

在程序运行时,程序本身和数据一般都存在内存中,当程序运行结束后,存放在内存中的数据被释放。如果需要长期保存程序运行所需的原始数据,或程序运行产生的结果,就必须以文件形式存储到外部存储介质上。文件一般指存储在外部介质上具有名字(文件名)的一组相关数据集合。用文件可长期保存数据,并实现数据共享。PHP是以UNIX的文件系统为模型的。因此在Windows系统中我们只能获得”file”、”dir”或者“unknown”三种文件类型。而在UNIX系统中,我们可以获得block、char、dir、fifo、file、link和unknown七种类型。可以使用函数filetype()获取文件的具体类型。语法:string filetype ( string filename )

1.2 Linux 七种文件格式说明

block
块设备文件,如某个磁盘分区,软驱,光驱CD-ROM
char

字符设备是指在I/O传输过程中以字符为单位进行传输的设备,如键盘、打印机等

dir

目录类型,目录也是文件的一种

fifo

命名管道,常用于将信息从一个进程传递到另一个进程

file

普通文件类型,如文本文件或可执行文件等

link

符号链接,是指向文件指针的指针。类似Windows中的快捷方式

unknown
顾名思义

1.3 几个简单的判断函数

0x00:

is_dir( ) – 判断给定文件名是否是一个目录语法结构:bool
is_dir(名称)返回类型:文件名存在并且是一个目录则返回 true,否则返回
falseis_executable( ) – 判断给定文件名是否可执行语法结构:
bool is_executable(名称)返回类型:如果文件存在且可执行则返回 true ,否则返回 false 。is_file( ) – 判断给定文件名是否为一个正常的文件语法结构:
bool is_file(名称)返回类型:如果文件存在且为正常的文件则返回 true 。
is_link( ) – 判断给定文件名是否为一个符号连接语法结构:
bool is_link(名称)返回类型:如果文件存在并且是一个符号连接则返回 true。
is_readable( ) – 判断给定文件名是否可读语法结构:
bool is_readable(文件名称)返回类型:如果文件存在并且可读则返回 true 。
is_writable( ) – 判断给定的文件名是否可写语法结构:
bool is_writable(文件名称)返回类型:如果文件存在并且可写则返回 true 。

0x01
  • file_exists( )

检查文件或目录是否存在

  • filesize()

取得文件大小

  • is_readable()

判断文件是否可读
is_writable()

判断文件是否可写

  • is_executable()

判断文件是否可执行

  • filectime()

获取文件的创建时间

  • filemtime()

获取文件的修改时间

  • stat()

获取文件大部分属性

fp:

//filetype("1.jpg");//当前路径用./或者不写;上一级用../;
    //echo filetype("./1.jpg");  //判断./1.jpg是什么  ,返回file,是文件 
    //echo filetype("./touxiang"); //判断./code是什么,返回dir是文件夹
    //echo is_dir("touxiang"); //判断code是不是目录文件夹,是返回1
    //echo is_file("1.jpg"); //判断1.jpg是不是文件,是返回1
  //date('Y-m-d H:i:s',time());//显示当前日期时间
    //date_default_timezone_set('PRC'); //如果时间不对,可能是时区不对,需要加上这个改为东八区区时
    //echo date("Y-m-d H:i:s",fileatime("1.jpg")); //获取上次的访问时间
    //echo date("Y-m-d H:i:s",filectime("1.jpg"));//获取文件的创建时间
    //echo date("Y-m-d H:i:s",filemtime("1.jpg"));//获取文件的修改时间
    //echo filesize("1.jpg");//获取文件大小(字节),如果想转换成KB需要在后面“/1024”
    //echo file_exists("1.jpg");//判断1.jpg是否存在,存在返回1
    //filetype("1.jpg");//当前路径用./或者不写
    //echo filetype("/wamp");//在php单纯“/”代表磁盘的根目录,如D盘
    //echo "<img src='/weixin/1.jpg' />";//如果是网页页面中的“/”则代表服务器的根目录
    //echo $_SERVER['DOCUMENT_ROOT'];//找网站的根目录
    //echo basename("./touxiang/7.jpg",".jpg");//从路径中返回文件名+扩展名,如果第二个参数写上文件扩展名,则只返回文件名
    //echo dirname("./contact/3.jpg");//从路径中返回目录名,输出(./contact)
    //print_r(pathinfo("./weixin/touxiang/2.jpg"));//返回路径所有信息,返回类型是数组,输出(Array ( [dirname] => ./weixin/touxiang [basename] => 2.jpg [extension] => jpg [filename] => 2 ) )
    //echo realpath("1.jpg");//将相对路径转换为绝对路径,输出(D:\wamp\www\weixin\1.jpg )
    //mkdir("./touxiang/suiji");//创建文件夹(目录):在touxiang文件下创建suiji文件夹
    //rmdir("./touxiang/suiji");//删除文件夹(目录):删除touxiang文件夹下的suiji文件夹,只能删除空文件夹
    //rename("./touxiang/name","./suiji");//移动或重命名:将touxiang目录下的name文件夹重命名为suiji并移动到当前目录下
    //print_r(glob("./*"));//获取该目录下所有文件或查找该目录下某一文件:Array ( [0] => ./1.jpg [1] => ./chuantouxiang.php [2] => ./denglu.php [3] => ./jquery-1.11.2.min.js [4] => ./mydbda.php [5] => ./sanjichuli.php [6] => ./suiji [7] => ./touxiang [8] => ./zhuce.php [9] => ./zhucechuli.php ) 
    
    /*$dir = opendir("./touxiang");//打开目录资源:    
    //echo readdir($dir);
    //echo readdir($dir);
    //echo readdir($dir);
    //echo readdir($dir);
    //echo readdir($dir);//...1.jpg10.jpg11.jpg 
    while($filename = readdir($dir))
    {
        echo $filename."<br>";//读取该"./touxiang"目录下所有文件,每读一条,指针向下走一个,注意:第一个.是前面目录,第二个是..上一级目录。
    }
    echo"******************************";
    rewinddir($dir);//返回指针
    while($filename = readdir($dir))
    {
        echo $filename."<br>";//读取该"./touxiang"目录下所有文件
    }
    closedir($dir);//关闭目录资源:*/

1.4 文件的基本操作

1.4.1 常见的路径

$LunixPath="/var/www/html/index.php";

$winPath=“C:\Appserv\www\index.php”;

$winPath2=“C:/Appserv/www/index.php”;

操作函数:

basename – 返回路径中的文件名部分
dirname – 返回路径中的目录部分

fp:

        $path = "/home/httpd/html/index.php";
        $file = basename($path);		// $file值:"index.php"$file = basename($path, ".php"); 	// $file值:"
        index "$file = dirname($path);   	 // $file值:"/home/httpd/html"
1.4.2 遍历目录实例
    $num=0;                     			//用来统计子目录和文件的个数
    $dirname='phpMyAdmin';      		//定义一个目录名
    $dir_handle=opendir($dirname); 		//用opendir打开目录
    //将遍历的目录和文件名使用表格格式输出
    while($file=readdir($dir_handle)) {  	//使用readdir循环读取目录里的内容
        $dirFile=$dirname."/".$file;    		//追加目录名
        echo "文件名: ".$file." | ";                 	//显示文件名
        echo "大小: ".filesize($dirFile)." | ";         //显示文件大小
        echo "类型: ".filetype($dirFile)." | ";         //显示文件类型
        echo "创建时间: ".date("Y/n/t",filectime($dirFile))."<br/>";
        $num++;
    }
    closedir($dir_handle); 			//关闭文件操作句柄
    echo ‘在<b>.$dirname.</b>目录下共有文件<b>'.$num.'</b>个';
1.4.3 文件的打开与关闭

fopen – 打开文件或者 URL
语法:resource fopen ( string filename, string mode [, bool use_include_path [, resource zcontext]] )
filename参数需要提供要被打开文件的URL。这个URL可以是脚本所在的服务器中的绝对路径,也可以是相对路径,还可以是网络资源用的文件。
mode 参数指定了所要求到该流的访问类型,(强烈建议附加b模式)。
如果也需要在 include_path中搜寻文件的话,可以将可选的第三个参数 use_include_path 设为 ‘1’ 或 TRUE。
如果打开失败,本函数返回 FALSE。
fclose – 关闭一个已打开的文件指针
语法:bool fclose ( resource $handle )
将 handle 指向的文件关闭。 成功时返回 TRUE, 或者在失败时返回 FALSE.

fp:

$handle = fopen("/home/rasmus/file.txt", "r");
//访问文档根目录下的文件,也以只读模式打开
$handle = fopen(“{$_SERVER['DOCUMENT_ROOT']}/data/info.txt", "r");

//在 Windows 平台上,转义文件路径中的每个反斜线,或者用斜线,
  以二进制和只写模式组合
$handle = fopen("c:\\data\\file.gif", "wb");

//使用相对路径打开file.txt文件,选择只读模式,并返回资源$handle
$handle = fopen("../data/info.txt", "r");

//打开远程文件, 使用HTTP协议只能以只读的模式打开
$handle = fopen("http://www.example.com/", "r");

//使用FTP协议打开远程文件,如果FTP服务器可写,则可以以写的模式打开
$handle = fopen("ftp://user:password@example.com/somefile.txt", "w");
1.4.4 fwrite -- 写入文件(可安全用于二进制文件)

语法:int fwrite ( resource handle, string string [, int length] )fwrite() 把 string 的内容写入 文件指针 handle 处。 如果指定了 length,当写入了 length 个字节或者写完了 string 以后,写入就会停止,视乎先碰到哪种情况。返回写入的字符数,出现错误时则返回 FALSE 。

fp:

$file = fopen("test.txt","w");
echo fwrite($file,"Hello World. Testing!");
fclose($file);

running
在这里插入图片描述

1.4.1 读取文件内容
    //从文件中读取指定字节数的内容存入到一个变量中
    $filename = "data.txt";                 	 //将本地文件名保存在变量中
    $handle = fopen($filename, "r") or die("文件打开失败");  //以只读的方式打开文件
    $contents = fread($handle, 100);  //读取前100个字节;全部:filesize($filename)
    fclose($handle);                             //关闭文件资源
    echo $contents;                             //将从文件中读取的内容输出
    
    //从文件中读取全部内容存入到一个变量中,每次读取一部分,循环读取
    $filename = "c:\\files\\somepic.gif";//二进制文件的文件
    $handle = fopen ($filename, "rb") or die("文件打开失败");     
				 //以只读的方式,模式加了’b’
    $contents = "";                             
    while (!feof($handle)) {                  //使用feof()判断文件结尾
        $contents .= fread($handle, 1024);     //每次读取1024个字节
    }
    fclose($handle);        		 //关闭文件资源
    echo $contents;         		 //将从文件中读取的全部内容输出

在这里插入图片描述

fp2:

$filename = "D:\phpStudy\WWW\something.txt";
    $handle = fopen($filename, "r");//读取二进制文件时,需要将第二个参数设置成'rb'
    
    //通过filesize获得文件大小,将整个文件一下子读到一个字符串中
    $contents = fread($handle, filesize ($filename));
    fclose($handle);
1.4.5访问远程文件

如果需要访问远程文件,必须在PHP的配置文件中激活“allow_url_fopen”选项,才能使用fopen( )函数打开运程文件。而且还要确定其他服务器中的文件是否访问权限,如果使用PHP协议对远程文件进行链接,只能以“只读”模式打开。如果需要访问的远程FTP服务器中,对所提供的用户开启了“可写”权限,则使用FTP协议链接远程的文件时,就可以使用“只写”或“只读”模式打开文件。但不可以使用“可读可写”的模式。
使用PHP访问远程文件就像访问本地文件一样,都是使用相同的读写函数处理。
$file=fopen(“http://www.lampbrother.com/”,”r”) or die(“打开远程文件失败!!”);
$file=fopen(“ftp://user:password@ftp.lampbrother.net/path/to/file”,”w”);

fp:

    $file = fopen ("http://www.baidu.com/rebot.txt", "r") or die("打开远程文件失败!!");  
    while (!feof ($file)) {    //循环从文件中读取内容
        $line = fgets ($file, 1024);                                //每读取一行
        //如果找到远程文件中的标题标记则取出标题,并退出循环,不在读取文件
        if (preg_match("/<title>(.*)<\/title>/", $line, $out)) {    //使用正则匹配标题标记
            $title = $out[1];    //将标题标记中的标题字符取出
            break;                 //退出循环,结束远程文件读取
        }
    }
    fclose($file);                 //关闭文件资源
    echo $title;                  //输出获取到的远程网页的标题

在这里插入图片描述

1.5 文件上传

这是老朋友了,先来个html表单压压惊

<html>
    <head><title>文件上传</title></head>
    <body>
        <form action="upload.php"  method="post"  enctype="multipart/form-data">
            <input type="hidden" name="MAX_FILE_SIZE" value="1000000">
            选择文件:<input type="file" name="myfile">
            <input type="submit" value="上传文件">
        </form>
    </body>
</html>

注意事项:

POST方法:
表单最常用的功能,向目标页面传递变量,我们在上传文件的时候,会在表单中设置相应的属性,来完成文件的传递
enctype=“multipart/form-data”
这样服务器就会知道,我们要传递一个文件,这样服务器可以知道上载的文件带有常规的表单信息。
MAX_FILE_SIZE
此字段必须在文件输入字段之前,控制最大的传递文件的大小(字节)

设置浏览器文件输入浏览按钮

fp:

$allowtype = array("gif", "png", "jpg");   //设置充许上传的类型为gif, png和jpg
    $size = 1000000;                           //设置充许大小为1M(1000000字节)以内的文件
    $path = "./uploads";                       //设置上传后保存文件的路径
    
    //1. 判断文件是否可以成功上传到服务器,$_FILES['myfile']['error'] 为0表示上传成功
    if($_FILES['myfile']['error'] > 0) {    
        echo '上传错误: ';
        switch ($_FILES['myfile']['error']) {
            case 1:  die('上传文件大小超出了PHP配置中的约定值:upload_max_filesize');  
            case 2:  die('上传文件大小超出了表单中的约定值:MAX_FILE_SIZE');  
            case 3:  die('文件只被部分上载'); 
            case 4:  die('没有上传任何文件'); 
            case 6:  die('找不到临时文件夹');
            case 7:  die('文件写入失败');
            default: die('末知错误');
        }
    } 
    //2. 判断上传的文件是否为充许的文件类型,通过文件的后缀名
    $hz = array_pop(explode(".", $_FILES['myfile']['name']));

if ($_FILES["file"]["error"] > 0)
  {
  echo "Error: " . $_FILES["file"]["error"] . "<br />";
  }
else
  {
  echo "Upload: " . $_FILES["file"]["name"] . "<br />";
  echo "Type: " . $_FILES["file"]["type"] . "<br />";
  echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
  echo "Stored in: " . $_FILES["file"]["tmp_name"];
  }

在这里插入图片描述

if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Error: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br />";
    echo "Type: " . $_FILES["file"]["type"] . "<br />";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "Stored in: " . $_FILES["file"]["tmp_name"];
    }
  }
else
  {
  echo "Invalid file";
  }

在这里插入图片描述

1.5.2 文件下载

$filename="./upload/aa.png";
b a s e n a m e = p a t h i n f o ( basename=pathinfo( basename=pathinfo(filename);
header(“Content-Type: image/png”); //指定下载文件类型的
header(“Content-Disposition:attachment;filename=”. b a s e n a m e [ " b a s e n a m e " ] ) ; / / 指 定 下 载 文 件 的 描 述 信 息 h e a d e r ( " C o n t e n t − L e n g t h : " . f i l e s i z e ( basename["basename"]); //指定下载文件的描述信息 header("Content-Length:".filesize( basename["basename"]);//header("ContentLength:".filesize(filename)); //指定文件大小的
readfile($filename);//将内容输出,以便下载。

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值