PHP 操作文件
- PHP 拥有的多种函数可供创建、读取、上传以及编辑文件
- 请谨慎操作文件!
- 常见的文件操作错误:
编辑错误的文件
被垃圾数据填满硬盘
意外删除文件内容
1. PHP readfile() 函数
- readfile() 函数读取文件,并把它写入输出缓冲

2. PHP打开文件 fopen()
- 打开文件的更好的方法是通过 fopen() 函数。此函数为您提供比 readfile() 函数更多的选项
<?php
fopen() 的第一个参数包含被打开的文件名,
第二个参数规定打开文件的模式
$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");
echo fread($myfile,filesize("webdictionary.txt"));
fclose($myfile);
?>

3. 读取文件 - fread() 读取打开的文件
- fread() 的第一个参数包含待读取文件的文件名,第二个参数规定待读取的最大字节数
4. 闭文件 - fclose()用于关闭打开的文件
- 用完文件后把它们全部关闭是一个良好的编程习惯
- fclose() 需要待关闭文件的名称(或者存有文件名的变量)
<?php
$myfile = fopen("webdictionary.txt", "r");
fclose($myfile);
?>
5. 读取单行文件 - fgets()用于从文件读取单行
- 调用 fgets() 函数之后,文件指针会移动到下一行
<?php
$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");
echo fgets($myfile);
fclose($myfile);
?>
6. 检查 End-Of-File - feof() 检查是否已到达 "end-of-file" (EOF)
逐行读取 "webdictionary.txt" 文件,直到 end-of-file
<?php
$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");
while(!feof($myfile)) {
echo fgets($myfile) . "<br>";
}
fclose($myfile);
?>
7.读取单字符 - fgetc() 用于从文件中读取单个字符
- 在调用 fgetc() 函数之后,文件指针会移动到下一个字符
逐字符读取 "webdictionary.txt" 文件,直到 end-of-file
<?php
$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");
while(!feof($myfile)) {
echo fgetc($myfile);
}
fclose($myfile);
?>
8. 创建文件 - fopen()
- fopen() 函数也用于创建文件
- 也许有点混乱,但是在 PHP 中,创建文件所用的函数与打开文件的相同。
- 如果您用 fopen() 打开并不存在的文件,此函数会创建文件,假定文件被打开为写入(w)或增加(a)。
- 如果您试图运行这段代码时发生错误,请检查您是否有向硬盘写入信息的 PHP 文件访问权限
$myfile = fopen("testfile.txt", "w")
9.写入文件 - fwrite() 用于写入文件
- fwrite() 的第一个参数包含要写入的文件的文件名,第二个参数是被写的字符串
<?php
$myfile = fopen("newfile.txt", "w") or die("Unable to open file!");
$txt = "Bill Gates\n";
fwrite($myfile, $txt);
$txt = "Steve Jobs\n";
fwrite($myfile, $txt);
fclose($myfile);
?>
输出结果:
Bill Gates
Steve Jobs
PHP 文件上传
1. 创建一个文件上传表单
<form> 标签的 enctype 属性规定了在提交表单时要使用哪种内容类型。在表单需要二进制数据时,比如文件内容,请使用 "multipart/form-data"。
<html>
<body>
<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="Submit" />
</form>
</body>
</html>
2. 创建上传脚本
- "upload_file.php" 文件含有供上传文件的代码
- 这是一种非常简单文件上传方式。基于安全方面的考虑,您应当增加有关什么用户有权上传文件的限制
<?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"];
}
?>
- 通过使用 PHP 的全局数组
$_FILES
,你可以从客户计算机向远程服务器上传文件
- 第一个参数是表单的 input name
- 第二个下标可以是 "name", "type", "size", "tmp_name" 或 "error"。就像这样:
$_FILES["file"]["name"] - 被上传文件的 名称
$_FILES["file"]["type"] - 被上传文件的 类型
$_FILES["file"]["size"] - 被上传文件的 大小,以字节计
$_FILES["file"]["tmp_name"] - 存储在服务器的文件的 临时副本的名称
$_FILES["file"]["error"] - 由文件上传导致的 错误代码
3. 文件的上传限制
- 在此,我们使用户只能上传 .gif 或 .jpeg 文件,文件大小必须小于 20 kb
- 对于 IE,识别 jpg 文件的类型必须是 pjpeg,对于 FireFox,必须是 jpeg
<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
{
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"];
}
}
else
{
echo "Invalid file";
}
?>
4. 保存被上传的文件
- 上面的例子在服务器的 PHP 临时文件夹创建了一个被上传文件的临时副本
- 这个临时的复制文件会在脚本结束时消失。要保存被上传的文件,我们需要把它拷贝到另外的位置
- 下面的例子还检测了是否已存在此文件,如果不存在,则把文件拷贝到指定的文件夹
<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
{
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 />";
if (file_exists("upload/" . $_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"] . " already exists. ";
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"],
"upload/" . $_FILES["file"]["name"]);
echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
}
}
}
else
{
echo "Invalid file";
}
?>