Symlink: примеры (PHP)
symlink(string target, string link): boolФункция symlink создает символическую ссылку (симлинк) для указанного целевого файла или директории.
Эта функция используется, когда требуется создать псевдоним для файла или папки, позволяющий обращаться к оригинальному объекту по другому пути. Симлинки часто применяются в развертывании приложений, организации структуры проектов и управлении версиями.
bool symlink ( string $target , string $link )
Функция принимает два обязательных строковых аргумента и возвращает true при успешном выполнении или false при ошибке.
- $target (строка): Путь к исходному файлу или директории, на который будет ссылаться симлинк. Этот путь может быть абсолютным или относительным.
- $link (строка): Путь, по которому будет создана новая символическая ссылка.
$target = '/var/www/project/config.ini';
$link = '/etc/config.ini';
if (symlink($target, $link)) {
echo 'Симлинк успешно создан.';
} else {
echo 'Ошибка при создании симлинка.';
}
Симлинк успешно создан.
$result = symlink('/home/user/uploads', '/var/www/html/storage');
var_dump($result);
bool(true)
// Создание симлинка 'link.php' на файл '../source.php' относительно текущей директории
$success = symlink('../source.php', 'link.php');
echo $success ? 'Успех' : 'Неудача';
Успех- link(): Создает жесткую ссылку (hard link). В отличие от симлинков, жесткие ссылки не могут указывать на директории и работают только в пределах одной файловой системы.
- readlink(): Возвращает цель символической ссылки. Полезна для проверки и чтения существующих симлинков.
- linkinfo(): Получает информацию о ссылке, например, проверяет ее существование.
Функцию symlink предпочтительнее использовать для создания ссылок на директории или для переносимых ссылок между разделами файловой системы. Жесткие ссылки лучше подходят для экономии места при множественных ссылках на один файл в пределах одного раздела.
$result = symlink('/tmp/file.txt', '/nonexistent/link.txt');
var_dump($result); // false
var_dump(error_get_last()['message']);
bool(false)
string(53) "symlink(): No such file or directory"
file_put_contents('existing.txt', 'test');
$result = symlink('/tmp/target.txt', 'existing.txt');
var_dump($result);
bool(false)
В этом случае функция вернет false, так как файл с таким именем уже существует.
$result = @symlink('/etc/passwd', '/root/link');
if ($result === false) {
echo 'Ошибка: недостаточно прав.';
}
Ошибка: недостаточно прав.Начиная с PHP 7.1.0, функция symlink() на платформах Windows теперь поддерживает относительные пути и ссылки на директории.
В PHP 8.0.0 не было внесено значительных изменений в поведение функции symlink, однако всегда рекомендуется проверять права доступа и существование целевых путей, так как обработка ошибок может зависеть от операционной системы.
$backupDir = '/backups/' . date('Y-m-d');
if (!is_dir($backupDir)) {
mkdir($backupDir, 0755, true);
}
// Создание симлинка на актуальную конфигурацию в папке с резервной копией
symlink('/etc/app/config.ini', $backupDir . '/config.ini.link');
echo 'Симлинк для резервной копии создан.';
Симлинк для резервной копии создан.
$currentVersion = 'v2.1.5';
$versions = ['v2.1.4', 'v2.1.5', 'v2.2.0-beta'];
$webRoot = '/var/www/html';
if (is_link($webRoot . '/current')) {
unlink($webRoot . '/current'); // Удаляем старый симлинк
}
symlink($webRoot . '/' . $currentVersion, $webRoot . '/current');
echo 'Активная версия изменена на ' . $currentVersion;
Активная версия изменена на v2.1.5
// Создание относительного симлинка
$relativePath = '../shared/logs/app.log';
$linkName = 'current.log';
if (symlink($relativePath, $linkName)) {
$resolved = readlink($linkName);
echo 'Создан относительный симлинк: ' . $resolved;
}
Создан относительный симлинк: ../shared/logs/app.logSymlink в Python
import os
target = '/path/to/target'
link = '/path/to/link'
# Создание символической ссылки
os.symlink(target, link)
print('Ссылка создана')
Ссылка создана
const fs = require('fs');
fs.symlink('target.txt', 'link.txt', (err) => {
if (err) throw err;
console.log('Симлинк создан');
});
Симлинк создан
ln -s /target/path /link/path
Отличие PHP-функции в том, что она является частью стандартной библиотеки и работает синхронно, в отличие от асинхронных вариантов в Node.js.