PHP link 函数
最后修改于 2025 年 4 月 3 日
PHP 的 link 函数在文件之间创建硬链接。它是一个文件系统函数,为现有文件创建额外的目录条目。
基本定义
link 函数创建一个指向现有目标文件的硬链接。它接受两个参数:目标文件和要创建的链接名称。
语法:link(string $target, string $link): bool。该函数成功时返回 true,失败时返回 false。两个文件必须位于同一文件系统上。
基本 link 示例
这展示了 link 创建硬链接的最简单用法。
basic_link.php
<?php
declare(strict_types=1);
$target = "original.txt";
$link = "hardlink.txt";
if (link($target, $link)) {
echo "Hard link created successfully";
} else {
echo "Failed to create hard link";
}
这创建了一个名为 "hardlink.txt" 的硬链接,指向 "original.txt"。两个文件都将引用磁盘上的同一个 inode 和数据块。
链接前检查
在创建链接之前检查目标是否存在是一个好习惯。
check_before_link.php
<?php
declare(strict_types=1);
$target = "data.txt";
$link = "backup.txt";
if (!file_exists($target)) {
die("Target file does not exist");
}
if (link($target, $link)) {
echo "Backup link created";
} else {
echo "Backup creation failed";
}
这首先检查目标是否存在。仅当目标文件存在时,才会继续创建链接。这可以防止由于文件丢失而导致的错误。
错误处理
正确的错误处理有助于诊断链接创建失败。
error_handling.php
<?php
declare(strict_types=1);
$target = "source.pdf";
$link = "duplicate.pdf";
if (!link($target, $link)) {
$error = error_get_last();
echo "Link creation failed: " . $error['message'];
}
这捕获了链接创建失败时的最后一个错误。常见错误包括权限问题或跨文件系统链接尝试。
在不同目录中链接
可以在同一文件系统上的不同目录中创建硬链接。
different_directory.php
<?php
declare(strict_types=1);
$target = "/var/www/uploads/image.jpg";
$link = "/home/user/desktop/image_link.jpg";
if (link($target, $link)) {
echo "Directory link created";
} else {
echo "Cross-directory link failed";
}
这会在用户的桌面上创建一个链接,指向 Web 上传目录中的文件。两个位置必须位于同一个物理文件系统上。
指向同一文件的多个链接
一个文件可以有多个指向它的硬链接。
multiple_links.php
<?php declare(strict_types=1); $target = "document.odt"; $link1 = "backup1.odt"; $link2 = "backup2.odt"; link($target, $link1); link($target, $link2); echo "Created two links to the same file";
这创建了两个独立的硬链接指向同一个原始文件。所有三个名称都将引用相同的文件内容,直到所有链接都被删除。
边缘情况
link 函数在某些边缘情况下具有特定的行为。
edge_cases.php
<?php
declare(strict_types=1);
// Trying to link to non-existent file
if (!link("nonexistent.txt", "link.txt")) {
echo "Cannot link to non-existent file\n";
}
// Trying to create existing link
if (!link("existing.txt", "existing.txt")) {
echo "Cannot link a file to itself\n";
}
链接到不存在的文件或创建自链接时,该函数会失败。这些是应用程序中需要处理的常见错误情况。
最佳实践
- 权限: 确保适当的文件系统权限。
- 同一文件系统:链接必须保留在同一文件系统上。
- 错误处理:始终检查返回值。
- 清理:使用 unlink() 删除未使用的链接。
来源
本教程通过实际示例涵盖了 PHP link 函数,展示了其在不同场景下的用法。
作者
列出 所有 PHP 文件系统函数。