PHP 拥有的多种函数可供创建、读取、上传以及编辑文件。
当您操作文件时必须非常小心。如果您操作失误,可能会造成非常严重的破坏。常见的错误是:
•编辑错误的文件
•被垃圾数据填满硬盘
•意外删除文件内容
为方便看到操作效果,先新建一个 file.txt 文件 内容如下:
AJAX = Asynchronous JavaScript and XML
CSS = Cascading Style Sheets
HTML = Hyper Text Markup Language
PHP = PHP Hypertext Preprocessor
SQL = Structured Query Language
SVG = Scalable Vector Graphics
XML = EXtensible Markup Language
readfile() 函数
读取并显示文件内容,并返回读取文件的字节数
新建 文件 Demo.php
<html>
<body>
<?php
// readfile("file.txt"); // 显示文件内容,不显示字节数
// 文件路径要写正确,当前 两个文件在同一目录下
echo "读取字节数:" . readfile("file.txt"); // 字节数会显示在最后
?>
</body>
</html>
文件基本操作
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>文件的操作</title>
</head>
<body>
<?php
#r 打开文件为只读。文件指针在文件的开头开始。
#w 打开文件为只写。删除文件的内容或创建一个新的文件,如果它不存在。文件指针在文件的开头开始。
#a 打开文件为只写。文件中的现有数据会被保留。文件指针在文件结尾开始。创建新的文件,如果文件不存在。
#x 创建新文件为只写。返回 FALSE 和错误,如果文件已存在。
#r+ 打开文件为读/写、文件指针在文件开头开始。
#w+ 打开文件为读/写。删除文件内容或创建新文件,如果它不存在。文件指针在文件开头开始。
#a+ 打开文件为读/写。文件中已有的数据会被保留。文件指针在文件结尾开始。创建新文件,如果它不存在。
#x+ 创建新文件为读/写。返回 FALSE 和错误,如果文件已存在。
# fopen() 打开文件 参数一:文件名 参数二:文件打开模式 r为只读 or die() 文件打不开是的提示,且不会执行下面的代码
$myFile = fopen("file.txt", 'r') or die('Unable to open file!');
# fread() 读取打印打开的文件 参数一:读取文件的文件名 参数二:读取的最大字节
# filesize() 可获取读取文件的字节数
echo fread($myFile, filesize('file.txt'));
echo "-----------------------------------------<br>";
$myFile = fopen("file.txt", 'r') or die('Unable to open file!');
# 读取单行文本,而且读取完一行会将指针移动到下一行,如果之前已fread过文件,则这里要重新打开文件
echo fgets($myFile);
echo fgets($myFile);
# feof() 检验是否已到达文件的最后
while(!feof($myFile)) {
echo fgets($myFile);
}
echo "-----------------------------------------<br>";
# 上边指针已读取到最后,所以得重新打开文件
$myFile = fopen("file.txt", 'r') or die('Unable to open file!');
# fgetc() 读取单个字符,都去完一个字符指针将移动到下一个字符
echo fgetc($myFile);
# fclose() 关闭文件
fclose($myFile);
?>
<?php
# 模式w会覆盖原来内容
$myfile = fopen("newfile.txt", "w") or die("Unable to open file!");
$txt = "Hello PHP!\n";
# fwrite()文件写入 参数一:写入文件 参数二:写入内容
fwrite($myfile, $txt);
$txt = "你好 世界!";
fwrite($myfile, $txt);
fclose($myfile);
?>
</body>
</html>
文件上传
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>文件上传</title>
</head>
<body>
<p>仅支持小于50kb的jpg或gif文件</p>
// enctype 属性规定了在提交表单时要使用哪种内容类型
<form action="upload_file.php" method="post" enctype="multipart/form-data">
<label for="file">FileName:</label>
<input type="file" name="file" id="file">
<br>
<input type="submit" name="submit" value="提交">
</form>
</body>
</html>
这里需要新建一个用于检验上传文件是否符合上传要求和上传保存位置的脚本文件 upload_file.php
<?php
// var_dump($_FILES);
// 限制上传文件类型
if ((($_FILES["file"]["type"] == "image/gif")
|| $_FILES["file"]["type"] == "image/jpeg" // firefox 识别jpg
|| $_FILES["file"]["type"] == "image/pjpeg") // ie 识别jpg
&& $_FILES["file"]["size"] < 50000) { // 上传文件小于50kb 默认最大上传大小为8388608/1024kb 即8M
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 "Temp stored in:" . $_FILES["file"]["tmp_name"] . "<br>";; // 上传文件的临时文件 传完会自动删除
if (file_exists("upload/" . $_FILES["file"]["name"])) { // 判断是否已存在相同文件
echo "Error:" . $_FILES["file"]["name"] . " already exists!";
} else {
// 将文件从临时文件目录复制到指定目录 upload/
move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
echo "Stored in:" . "upload/" . $_FILES["file"]["name"];
}
}
} else {
echo "Invalid file!";
}
?>