PHP File
文件操作核心函数
PHP 提供了丰富的文件系统函数。现代 PHP(8.x)中推荐优先使用 SplFileObject 和 FilesystemIterator 等 OOP 接口。
读取文件
// 一次性读取整个文件(适合小文件)
$content = file_get_contents('data.txt');
// 按行读取到数组
$lines = file('data.txt', FILE_IGNORE_NEW_LINES);
// 逐行处理(内存友好)
$handle = fopen('data.txt', 'r');
while (($line = fgets($handle)) !== false) {
echo $line;
}
fclose($handle);
写入文件
// 覆盖写入
file_put_contents('output.txt', $data);
// 追加写入
file_put_contents('log.txt', $data . "\n", FILE_APPEND);
// 原子写入(先写临时文件再重命名,防并发)
tempnam($dir, $prefix);
file_put_contents($tmp, $data);
rename($tmp, 'output.txt');
安全注意事项
文件操作是 Web 应用中最容易出安全问题的环节之一:
- 路径穿越防护: 永远不要直接使用用户输入拼接文件路径。使用
basename()提取文件名,或用realpath()验证路径 - 上传文件验证: 检查 MIME 类型、文件扩展名、文件大小,将上传目录移出 Web 根目录
- PHP 8.x 变化:
fopen()等函数不再接受 null 作为路径参数(PHP 8.1 起废弃)
// ❌ 危险:用户输入直接拼路径
$file = fopen($_GET['file'], 'r');
// ✅ 安全:验证路径
$allowed = ['data.txt', 'config.txt'];
$filename = basename($_GET['file']);
if (in_array($filename, $allowed)) {
$content = file_get_contents("./uploads/{$filename}");
}
参考链接
Lire un fichier et récupérer son contenu dans un tableau de lignes :
- file($chemin)
Opérations élémentaires
- file_put_contents, file_get_contents
Ouvrir des fichiers distants :
- fopen($url), get_meta_tags($url)