PHP学习笔记--文件目录操作(文件上传实例)
文件操作是每个语言必须有的,不仅仅局限于PHP,这里我们就仅用PHP进行讲解
php的文件高级操作和文件上传实例我放在文章的最后部分。--以后我还会给大家写一个PHP类似于网盘操作的例子
注意:阅读此文章,必须的备一个 《PHP中文手册》或者其它可以查询PHP函数的手册 因为文章有大量的示例,但是为了节约篇幅和时间,所以请大家自行查阅PHP手册,以明白函数的具体作用
1、php打开文件和关闭文件
用到的函数 fopen() 、fclose() 注:打开的文件一定要关闭! 具体函数参数请查阅php手册
实例:
<?php
$fopen = fopen("fun.txt","rb");
/* ...文件的其他操作 */
fclose($fopen);
?>
fopen()函数在php5中也支持url格式:
<?php
$fopen = fopen("http://www.baidu.com","rb");
while(!feof($fopen))
{
echo fgets($fopen);
}
fclose($fopen);
?>
2、PHP的文件读写
读操作-
用到的函数 readfile()、file()、file_get_contents()、fgets()、fgetss()、fgetc()
示例中的文件位置请根据自己的文件进行更改,不要纠结文件位置和文件名什么的。重点在学习
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>文件测试</title>
</head> <body>
<!--不需要打开文件读取-->
<table width="500" border="1" cellpadding="0" cellspacing="0">
<tr>
<td width="253" height="100" align="right" valign="middle" scope="col">使用 readfile()函数读取文件内容:
</td>
<td width="241" height="100" align="center" valign="middle" scope="col">
<!-- 使用readfile()函数读取ee.txt文件内容 -->
<?php readfile("ee.txt"); ?>
</td>
</tr>
<tr>
<td height="100" align="right" valign="middle">使用 file()函数读取文件内容:
</td>
<td height="100" align="center" valign="middle">
<!-- 使用file()函数读取ee.txt文件内容 -->
<?php
$f_arr = file("ee.txt");
foreach($f_arr as $cont)
{
echo $cont."<br />";
}
?>
</td>
</tr>
<tr>
<td width="250" height="25" align="right" valign="middle" scope="col">使用 file_get_contents()函数读取文件内容:
</td>
<td height="25" align="center" valign="middle" scope="col">
<!-- 使用file_get_contents()函数读取ee.txt文件内容 -->
<?php
$f_chr = file_get_contents("ee.txt");
echo $f_chr;
?>
</td>
</tr>
</table>
<!--需要打开文件流读取-->
<table border="1" cellpadding="0" cellspacing="0">
<tr>
<td align="right" valign="middle" scope="col">使用fgets()函数:</td>
<td align="center" valign="middle" scope="col">
<!--使用fgets()函数读取-->
<?php
$fopen = fopen("fun.txt","rb"); //打开文件
while(!feof($fopen)) //feof()函数测试指针是否到了文件结束的位置
{
echo fgets($fopen); //输出当前行
}
fclose($fopen); //关闭文件
?>
</td>
</tr>
<tr>
<td align="right" valign="middle" >使用fgetss()函数:</td>
<td align="center" valign="middle">
<!--使用fgetss()函数读取-->
<?php
$fopen = fopen("fun.txt","rb");
while(!feof($fopen)) //feof()函数测试指针是否到了文件结束的位置
{
echo fgetss($fopen); //输出当前行
}
fclose($fopen);
?>
</td>
</tr>
<tr>
<td align="right" valign="middle" >使用fgetc()函数:</td>
<td align="center" valign="middle">
<!--使用fgetss()函数读取-->
<?php
$fopen = fopen("ee.txt","rb"); //创建文件资源。打开文件流
while(false !== ($chr = fgetc($fopen))) //使用fgetc()函数取得一个字符串,判断是否为false
{
echo $chr; //如果不是,输出该字符
}
fclose($fopen); //关闭文件资源
?>
</td>
</tr>
</table>
</body>
</html>
写操作-
用到的函数 fwrite()、 file_put_contents()
<?php
/*
$filename = "ee.txt"; //要读取的文件
$fp = fopen($filename,"rb"); //打开文件
echo fread($fp,6); //使用 fread() 函数读取文件内容的前32个字节
echo "<p>";
echo fread($fp,filesize($filename)); //输出其余的文件内容
*/
$filepath = "05.txt";
$str = "此情可待成追忆 只是当时已惘然<br />";
echo "用 fwrite() 函数写入文件: ";
$fopen = fopen($filepath,"wb") or die("文件不存在");
fwrite($fopen,$str);
fclose($fopen);
readfile($filepath);
echo "<p>用 file_put_contents() 函数写入文件: ";
file_put_contents($filepath,$str);
readfile($filepath);
?>
3、php文件本身的操作
本示例只是列举函数,请不要直接运行。运行前请根据自己的需求更改
<?php
date_default_timezone_set('Asia/Shanghai'); //PHP5以上版本支持 --时区的设置,一会儿会有涉及到时间
//php文件操作 --本示例只是列举函数,请不要直接运行。运行前请根据自己的需求更改 /*用rename()函数文件重命名*/
rename("123.txt","321.txt"); /*用copy()函数 复制文件*/
copy("ee.txt","upfile/ee.txt"); /*用unlink()函数 删除文件*/
unlink("321.txt"); /*用fileatime()函数 返回文件最后一次访问的时间 --默认是以unix时间戳来访问的*/
echo "Last access time: ".date("Y-m-d H:i:s",fileatime("ee.txt")); /*用filemtime()函数 返回文件最后一次被修改的时间 --默认是以unix时间戳来访问的*/
echo "Last modified time: ".date("Y-m-d H:i:s",filemtime("ee.txt")); /*用filesize() 函数取得文件大小 以字节数显示*/
echo filesize("ee.txt"); /*用pathinfo() 函数获取文件信息 包括路径、类型、名字等*/
print_r(pathinfo("ee.txt")); /*用realpath() 函数返回文件的绝对路径*/
echo realpath("ee.txt"); /*用stat() 函数返回文件的相关信息。如大小、最后修改时间等等*/
print_r(stat("ee.txt"));
?>
===================================================================
一、php目录操作
和文件操作类似,也要打开关闭目录 用opendir()、和closedir()函数进行打开和关闭目录
<?php
$path = "D:/user/test"; //路径应为 "/" 而不是 "\"
if(is_dir($path)) //检测是否是一个目录
{
if($dire = opendir($path)) //判断打开目录是否成功
{
echo $dire; //输出目录指针
}
}
else
{
echo '路劲错误';
exit();
}
closedir($dire); //关闭目录
?>
二、php目录的游览
核心函数 scandir()
<?php
$path = "D:/user"; //要游览的目录
if(is_dir($path))
{
$dir = scandir($path); //使用scandir() 函数取得所有文件及目录
foreach($dir as $value) //使用foreach循环遍历
{
echo iconv("gbk","utf-8",$value); //转换编码。
echo "<br />";
}
}
else
{
echo "目录路径错误!";
}
?>
三、php目录的其他操作,获取磁盘目录大小,新建删除目录等等
本示例只是列举函数,请不要直接运行。运行前请根据自己的需求更改
<?php
/*本示例只是列举函数,请不要直接运行。运行前请根据自己的需求更改*/
/*用mkdir() 函数新建一个指定目录*/
mkdir("tt"); /*用rmdir()函数 删除一个指定的目录,前提是目录必须是空的*/
rmdir("tt"); /*用getcwd()函数 获取当前工作的目录*/
echo getcwd(); /*用chdir() 函数更改当前目录为工作目录*/
echo getcwd();
echo "<br />";
chdir("../"); //更改为返回上一级
echo getcwd(); //重新获取当前目录 /*用disk_free_space()函数 返回目录中的可用空间*/
echo disk_free_space("D:/")/pow(1024,3); //这里换算成了G、默认是以字节显示的 /*用disk_total_space()函数 返回目录中的可用空间*/
echo disk_total_space("D:/")/pow(1024,3); //这里换算成了G、默认是以字节显示的 /*关于PHP5以前的老游览目录的方法 我就不列举了,这里仅仅给出函数名: readdir()、rewinddir()*/
?>
====================================================================
文件的高级运用
文件指针:
<?php
$filename = "ee.txt"; //指定文件路径及文件名
if(is_file($filename)) //判断文件是否存在
{
echo "文件总字节数: ".filesize($filename)."<br />"; //输出总字节数
$fopen = fopen($filename,"rb"); //打开文件 , 以只读的二进制文件格式的去
echo "初始指针位置是: ".ftell($fopen)."<br />"; //输出指针位置
fseek($fopen,3); //移动指针
echo "使用 fseek() 函数后指针位置: ".ftell($fopen)."<br />"; //输出移动后的指针位置
echo "输出当前指针后面的内容: ".fgets($fopen)."<br />"; //输出从当前指针到行尾的内容
if(feof($fopen)) //判断指针是否指向文件末尾
{
echo "当前指针指向文件末尾: ".ftell($fopen)."<br />"; //如果指向了文件尾,则输出指针位置
}
//使用rewind() 函数返回文档流的开头 --一旦流读到末尾再度就读不到数据了,
//所以这里要重新指向一个文件的指针
rewind($fopen);
//查看使用 rewind() 函数后指针的位置
echo "使用 rewind() 函数后指针的位置: ".ftell($fopen)."<br />";
echo "输出前 6 个字节的内容: ".fgets($fopen,6); //输出前6个字节的内容
fclose($fopen); //关闭文件
}
else
{
echo "文件不存在!";
}
?>
文件锁定:
<?php
$filename = '05.txt'; //声明要打开文件名称
$fopen = fopen($filename,'w'); //以w 只写的形式打开文件
flock($fopen,LOCK_EX); //锁定文件 (独占共享)
fwrite($fopen,"hightman1"); //向文件中写入数据
flock($fopen,LOCK_UN); //解除锁定
fclose($fopen); //关闭文件指针
readfile($filename); //输出文件内容
?>
====================================================================
文件的上传
获取上传文件的信息:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head> <body>
<table width="500" border="0" cellpadding="0" cellspacing="0">
<!-- 上传文件的form表单,必须有 enctype 属性 -->
<form enctype="multipart/form-data" action="" method="post">
<tr>
<td width="150" height="30" align="right" valign="middle">请选择上传文件: </td>
<!-- 上传文件域,type类型为file -->
<td width="250"><input type="file" style="border:1px solid #000" name="upfile" /></td>
<!-- 提交按钮 -->
<td width="100"><input type="submit" name="submit" value="上传" /></td>
</tr>
</form>
</table>
<?php
if(!empty($_FILES)) //检查变量是否为空
{
foreach($_FILES['upfile'] as $name=>$value) //使用foreach循环输出上传文件信息的名称和值
{
echo $name.'='.$value."<br />";
}
}
?>
</body>
</html>
真正的文件上传(从临时到指定位置):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head> <body>
<form action="" method="post" enctype="multipart/form-data" name="form">
<input name="up_file" type="file" />
<input type="submit" name="submit" value="上传" />
</form>
<?php
if(!empty($_FILES['up_file']['name'])) //判断是否有上传文件
{
$fileinfo = $_FILES['up_file']; //将文件信息赋给fileinfo
if($fileinfo['size'] < 901 && $fileinfo['size'] > 0) //判断文件大小
{
//上传文件
move_uploaded_file($fileinfo['tmp_name'],"upfile/".$fileinfo['name']);
echo "文件上传成功!";
}
else
{
echo "文件太大或者未知";
}
}
?>
</body>
</html>
多文件上传:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head> <body>
<form action="" method="post" enctype="multipart/form-data">
<table id="up_table" border="1" bgcolor="#f0f0f0">
<tbody id="auto">
<tr id="show">
<td>上传文件</td>
<td><input type="file" name="u_file[]" /></td>
</tr>
<tr>
<td>上传文件</td>
<td><input type="file" name="u_file[]" /></td>
</tr>
<tr>
<td colspan="4"><input type="submit" value="上传" /></td>
</tr>
</tbody>
</table>
</form>
<?php
if(!empty($_FILES['u_file']['name'])) //判断$FILES变量是否为空
{
$file_name = $_FILES['u_file']['name']; //将上传的临时文件名存放在数组里
$file_tmp_name = $_FILES['u_file']['tmp_name']; //将上传的临时文件路径存放数组
for($i = 0; $i<count($file_name); $i++) //循环上传文件
{
if($file_name[$i] != '') //判断上传文件名是否为空
{
move_uploaded_file($file_tmp_name[$i],"upfile/".$i.$file_name[$i]);
echo "文件".$file_name[$i]."上传成功, --更名为".$i.$file_name[$i]."<br />";
}
}
}
?>
</body>
</html>
PHP学习笔记--文件目录操作(文件上传实例)的更多相关文章
- [原创]java WEB学习笔记49:文件上传基础,基于表单的文件上传,使用fileuoload 组件
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- PHP学习笔记 02 之文件上传
我们了解了表单传值后,这些我就可以完成PHP的文件上传了.我们了解PHP文件上传前,先了解PHP文件上传的原理. 一.PHP上传文件原理 第一步:将本地的文件通过form表单上传到服务器的临时目录中, ...
- struts2学习笔记之十:文件上传
Struts2的上传 1.Struts2默认采用了apache commons-fileupload 2.Struts2支持三种类型的上传组件 3.需要引入commons-fileupload相关依赖 ...
- Kali学习笔记38:文件上传漏洞
早些年,提到Web渗透,或者搜索一些黑客教程 基本都会看到文件上传漏洞. 它是一个很经典的漏洞 但它本质其实不是一个漏洞,而是网站本身的上传文件功能 不过如果我们上传了Webshell,那么就成为了文 ...
- SpringMVC学习笔记八:文件上传下载(转)
转自:http://www.cnblogs.com/WJ-163/p/6269409.html 一.关键步骤 ①引入核心JAR文件 SpringMVC实现文件上传,需要再添加两个jar包.一个是文件上 ...
- SpringBoot学习笔记(8)-----SpringBoot文件上传
直接上代码,上传文件的前端页面: <body> <form action="/index/upload" enctype="multipart/form ...
- [原创]java WEB学习笔记50:文件上传案例
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- jm解决乱码问题-参数化-数据库操作-文件上传下载
jm解决乱码问题-参数化-数据库操作-文件上传下载 如果JM出果运行结果是乱码(解决中文BODY乱码的问题) 找到JM的安装路径,例如:C:\apache-jmeter-3.1\bin 用UE打开jm ...
- 【Java Web开发学习】Spring MVC文件上传
[Java Web开发学习]Spring MVC文件上传 转载:https://www.cnblogs.com/yangchongxing/p/9290489.html 文件上传有两种实现方式,都比较 ...
随机推荐
- 一天,python搞个分析NGINX日志的脚本
准备给ZABBIX用的. 统计接口访问字次,平均响应时间,4XX,5XX次数 以后可以再改进.. #!/usr/bin/env python # coding: utf-8 ############# ...
- hdu 4579 Random Walk 概率DP
思路:由于m非常小,只有5.所以用dp[i]表示从位置i出发到达n的期望步数. 那么dp[n] = 0 dp[i] = sigma(dp[i + j] * p (i , i + j)) + 1 . ...
- hdu 4676 Sum Of Gcd
离线+分块!! 思路:序列a[1],a[2],a[3]……a[n] num[i]表示区间[L,R]中是i的倍数的个数:euler[i]表示i的欧拉函数值. 则区间的GCD之和sum=∑(C(num[i ...
- 2013 Multi-University Training Contest 1 Partition
这题主要是推公式…… ;}
- Java Socket编程readLine返回null,read返回-1的条件
客户端正常关闭socket的时候,服务器端的readLine()方法会返回null,或者read()方法会返回-1
- 黑马程序员-- .net基础加强8之委托,事件,程序集
---------------------- ASP.Net+Android+IOS开发..Net培训.期待与您交流! ---------------------- 一.委托 ============ ...
- IE11兼容IE9问题
注意如果<head>标签里加<meta http-equiv="X-UA-Compatible"content="IE=EmulateIE9" ...
- Android:数据存储之SQLite
Android在运行时集成了SQLite , 所以每个Android应用程序都可以使用SQLite数据库. 我们通过SQLiteDatabase这个类的对象操作SQLite数据库,而且不需要身份验证. ...
- C#基础精华----枚举
enums枚举是值类型,数据直接存储在栈中,而不是使用引用和真实数据的隔离方式来存储. (1)默认情况下,枚举中的第一个变量被赋值为0,其他的变量的值按定义的顺序来递增(0,12,3...),因此以下 ...
- Git教程之时光穿梭(3)
我们已经成功地添加并提交了一个readme.txt文件,现在我们继续修改readme.txt文件,改成如下内容: