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. 解决No enclosing instance of type * is accessible

    写一个内部类,并在构造函数中初始化时,遇到报错,搜索问题后发现,有网友出现过类似的问题,下面这个是说的浅显明白的,并确实解决了问题.于是,以下内容照搬过来,不再多费键盘了. public class ...

  2. 异常:Unknown lifecycle phase "mvn". You must specify a valid lifecycle

    这是在使用maven打包方式启动springboot项目时出现的异常, 我的异常原因属于下面的情况: 此时maven指令行为:mvn spring-boot:run. 如果写成这样会导致最终的mave ...

  3. PHP+Redis 实例【二】页面缓存 新玩法

    今天算是认识到博客园里的审查团队多内幕了,哈哈,贴个图玩下. 气死宝宝了. 进入主题! 今天就不写什么功能性的了,换下口味说下关于页面级的缓存,应该怎么做. 相信有很多小伙伴查了百度,甚至google ...

  4. Less的模式匹配

    Less的模式匹配 Less提供了一种机制,允许根据参数的值来改变 mixin的行为.比如,以下代码就可以让 .mixin 根据不同的 @switch 值而表现各异: .mixin (dark, @c ...

  5. 用C语言画一个心

    用C语言图形库画一个心 --环家伟 这次我教大家用代码画一个心,这样你们就可以送给你们的女(男)朋友了.没找到对象的也可以用来表白啊. 1.首先,我去百度找了心形线的函数,如下: 2.  联系高中的数 ...

  6. numpy中关于*和dot的区别

    1.numpy乘法运算中"*"是数组元素逐个计算 >>> import numpy as np >>> a = np.array([[2,3], ...

  7. 负载均衡之 nginx

    什么是负载均衡负载均衡(Load Balance)是分布式系统架构设计中必须考虑的因素之一,它通常是指,将请求/数据[均匀]分摊到多个操作单元上执行,负载均衡的关键在于[均匀].在使用nginx负载均 ...

  8. How to get table pg_stat_user_functions.

    修改配置文件postgres.conf track_functions = all                   # none, pl, all 或者 在当前事物中设置 postgres=# s ...

  9. flask_login 整合 pyjwt + json 简易flask框架

    现在很多框架都实现前后端分离,主要为了适应以下几个目的: 1,前后端的分离,可以使前端开发和后端开发更加分工明确,而不是后端还需要在视图模板中加入很多{% XXXX %}标签 2,是为了适应跨域调用或 ...

  10. solr6.5.0版本(Windows安装图解)

    此教程为solr6.5.0安装,自己制作,希望可以帮到你们.