PHP学习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
文件类型:
- file普通文件
- dir目录类型
- char字符串设备,键盘,打印机
- block块设备,某个磁盘分区
- link快捷方式,指针的指针
- fifo管道,用于把一个进程传到另外一个进程
- 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,文件上传先到这里

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
java源码-DelayQueue
开篇 DelayedQueue是一个用来延时处理的队列,delayQueue其实就是在每次往优先级队列中添加元素,然后以元素的delay/过期值作为排序的因素,以此来达到先过期的元素会拍在队首,每次从队列里取出来都是最先要过期的元素 所谓延时处理就是说可以为队列中元素设定一个过期时间, 相关的操作受到这个设定时间的控制。 DelayQueue类图 DelayQueue类图 DelayQueue类变量和构造函数 DelayQueue的类变量当中有两个核心变量值得考虑: DelayQueue的PriorityQueue表明DelayQueue内部使用PriorityQueue的最小堆保证有序 E extends Delayed标明存入DelayQueue的变量必须实现Delayed接口,实现getDelay和compareTo接口。 public class DelayQueue<E extends Delayed> extends AbstractQueue<E> implements BlockingQueue<E> { // 相关的锁 priv...
-
下一篇
福音:不懂代码也能用TensorFlow做验证码识别了
项目地址:https://github.com/kerlomz/captcha_trainer,欢迎各位大佬们指点 长话短说,开门见山,网络上现有的代码以教学研究为主,对于验证码识别有刚需的朋友们,无需阅读代码,几个参数任何人都能使用机器学习技术训练一个模型,如本文有不严谨之处还请告知与谅解,此文旨在献给不求甚解,拿来主义者。 笔者选用的时下最为流行的CNN卷积神经网络进行端到端的验证码识别懒人们仅仅需要了解一点基本的理念即可,下面笔者将带领大家走马观花瞧一瞧如何为之: 1.故事从两个配置文件说起 config.yaml # 系统配置 # Device: The default device is CPU. # - If you use the GPU version, you need to install some additional applications. # TrainRegex and TestRegex: Default matching apple_20181010121212.jpg file. # TrainsPath and TestPath: The loc...
相关文章
文章评论
共有0条评论来说两句吧...