Link: примеры (PHP)
link(string $target, string $link): boolФункция 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 'Ошибка создания ссылки';
}
?>Ошибка создания ссылки
Создаёт символьную ссылку, которая указывает на путь, а не на конкретный файл. Может работать с директориями и поддерживается в Windows.
Копирует содержимое файла, создавая отдельный файл с собственными данными. Используется для дублирования файлов.
Переименовывает или перемещает файл, изменяя его местоположение в файловой системе.
<?
link('non_existent.txt', 'link.txt');
?>Warning: link(): No such file or directory
<?
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 изменений в работе функции не было
<?
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() ? 'Поддерживается' : 'Не поддерживается';
?><?
$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 Общие данныеНовые данные
<?
$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')Метод fs.link() из модуля fs.
const fs = require('fs');
fs.linkSync('source.txt', 'link.txt');Команда ln создаёт жёсткие ссылки.
ln source.txt link.txt