ZetCode

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";
}

链接到不存在的文件或创建自链接时,该函数会失败。这些是应用程序中需要处理的常见错误情况。

最佳实践

来源

PHP link 文档

本教程通过实际示例涵盖了 PHP link 函数,展示了其在不同场景下的用法。

作者

我叫 Jan Bodnar,是一名充满热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。迄今为止,我已撰写了 1400 多篇文章和 8 本电子书。我在教授编程方面拥有十多年的经验。

列出 所有 PHP 文件系统函数