主要内容:

  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,文件上传先到这里

PHP学习7——文件系统的更多相关文章

  1. QT学习之文件系统读写类

    #QT学习之文件系统读写类 QIODevice QFileDevice QBuffer QProcess 和 QProcessEnvironment QFileDevice QFile QFileIn ...

  2. Linux相关学习笔记-文件系统

    在Linux的文件系统中, 相应的文件都按其作用分门别类地放在相关的目录中 以下是最近整理学习的一些, linux中的文件存放 /bin 二进制可执行命令 /dev 设备特殊文件  // 外部设备文件 ...

  3. Linux学习笔记-文件系统和基本命令

    目录 分区设备文件名 分区 挂载 文件目录 文件处理命令 目录处理命令 硬件设备文件名 IDE硬盘 /dev/hd[a-d] USB硬盘 /dev/sd[a-p] 光驱 /dev/cdrom或者/de ...

  4. linux学习--1. 文件系统

    文件目录结构 闲话篇: linux我也是最近才开始学,写随笔是为分享学习经验的同时也留着供自己以后来参考.因为linux一切皆文件的基本哲学思想.所以我决定从文件目录开始写. 正文: 首先linux文 ...

  5. Node.js学习(10)----文件系统fs

    fs 模块是文件操作的封装,它提供了文件的读取.写入.更名.删除.遍历目录.链接等 POSIX 文件系统操作.与其他模块不同的是,fs 模块中所有的操作都提供了异步的和同步的两个版本, 例如读取文件内 ...

  6. Linux学习之文件系统常用命令(七)

    Linux文件系统常用命令 目录 df命令 du命令 fsck命令 dump2fs命令 df命令 df命令 统计文件系统的占有情况,分区用了多少空间,还剩多少空间 df [选项] [挂载点] 选项: ...

  7. ZooKeeper学习之文件系统的布局和格式

    本文来谈谈快照文件,事务日志文件在文件系统中是如何存放的. 写事务日志是事务处理的关键步骤,所以高度建议在一个独立的磁盘上存储.快照不需要在独立的磁盘存储,因为它们是由一个后台线程以懒汉式的(lazi ...

  8. 理解与学习linux 文件系统的目录结构

    1. linux文件系统的结构 linux文件系统是以一种树形结构存在,Linux的文件系统的入口就是/,所有的目录.文件.设备都在/之下,/就是Linux文件系统的组织者,也是最上级的领导者. 2. ...

  9. Linux运维学习笔记-文件系统知识体系总结

    文件系统知识总结 新买的硬盘要存放数据需要怎么做? 首先将硬盘装机做RAID,做完RAID后进行分区,分完区后格式化创建文件系统,最后存放数据. 硬盘的内外部结构: 物理形状: 接口类型: IDE(I ...

  10. Linux学习—导航文件系统

    与windows相同,Linux操作系统也是以被称之为分层目录结构的方式来组织文件的.这意味着文件是以树形结构的目录中进行组织的,该树形结构目录可能包含文件和其他目录.文件系统的第一个目录叫做根目录, ...

随机推荐

  1. 解决:The APR based Apache Tomcat Native library which allows optimal performance in production...

    tomcat日志apr报错引发的基于Tomcat Native加速Tomcat性能 tomact服务启动报错日志如下:息: The APR based Apache Tomcat Native lib ...

  2. java远程开关机

    最近,很多客户向我们反馈终端启动后异常的问题,因此,我自己做了一个远程开关的小工具,该工具的目的在于通过批量的方式来控制终端启动.其设计逻辑是通过服务端发送cmd指令 ,客户端接受并执行指令,把结果返 ...

  3. java 程序设计第一次作业

    public class Join{ public static void main(String args[]){ String s1=new String("hello"); ...

  4. js中apply详解

    学习http://www.cnblogs.com/delin/archive/2010/06/17/1759695.html 1.对象的继承,一般的做法是复制:Object.extend protot ...

  5. 一,Smarty模板技术/引擎——简介

    Smarty是一个使用PHP写出来的模板PHP模板引擎,它提供了逻辑与外在内容的分离,简单的讲,目的就是要使PHP程序员与美工分离,使用的程序员改变程序的逻辑内容不会影响到美工的页面设计,美工重新修改 ...

  6. IntelliJ IDEA 如何将一个 filename.java 文件直接运行

    IntelliJ IDEA 如何将一个 filename.java 文件直接运行 前言: ​ 出于考证需要,手头有许多 *.java 文件需要进行运行.然后出于对 JetBrains 全家桶的喜爱,选 ...

  7. 关于jxl的getCellFormat()方法获取表格样式----中文货币乱码

    File templateFile = getTempalte(client.getSc_shortName());//这里读取模板文件 WorkbookSettings set1 = new Wor ...

  8. Mybatis映射.xml文件报错

    MyBatis框架里面,在dao层进行测试,控制台显示错误是:必须为元素类型 "delete" 声明属性 "resultType" 相应的.xml文件的sql语 ...

  9. 【算法笔记】B1050 螺旋矩阵

    1050 螺旋矩阵 (25 分)   本题要求将给定的 N 个正整数按非递增的顺序,填入“螺旋矩阵”.所谓“螺旋矩阵”,是指从左上角第 1 个格子开始,按顺时针螺旋方向填充.要求矩阵的规模为 m 行  ...

  10. scikit-learn中predict_proba用法 (与predict的区别)

    predict_proba返回的是一个 n 行 k 列的数组, 第 i 行 第 j 列上的数值是模型预测 第 i 个预测样本为某个标签的概率,并且每一行的概率和为1. # conding :utf-8 ...