ZetCode

PHP symlink 函数

最后修改于 2025 年 4 月 3 日

PHP 的 symlink 函数用于在文件之间创建符号链接。它对于创建文件系统引用而不复制内容非常有用。

基本定义

symlink 函数创建一个从目标到链接名称的符号链接。它接受两个参数:目标路径和链接名称。

语法:symlink(string $target, string $link): bool。成功时函数返回 true,失败时返回 false。需要适当的权限。

基本的 symlink 示例

这展示了 symlink 最简单的用法来创建链接。

basic_symlink.php
<?php

declare(strict_types=1);

$target = "/var/www/html/original.txt";
$link = "/var/www/html/link.txt";

if (symlink($target, $link)) {
    echo "Symbolic link created successfully";
} else {
    echo "Failed to create symbolic link";
}

这会创建一个名为 "link.txt" 的符号链接,指向 "original.txt"。如果成功,函数将返回 true。请注意,目标必须存在。

相对路径 symlink

该函数可以使用相对路径作为目标和链接。

relative_symlink.php
<?php

declare(strict_types=1);

$target = "../files/document.pdf";
$link = "downloads/doc.pdf";

if (symlink($target, $link)) {
    echo "Relative symbolic link created";
} else {
    echo "Failed to create relative link";
}

这里我们使用相对路径创建了一个链接。该链接将指向文件层级中上一级目录的文档。相对链接在移动时会保持其关系。

目录 symlink

symlink 可以创建指向目录以及文件的链接。

directory_symlink.php
<?php

declare(strict_types=1);

$targetDir = "/var/www/projects/current";
$linkDir = "/var/www/html/project";

if (symlink($targetDir, $linkDir)) {
    echo "Directory link created successfully";
} else {
    echo "Failed to create directory link";
}

这会创建一个指向整个目录的符号链接。对于大多数操作,该链接的行为将类似于原始目录。目录链接在 Web 开发中很常用。

创建前检查

在创建链接或文件之前检查它们是否存在是一个好习惯。

safe_symlink.php
<?php

declare(strict_types=1);

$target = "config.ini";
$link = "settings.ini";

if (file_exists($link)) {
    echo "Link name already exists";
} elseif (!file_exists($target)) {
    echo "Target file does not exist";
} elseif (symlink($target, $link)) {
    echo "Symbolic link created safely";
} else {
    echo "Failed to create symbolic link";
}

本示例通过检查先决条件来演示安全的链接创建。首先,我们验证目标是否存在,然后检查链接名称是否已被占用。这可以防止错误和覆盖。

Windows symlink 示例

在 Windows 上,创建 symlink 需要适当的权限。

windows_symlink.php
<?php

declare(strict_types=1);

$target = "C:\\Users\\Public\\Documents\\report.docx";
$link = "C:\\Users\\Public\\Desktop\\current_report.docx";

if (symlink($target, $link)) {
    echo "Windows symbolic link created";
} else {
    echo "Failed to create Windows link";
}

Windows symlinks 需要管理员权限或启用了开发人员模式。语法使用反斜杠,但正斜杠也可用。Windows 会区分文件和目录链接。

边缘情况

symlink 在某些边缘情况下具有特定的行为。

edge_cases.php
<?php

declare(strict_types=1);

// Attempt to create link to non-existent target
$result1 = symlink("nonexistent.txt", "badlink.txt");

// Attempt to create link where name exists
file_put_contents("existing.txt", "content");
$result2 = symlink("target.txt", "existing.txt");

var_dump($result1); // bool(false)
var_dump($result2); // bool(false)

创建指向不存在目标的链接会失败。尝试创建名称已存在的链接也会失败。函数对这些条件很严格,并返回 false。

最佳实践

来源

PHP symlink 文档

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

作者

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

列出 所有 PHP 文件系统函数