1.获取文件的相关信息

fopen、fstat、fclose(打开文件、获取文件相关信息、关闭文件)

filesize、filectime、filemtime、fileatime(文件大小、上次change时间、文件修改时间、文件访问时间)

<?php
// 方式一:
$file_path="test.txt";
// 打开文件
// a+ 代表读写方式,并将指针取向末尾
if($fp=fopen($file_path,"a+" )){
$file_info=fstat($fp);
echo "<pre>";
print_r($file_info); //打印这个文件的相关信息。返回的是一个关联数组
echo "</pre>";
echo "<br/>文件大小是{$file_info['size']}";
echo "<br/>文件上次修改时间是".date("Y-m-d H:i:s",$file_info['mtime']);
echo "<br/>文件上次访问时间是".date("Y-m-d H:i:s",$file_info['atime']);
echo "<br/>文件上次changge时间是".date("Y-m-d H:i:s",$file_info['ctime']);
}else
{
echo "打开文件失败";
}
// 关闭文件
fclose($fp); // 方式二:在不打开文件的情况下获取文件的size和ctime
echo "<br/>".filesize($file_path);
echo "<br/>".date("Y-m-d H:i:s",fileatime($file_path));
echo "<br/>".date("Y-m-d H:i:s",filectime($file_path));
echo "<br/>".date("Y-m-d H:i:s",filemtime($file_path));
?>

2.读取文件内容

fread(读文件内容)

file_get_contens、feof、str_replace(获取文件所有内容、检测是否已到达文件末尾、替换字符串内容)

<?php
// 1.打开文件
// 判断文件是否存在
// 2.读取内容
// 3.替换回车
// 4.关闭文件 $file_path="test.txt";
// 第一种读取方式****************
if (file_exists($file_path)) {
$fp=fopen($file_path, "a+");
$con=fread($fp, filesize($file_path));
// 替换换行
$con=str_replace("\r\n", "<br/>", $con);
echo $con;
}else{
echo "文件不存在";
} // 第二种读取方式****************
// file_get_contents:读取文件中所有的内容
$con=file_get_contents($file_path);
$con=str_replace("\r\n", "<br/>", $con);
echo $con; // 第三种读取方式****************
$buff=1024;
if (file_exists($file_path)) {
$fp=fopen($file_path, "a+");
// feof:检测是否已到达文件末尾
while (!feof($fp)) {
$str=fread($fp, $buff);
}
$str=str_replace("\r\n", "<br/>", $str);
echo $str;
}else{
echo "文件不存在";
}
?>

3.写文件操作

fwite(往文件写内容)

file_put_contents(将一个字符串写入文件)

<?php
// 1.打开文件
// 判断文件目录是否存在
// 2.如果存在,打开目录
// 3.使用fwrite往文件写内容
// 4.关闭文件
echo "方式一:*******************************************************";
$file_path="test.txt";
if (file_exists($file_path)) {
$fp=fopen($file_path, "a+");
$con="\r\nfighting~~~haha";
for ($i=0; $i <10 ; $i++) {
fwrite($fp,$con );
}
}else{
echo "文件不存在";
}
echo "添加成功";
fclose($fp);
echo "方式二:*******************************************************";
//直接获取文件内容
//file_put_contents:需要填最后面的参数。如果不填为重写文件内容,而不是追加
$con2="hello";
file_put_contents($file_path, $con2,FILE_APPEND);
?>

4.拷贝文件

copy(拷贝文件)

<?php
$file="54b5cd917e0747547.png";
$newfile="test.png";
if (!copy($file, $newfile)) {
echo "拷贝失败";
}else{
echo "拷贝成功";
}
?>

5.创建文件夹

mkdir(新建目录)

<?php
//创建文件夹
//这是创建单个文件夹******************************************
$path="D:/wamp64/www/filestream/cmftest";
// 1.先判断这个目录是否存在
// 如果存在则提示该目录已经存在
// 如果不存在则新建该目录
if (!is_dir($path)) {
if (mkdir($path)) {
echo "创建成功";
}else{
echo "创建失败";
}
}else{
echo "该文件夹已经存在了";
}
//这是创建多个文件夹(递归)******************************************
//注意:创建多个需要带参数
$path="D:/wamp64/www/filestream/cmftest/aaa/bbb/ccc/ddd/eee";
if (!is_dir($path)) {
if (mkdir($path,0777,true)) {
echo "创建成功";
}else{
echo "创建失败";
}
}else{
echo "该文件夹已经存在了";
}
?>

6.删除文件夹

mkdir(删除文件夹)

