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

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

1.3 读取文件 - fread() 读取打开的文件
fread() 的第一个参数包含待读取文件的文件名,第二个参数规定待读取的最大字节数
1.4 闭文件 - fclose()用于关闭打开的文件
用完文件后把它们全部关闭是一个良好的编程习惯
fclose() 需要待关闭文件的名称(或者存有文件名的变量)
<?php
$myfile = fopen("webdictionary.txt", "r");
// some code to be executed....
fclose($myfile);
1.5 读取单行文件 - fgets()用于从文件读取单行
调用 fgets() 函数之后,文件指针会移动到下一行
<?php
$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");
echo fgets($myfile);
fclose($myfile);
?>
1.6 检查 End-Of-File - feof() 检查是否已到达 "end-of-file" (EOF)
feof() 对于遍历未知长度的数据很有用
逐行读取 "webdictionary.txt" 文件,直到 end-of-file
<?php
$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");
// 输出单行直到 end-of-file
while(!feof($myfile)) {
echo fgets($myfile) . "<br>";
}
fclose($myfile);
?>
1.7 读取单字符 - fgetc() 用于从文件中读取单个字符
在调用 fgetc() 函数之后,文件指针会移动到下一个字符
逐字符读取 "webdictionary.txt" 文件,直到 end-of-file
<?php
$myfile = fopen("webdictionary.txt", "r") or die("Unable to open file!");
// 输出单字符直到 end-of-file
while(!feof($myfile)) {
echo fgetc($myfile);
}
fclose($myfile);
?>
1.8 创建文件 - fopen()
- fopen() 函数也用于创建文件
- 也许有点混乱,但是在 PHP 中,创建文件所用的函数与打开文件的相同。
- 如果您用 fopen() 打开并不存在的文件,此函数会创建文件,假定文件被打开为写入(w)或增加(a)。
- 如果您试图运行这段代码时发生错误,请检查您是否有向硬盘写入信息的 PHP 文件访问权限
$myfile = fopen("testfile.txt", "w")
1.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
2 PHP 文件上传
通过 PHP,可以把文件上传到服务器
2.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.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"] - 由文件上传导致的 错误代码
2.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";
}
?>
2.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";
}
?>