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. 用MVC导入导出

    导入导出对于刚做的人一脸懵逼,但是明白思路之后就感觉非常容易,我也是研究了好久,才总算做了出来,放在这里给大家分享一下 一.先看下导出 视图脚本 <script type ="text ...

  2. 洛谷 P3391 【模板】文艺平衡树

    题目背景 这是一道经典的Splay模板题--文艺平衡树. 题目描述 您需要写一种数据结构,来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4 ...

  3. 【框架学习与探究之依赖注入--Autofac】

    声明 本文欢迎转载,原文地址:http://www.cnblogs.com/DjlNet/p/7603642.html 序 同样的又是一个双11如期而至,淘宝/天猫实时数据显示,开场3分钟总交易额突破 ...

  4. openvpn部署之快速入门实战+一键部署openvpn脚本

    个人原创禁止转载 软件环境: Centos6.9 x64 openvpn-2.4.3-1.el6.x86_64.rpm easy-rsa-2.2.2-1.el6.noarch.rpm    #推荐使用 ...

  5. ViewPager无限轮播与自定义切换动画

    一直在寻求一个能用得长久的ViewPager,寻寻觅觅终于发现,ViewPager有这一个就够了. 注:并非完全原创 先看一下效果: 淡入淡出: 旋转: 无限轮播的ViewPager 主要设计思路(以 ...

  6. VMware虚拟机安装教程

    在实际的开发过程中,使用到VMware的时候是很多的.当你的电脑安装的是windows系统而想使用linux系统时,为了避免对本机的系统进行操作,那么安装虚拟机就是一项不错的选择. 在写这篇博文时,刚 ...

  7. 基于git的代码版本管理规范及流程-简版

    基于git的简单实用的版本管理规范及流程,包括:代码库的分布.人员角色的划分.代码提交合并流程.代码冲突处理.分支管理. 代码库分类 根据代码库分布的位置及作用,分为以下几类: 主库:位于服务端,所有 ...

  8. Nginx配置优化及深入讲解,大家可以听一下

    随着访问量的不断增加,需要对Nginx和内核做相应的优化来满足高并发用户的访问,那下面在单台Nginx服务器来优化相关参数. 1)       Nginx.conf配置优化: worker_proce ...

  9. java 后台代码调用接口

    import com.jiuqu.jollykeys.common.util.JsonUtil;import java.io.UnsupportedEncodingException;import j ...

  10. db2 update 异常

    报错: -错误的sql语句:update Persons SET FirstName = 'Fred' WHERE id_P = 1com.ibm.db2.jcc.am.SqlException: O ...