Link: примеры (PHP)

Работа с жёсткими ссылками через PHP функцию link
Раздел: Работа с файловой системой
link(string $target, string $link): bool
Функция link в PHP

Функция link создаёт жёсткую ссылку (hard link) для существующего файла. Она доступна только в операционных системах, поддерживающих жёсткие ссылки, и не работает в Windows. Основное назначение — создание дополнительных имён для одного и того же файла без копирования данных.

Аргументы функции
  • target (string) - путь к существующему файлу
  • link (string) - имя создаваемой ссылки

Функция возвращает true при успешном выполнении и false в случае ошибки.

Основные примеры
Создание простой жёсткой ссылки
<?
$target = 'original.txt';
$link = 'hardlink.txt';
if (file_exists($target)) {
    if (link($target, $link)) {
        echo 'Ссылка создана';
    }
}
?>
Ссылка создана
Попытка создания ссылки на несуществующий файл
<?
if (link('missing.txt', 'link.txt')) {
    echo 'Успешно';
} else {
    echo 'Ошибка создания ссылки';
}
?>
Ошибка создания ссылки
Похожие функции в PHP

Создаёт символьную ссылку, которая указывает на путь, а не на конкретный файл. Может работать с директориями и поддерживается в Windows.

Копирует содержимое файла, создавая отдельный файл с собственными данными. Используется для дублирования файлов.

Переименовывает или перемещает файл, изменяя его местоположение в файловой системе.

Типичные ошибки
Создание ссылки на несуществующий файл
<?
link('non_existent.txt', 'link.txt');
?>
Warning: link(): No such file or directory
Попытка создания ссылки в Windows
<?
link('file.txt', 'link.txt');
?>
Warning: link(): Unable to link [file.txt] => [link.txt].
Function not implemented
Нарушение уникальности имён
<?
touch('existing.txt');
link('file.txt', 'existing.txt');
?>
Warning: link(): File exists
История изменений
  • PHP 7.0 - функция стала возвращать false при ошибке вместо вызова предупреждения в некоторых случаях
  • PHP 5.3.0 - добавлена поддержка относительных путей для параметра target
  • В PHP 8.0 изменений в работе функции не было
Расширенные примеры
Проверка поддержки жёстких ссылок
Пример php
<?
function isHardLinkSupported() {
    $tempFile = tempnam(sys_get_temp_dir(), 'test');
    $linkFile = $tempFile . '_link';
    
    $result = link($tempFile, $linkFile);
    
    if ($result) {
        unlink($linkFile);
    }
    
    unlink($tempFile);
    return $result;
}

echo isHardLinkSupported() ? 'Поддерживается' : 'Не поддерживается';
?>
Создание нескольких ссылок на один файл
Пример php
<?
$target = 'data.txt';
file_put_contents($target, 'Общие данные');

for ($i = 1; $i <= 3; $i++) {
    $linkName = "link{$i}.txt";
    if (link($target, $linkName)) {
        echo "Создана ссылка: {$linkName}
"; } } // Изменение через одну ссылку file_put_contents('link1.txt', 'Новые данные', FILE_APPEND); echo file_get_contents($target); ?>
Создана ссылка: link1.txt
Создана ссылка: link2.txt
Создана ссылка: link3.txt
Общие данныеНовые данные
Определение количества жёстких ссылок
Пример php
<?
$target = 'myfile.txt';
file_put_contents($target, 'content');
link($target, 'link1.txt');
link($target, 'link2.txt');

$stat = stat($target);
echo "Количество ссылок: " . $stat['nlink'];
?>
Количество ссылок: 3
Аналоги в других языках

Link в Python

Функция os.link() из модуля os.

import os
os.link('source.txt', 'link.txt')
JavaScript (Node.js)

Метод fs.link() из модуля fs.

const fs = require('fs');
fs.linkSync('source.txt', 'link.txt');
Bash/Linux

Команда ln создаёт жёсткие ссылки.

ln source.txt link.txt

PHP link function comments

En
Link Create a hard link