<?php
//注意:
//1.不能多级删除
//2.如果文件夹下面有东西,不能删除成功
$path="D:/wamp64/www/filestream/cmftest/aaa/bbb/ccc/ddd/eee";
if (rmdir($path)) {
echo "删除成功";
}
?>

7.创建文件

<?php
$path="D:/wamp64/www/filestream/cmftest/aa.txt";
$fp=fopen($path,"w+");
fwrite($fp, "hello");
fclose($fp);
echo "创建文件成功";
?>

8.删除文件

delete、unlink

<?php
$file_path="D:/wamp64/www/filestream/cmftest/aa.txt";
if (is_file($file_path)) {
if (unlink($file_path)) {
echo "删除成功";
}else{
echo "删除失败";
}
}else{
echo "这个文件不存在";
}
?>

上传文件程序:

updown.php

<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<h1>文件上传</h1>
<form action="updownpro.php" method="post" enctype="multipart/form-data">
<table>
<tr><td><br/>请输入用户名:</td><td><input type="text" name="username"/></td></tr>
<tr><td><br/>请介绍你上传的文件:</td><td><textarea name="fileintro" rows="2" cols="80"></textarea></td></tr>
<tr><td><br/>请选择你要上传的文件:</td><td><input type="file" name="myfile"/></td></tr>
<tr><td><br/><input type="submit" value="上传文件"></td></tr>
</table>
</form>
</body>
</html>

updownpro.php

<?php
$username=$_POST['username'];
$fileintro=$_POST['fileintro'];
// echo "<pre>";
// print_r($_FILES);
// print_r($_SERVER);
// echo "</pre>";
// 1.先判断文件是否是通过http post上传的
// 2.如果是,则将文件转移到服务器放上传资源的地方
//获取文件大小。如果文件超过2m,不允许上传,并退出程序(解决限制文件大小)
$filesize=$_FILES['myfile']['size'];
// $filesize的文字大小是以字节数算的
if ($filesize>2*1024*1024) {
echo "文件大小超过2m啦";
exit();
}
// 获取文件类型,限制类型上传(解决限制类型)
// 使用运算符&&。如果两种类型都不是,则提示他类型错误
if ($_FILES['myfile']['type']!="audio/mp3" && $_FILES['myfile']['type']!="image/png") {
echo "只能上传图片文件及音乐文件";
exit();
}
// 判断是否上传ok
if (is_uploaded_file($_FILES['myfile']['tmp_name'])) {
$uploadfile=$_FILES['myfile']['tmp_name'];
// 给用户动态生成文件夹(解决多个用户上传同一个文件名的文件问题)
$userpath=$_SERVER['DOCUMENT_ROOT']."/filestream/cmftest/".$username;
if (!file_exists($userpath)) {
mkdir($userpath);
}
// 这个路径把所有资源都放在服务器上
// $movetofile=$_SERVER['DOCUMENT_ROOT']."/filestream/cmftest/".$_FILES['myfile']['name'];
// 这个路径是把资源放在各自用户的文件夹上
// $movetofile=$userpath."/".$_FILES['myfile']['name'];
// 这个路径是为了防止同个用户上传同一个文件名的问题
$movetofile=$userpath."/".time().rand(1,1000).strrchr($_FILES['myfile']['name'], ".");
echo "<pre>";
print_r($_FILES);
echo "</pre>";
// iconv:给文件类型转码
if(move_uploaded_file($uploadfile, iconv("utf-8", "gb2312", $movetofile))){
echo $_FILES['myfile']['name']."添加成功";
}else{
echo "添加失败111111";
}
}else{
echo "添加失败";
}
?>

如图:

