文件处理
文件处理包含文件的打开/关闭文件、读取数据、和写入数据等
1. 打开/关闭文件
fopen() -- 打开文件
fclose() -- 关闭文件
举个栗子:
<?php
//打开文件
$file = fopen("test.txt", "r");
//关闭文件 -- 关闭文件前需打开文件,并使用打开文件时定义的指针作为参数
fclose($file);
?>
2.从文件中读取数据
(1)读取整个文件
readfile() -- 读入一个文件并将其写入输出到缓冲中
file() -- 读取整个文件内容,按行存放到数组中,包含换行符在内
file_get_contents() -- 将整个文件录入一个字符串,适用于二进制对象
举个栗子:
<?php
readfile("test.txt"); //读入一个文件并将其写入输出到缓冲中
$f = file("test.txt"); //读取整个文件内容,按行存放到数组中,包含换行符在内
foreach($f as $count){
echo $count;
}
$f = file_get_contents("test.txt"); //将整个文件录入一个字符串,适用于二进制对象
echo $f;
?>
(2)读取部分数据
fgets() -- 一次读取一行数据
fgetc() -- 读取指定字符,单字节
fread() -- 读取任意长度的字符串
举个栗子:
<?php
$f = fopen("test.txt", "rb");
while(!feof($f)){
echo fgets($f); //一次读取一行数据
}
fgetc($f); //读取一个字符,单字节
echo fread($f,6); //读取任意长度的字符串
?>
3.将数据写入文件 -- fwrite()/file_put_contents()
举个栗子:
<?php
//将数据写入文件
$f = fopen("test.txt", "wb");
fwrite($f, "Hello world!");
//将数据写入文件
file_put_contents($f, "Hi world!");
//读取文件检查是否写入成功
readfile($f);
?>
目录处理
目录处理包括打开目录、浏览目录和关闭目录。
opendir() -- 打开目录
closedir() -- 关闭目录
举个栗子:
<?php
//打开目录
$path = "D:\\phpstudy_pro\\www";
if(is_dir($path)){
if($dir = opendir($path))
echo $dir;
}else{
exit(); //退出
}
//关闭目录
closedir($dir);
?>
scandir() -- 浏览目录
举个栗子:
<?php
//浏览目录
$path = "D:\\phpstudy_pro\\www";
if(is_dir($path)){
$dir = scandir($path);
foreach($dir as $value){
echo $value."<br>";
}
}else{
echo "目录路径错误";
}
?>
文件上传
文件上传可以使用HTTP协议来实现,要使用文件上传功能,有四个步骤:
1.客户端的设置(表单的设置)
1)<input type='file' name='自定义'>
2)表单的提交方式必须为post
3)form表单上面加上 enctype="multipart/form-data"
举个栗子:
<html>
<body>
<form action="test.php" method="post" enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" />
<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>
2.在php.ini配置文件中对上传功能做一些设置
1)file_uploads = On 是否允许上传
2)upload_max_filesize = 2M PHP允许的最大上传文件大小
3)post_max_size = 8M 限制通过post方法可以接收的数据的大小。
post_max_size一定要大于upload_max_filesize
4)upload_tmp_dir = "XXXX" 上传文件后的临时目录。
3、上传后的数据使用$_FILES来进行接收。
$_FILES中的每个元素的意思
name=>上传的文件名
type=>mime类型,用来设定某种扩展名的文件用一种应用程序来打开的方式,当扩展名称文件被访问时,浏览器会自动指定应用程序打开。
tmp_name=>上传时的临时文件名,文件上传结束后,生成的临时文件默认将存储在临时文件目录中。。
size=>文件的大小 以字节为大小单位。
error=>上传的错误号
如其值为 0,没有错误发生,文件上传成功
如其值为 7,文件写入失败
......
举个栗子:
<?php
if ($_FILES["file"]["error"] > 0) {
echo "Error: " . $_FILES["file"]["error"] . "<br />";
}else {
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Stored in: " . $_FILES["file"]["tmp_name"];
}
?>
4.使用move_uploaded_file()函数实现上传功能
举个栗子:
<?php
if ($_FILES["file"]["error"] > 0){
echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
}else{
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";
move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
}
?>
文件下载
借助于http的下载:如果浏览器能够识别该文件,则直接进行解析,如果不能识别那么它将提供下载
直接告诉浏览器这是一个下载文件,不要进行解析
1、header('content-type:text/html;charset=utf-8');//设置字符集
2、header('content-disposition:attachment');//告诉它是一个下载文件(附件)
3、header('content-disposition:attachment;filename=xxxxx');//告诉它是一个附件并且给出文件名(是在第2点的基础上加上的)
4、将所有的文件内容读取出来,否则会没有内容
5、告诉浏览器这个文件有多大 header('content-length:文件的大小');
举个栗子:
<?php
$file = 'down.zip';
if (file_exists($file)) {
$file1 = fopen ($file, "rb" );
header('Content-Type: application/octet-stream');//告诉浏览器这是一个文件流格式的文件
//用来告诉浏览器,文件是可以当做附件被下载,下载后的文件名称为$file_name该变量的值。
header('Content-Disposition: attachment; filename="'.basename($file).'"');
Header ( "Accept-Ranges: bytes" ); //请求范围的度量单位
header('Content-Length: ' . filesize($file));//Content-Length是指定包含于请求或响应中数据的字节长度
readfile($file1);
exit;
}
?>