zoukankan      html  css  js  c++  java
  • PHP学习7——文件系统

    主要内容:

    1. 打开和关闭文件
    2. 文件类型
    3. 文件处理
    4. 目录处理
    5. 访问远程文件
    6. 文件锁定
    7. 文件上传

    数据除了可以存储在数据库中,我们主要的还是存储在文件中,而且存储在文件中更加的方便直接。

    打开和关闭文件

    • 打开fopen($filepath,$mode)
    • 关闭fclose($file)

    注意,我的test.txt文件和demo.php在同一个目录下

    demo.php

    <?php
    	//打开文件r只读,r+读写,打开成功返回true,否则false
    	$file=fopen("C:/xampp/htdocs/test.txt","r");//绝对路径
    	if($file){
    		echo "文件test.txt打开了<br/>";
    	}else{
    		echo "文件test.txt打开失败文件打开了<br/>";
    	}
    	
    	$file2=fopen("./test.txt","r");//相对路径
    	if($file2){
    		echo "文件test.txt打开了<br/>";
    	}else{
    		echo "文件test.txt打开失败<br/>";
    	}
    	
    	if(fclose($file)){
    		echo "文件test.txt成功关闭<br/>";
    	}
    	if(fclose($file2)){
    		echo "文件test.txt成功关闭<br/>";
    	}
    ?>
    

      输出

    文件test.txt打开了
    文件test.txt打开了
    文件test.txt成功关闭
    文件test.txt成功关闭
    

    文件类型

    无论是txt文件还是jpg文件,还是doc文件,都属于同一种文件类型,file

    文件夹是另外一种文件类型,dir

    文件类型:

    1. file普通文件
    2. dir目录类型
    3. char字符串设备,键盘,打印机
    4. block块设备,某个磁盘分区
    5. link快捷方式,指针的指针
    6. fifo管道,用于把一个进程传到另外一个进程
    7. unknow未知文件

    使用filetype($filename)判断文件的类型,返回字符串

    stat($filename)可以输出文件的大部分属性

    stat.php

    <?php	
    	print_r(stat("./test.txt"));
    ?>
    

      输出

    Array ( [0] => 2 [1] => 0 [2] => 33206 [3] => 1 [4] => 0 [5] => 0 [6] => 2 [7] => 12 [8] => 1533566405 [9] => 1533566414 [10] => 1533566405 [11] => -1 [12] => -1 [dev] => 2 [ino] => 0 [mode] => 33206 [nlink] => 1 [uid] => 0 [gid] => 0 [rdev] => 2 [size] => 12 [atime] => 1533566405 [mtime] => 1533566414 [ctime] => 1533566405 [blksize] => -1 [blocks] => -1 )
    

    文件处理

    readfile($filename)读取文件内容写入输出缓冲,并返回文件字符串大小,报错返回false

    fgets($filename)从文件指针读取一行,出错返回false

    fgetc($filename)从文件指针读取一个字符,出错返回false

    readfile.php

    <?php	
    	readfile("./test.txt");
    ?>
    

    test.txt

    输出

    这是一个测试 这是一个测试这是一个测试 这是一个测试这是一个测试 这是一个测试这是一个测试 这是一个测试这是一个测试 这是一个测试这是一个测试 这是一个测试这是一个测试
    

    fwrite($filename,$date)向文件中写入信息

    fwrite.php

    <?php
    	//使用@隐藏提示信息,@叫做错误控制运算符
    	$file=@fopen("./test.txt","r+");
    	echo $file."<br/>";
    	$num=fwrite($file,"今天是个好日子,心想的事儿都能成");
    	if($num){
    		echo "写入成功,写入了$num 字符";
    	}else{
    		echo "写入失败";
    	}
    ?>
    

    输出

    Resource id #3
    写入成功,写入了48 字符
    

    test.txt

    但是使用r+模式,会覆盖原先的内容,如果不想覆盖原先的内容,而是在原先基础上增加内容,应该使用追加模式,这里不研究。

    常用方法:

    • copy($source,$dest)复制文件到指定路径
    • rename($oldname,$newname)重命名文件
    • unlink($filename)删除文件
    • pathinfo($path,$options)返回文件的路径信息
    • realpath($path)返回文件的绝对路径
    • is_file($filename)判断是否是文件

    目录处理

     目录是一种特殊的文件类型

    判断是否是目录isdir($path)

    打开目录opendir($path)

    关闭目录closedir($path)

    dir.php

    <?php
    	$path="D:资料";
    	if(is_dir($path)){
    		//打开目录
    		$dir=opendir($path);
    		echo "文件打开成功<br/>";
    	}else{
    		echo "打开失败,程序退出<br/>";
    		exit();
    	}
    	closedir($dir);
    
    ?>
    

      输出

    文件打开成功
    

    操作目录方法:

    readdir($path)浏览目录,返回一个文件名

    mkdir($pathname)创建目录

    rmdir($pathname)删除目录

    chdir($pathname)改变目录

    dir_operate.php

    <?php
    	if(chdir("D:/")){
    		echo "切换到D:/<br/>";
    	}//成功返回1
    	if(mkdir("D:/test")){
    		echo "创建文件夹D:/test<br/>";
    	}//成功返回1
    	if(rmdir("D:/test")){
    		echo "删除文件夹D:/test<br/>";
    	}//成功返回1
    ?>
    

      输出

    切换到D:/
    创建文件夹D:/test
    删除文件夹D:/test

    访问远程文件

    PHP支持URL格式的文件调用,需要在php.ini中设置一下

    url_file.php

    <?php
    	$html=file_get_contents("http://www.baidu.com/");
    	echo $html;
    ?>
    

      输出

    文件锁定

    在向一个文件写入内容时,如果其他用户也修改这个文件,可能会造成冲突,为了防止冲突,使用flock()来锁定文件

    flock.php

    <?php
    	$file=fopen("C:/xampp/htdocs/test.txt","r+");
    	if(flock($file,LOCK_EX)){
    		echo "文件已经锁定,可以安全写入数据";
    	}else{
    		echo "文件未锁定,写入数据是不安全的";
    	}
    	fclose($file);
    ?>
    

      输出

    文件已经锁定,可以安全写入数据
    

    文件上传

    首先需要配置php.ini文件

    单文件上传

    使用move_upload_file($tmpname,$name)

    upload.php

    <html>
    	<form method="post" enctype="multipart/form-data">
    		<input type="file" name="upfile" />
    		<input type="submit" value="上传" />
    	</form>
    </html>
    
    <?php
    	$file=fopen("C:/xampp/htdocs/test.txt","r+");
    	if(!empty($_FILES)){
    		foreach($_FILES["upfile"] as $k=>$v){
    			echo "$k=>$v<br/>";
    		}
    	}else{
    		echo "没有上传文件";
    	}
    ?>
    

    未上传效果

    上传文件

    上传成功

     upload2.php

    <html>
    	<form method="post" enctype="multipart/form-data">
    		<input type="file" name="upfile" />
    		<input type="submit" value="上传" />
    	</form>
    </html>
    
    <?php
    	if(!empty($_FILES)){
    		$tmpname=$_FILES["upfile"]["tmp_name"];//文件临时名
    		$name=$_FILES["upfile"]["name"];//文件原名
    		move_uploaded_file($tmpname,$name)or die("文件上传失败,程序退出");
    		echo "文件上传成功";
    	}else{
    		echo "没有上传文件";
    	}
    ?>
    

      未上传

    上传

    文件已经上传到跟目录

    ok,文件上传先到这里

  • 相关阅读:
    element多选下拉框的坑
    滚动条样式全局修改
    element表格自带排序的坑
    c++学习
    HTTP与TCP的区别和联系
    JSP整理
    学习目标
    mysql操作
    JAVA Date、String、Calendar类型之间的转化
    后台数据类型接收问题总结
  • 原文地址:https://www.cnblogs.com/1906859953Lucas/p/9434233.html
Copyright © 2011-2022 走看看