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. Centos 6.9 安装 Redis 3.2.9

    依赖包和常用包yum install gcc gcc-c++ make zlib-devel readline readline-devel tkutil tk tkutil-devel tk-dev ...

  2. 使用dropwizard(6)-国际化-easy-i18n

    前言 Dropwizard官方文档并没有提供国际化的模块,所以只能自己加.Spring的MessageResource用的很顺手,所以copy过来. Easy i18n 在整合Dropwizard的时 ...

  3. python实战===如何优雅的打飞机

    这是一个打飞机的游戏,结构如下: 其中images中包含的素材为 命名为alien.png    命名为ship.png 游戏效果运行是这样的: 敌军,也就是体型稍微大点的,在上方左右移动,并且有规律 ...

  4. CCLuaObjcBridge - Lua 与 Objective-C 互操作的简单解决方案

    http://dualface.github.io/blog/2013/01/27/call-objectivec-from-lua/ 月初的时候,发了一篇关于 Lua 与 Java 互操作的文章,里 ...

  5. (转载) Java子类与父类之间的对象转换

    在使用Java的多态机制时,常常使用的一个特性便是子类和父类之间的对象转换.从子类向父类的转换称为向上转换(upcasting),通过向上转换,我们能够在编写程序时采用通用程序设计的思想,在需要使用子 ...

  6. Linux系统安装-MacBook网卡驱动问题解决

    先附上MacBook的linux安装教程 需要注意的是第7步中可能无法识别出OS X的系统,也没关系,只要格式化磁盘的时候注意选择对应磁盘即可,格式化成EXT4分区. 安装好后发现无法连接无线网络,应 ...

  7. anaconda spyder异常如何重新启动

    电脑有一次断电,重新启动后anaconda的spyder就打不开了 重新启动spyder方法: 在anaconda安装目录的Scripts文件夹下,shift+右键在此窗口打开命令行,运行spyder ...

  8. Logistic 回归模型 第一遍阅读笔记

    MLE :最大似然估计,求得的这套参数估计能够通过指定模型以最大概率在线样本观测数据 必须来自随机样本,自变量与因变量之间是线性关系 logistic 回归没有关于自变量分布的假设条件,自变量可以连续 ...

  9. Mybatis分页插件PageHelper使用

    一. Mybatis分页插件PageHelper使用  1.不使用插件如何分页: 使用mybatis实现: 1)接口: List<Student> selectStudent(Map< ...

  10. 命令模式(Command)

    命令模式(Command) 命令模式很好理解,举个例子,司令员下令让士兵去干件事情,从整个事情的角度来考虑,司令员的作用是,发出口令,口令经过传递,传到了士兵耳朵里,士兵去执行.这个过程好在,三者相互 ...