【二十六】php之文件编程的更多相关文章

  1. Python脚本控制的WebDriver 常用操作 <二十六> 上传文件

    测试用例场景 上传文件的方法是找到上传文件的对象,通常是的对象.然后直接往这个对象send_keys,传入需要上传文件的正确路径.绝对路径和相对路径都可以,但是上传的文件必须存在,否则会报错. Pyt ...

  2. python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码

    python3.4学习笔记(二十六) Python 输出json到文件,让json.dumps输出中文 实例代码 python的json.dumps方法默认会输出成这种格式"\u535a\u ...

  3. 二十六、Jcreator使用初步

    摘自http://blog.csdn.net/liujun13579/article/details/7751464 二十六.Jcreator使用初步 Jcreator是一个小巧灵活的Java开发工具 ...

  4. 二十六:Struts2 和 spring整合

    二十六:Struts2 和 spring整合 将项目名称为day29_02_struts2Spring下的scr目录下的Struts.xml文件拷贝到新项目的scr目录下 在新项目的WebRoot-- ...

  5. WCF技术剖析之二十六:如何导出WCF服务的元数据(Metadata)[实现篇]

    原文:WCF技术剖析之二十六:如何导出WCF服务的元数据(Metadata)[实现篇] 元数据的导出就是实现从ServiceEndpoint对象向MetadataSet对象转换的过程,在WCF元数据框 ...

  6. VMware vSphere 服务器虚拟化之二十六 桌面虚拟化之View Persona Management

    VMware vSphere 服务器虚拟化之二十六 桌面虚拟化之View Persona Management 实验失败告终,启动VMware View Persona Management服务报10 ...

  7. mysql进阶(二十六)MySQL 索引类型(初学者必看)

    mysql进阶(二十六)MySQL 索引类型(初学者必看)   索引是快速搜索的关键.MySQL 索引的建立对于 MySQL 的高效运行是很重要的.下面介绍几种常见的 MySQL 索引类型.   在数 ...

  8. JAVA之旅(二十六)——装饰设计模式,继承和装饰的区别,LineNumberReader,自定义LineNumberReader,字节流读取操作,I/O复制图片

    JAVA之旅(二十六)--装饰设计模式,继承和装饰的区别,LineNumberReader,自定义LineNumberReader,字节流读取操作,I/O复制图片 一.装饰设计模式 其实我们自定义re ...

  9. 模板方法模式 Template method 行为型 设计模式(二十六)

    模板方法模式 Template method 上图为网上百度的一份简历模板截图   相信大家都有求职的经历,那么必然需要简历,写简历的时候,很可能你会网上检索一份简历模板,使用此模板的格式,然后替换为 ...

  10. 二十六个月Android学习工作总结【转】

    原文:二十六个月Android学习工作总结 1.客户端的功能逻辑不难,UI界面也不难,但写UI花的时间是写功能逻辑的两倍.     2.写代码前的思考过程非常重要,即使在简单的功能,也需要在本子上把该 ...

随机推荐

  1. vim操作命令

    一,命令模式下 文件顶部: gg 文件底部: G 删除当前行:dd 删除当前行,并进入INSERT模式: cc 取消删除:u

  2. STM32F030如何正确配置IO口的复用功能

    本文所使用的单片机型号为STM32F030C8T6. 在030系列的单片机中,PA2引脚除了作为普通的IO引脚用作输入输出功能以外,还可以作为内部外设串口1,串口2,定时器15通道1这三个外设的功能引 ...

  3. SpringMVC 快速入门

    SpringMVC 快速入门 SpringMVC 简介 SpringMVC是 Spring为展示层提供的基于Web MVC设计模式的请求驱动类型的轻量级Web框架,它的功能和Struts2一样.但比S ...

  4. RSA非对称加密简析-java

    1 非对称加密算法 1.1 概述 1976年,美国学者Dime和Henman为解决信息公开传送和密钥管理问题,提出一种新的密钥交换协议,允许在不安全的媒体上的通讯双方交换信息,安全地达成一致的密钥,这 ...

  5. 虚拟机下 solr7.1 cloud 集群搭建 (手动解压和官方脚本两种方式)

    准备工作: vmware workstation 12,OS使用的是ubuntu16.04,三台虚拟机搭建一个solr集群,zookeeper共用这三台虚拟机组成zookeeper集群. zookee ...

  6. 译|调整JavaScript抽象的迭代方案

    原文作者:Kaloyan Kosev 原文链接:https://css-tricks.com/adapting-javascript-abstractions-time/ 翻译译者:小溪里 校对:华翔 ...

  7. FreeRTOS--堆内存管理

    因为项目需要,最近开始学习FreeRTOS,一开始有些紧张,因为两个星期之前对于FreeRTOS的熟悉度几乎为零,经过对FreeRTOS官网的例子程序的摸索,和项目中问题的解决,遇到了很多熟悉的身影, ...

  8. Linux磁盘分区(一):添加

    ***********************************************声明************************************************ 原创 ...

  9. MyEclipse 使用图文详解

    引言 某天在群里看到有小伙伴问MyEclipse/Eclipse的一些使用问题,虽然在我看来,问的问题很简单,但是如果对于刚刚学习的人来说,可能使用就不那么友好了.毕竟我在开始使用MyEclipse/ ...

  10. Hibernate学习(五)Hibernate 多对多映射

    说到多对多关系,印象最深刻的就是大学的选修课.一个学生可以选修多门课程,一门课程可以有多个学生选修,学生所选的每一门课程还有成绩.这个场景的E-R图如下: 对于多对多的关系,我们通常会抽出一张中间表( ...