Unlink: примеры (PHP)
unlink(string filename [, resource context]): boolФункция unlink() предназначена для удаления файла в файловой системе сервера. Она применяется, когда требуется программно избавиться от ненужного или временного файла, например, после обработки загрузки пользователя, очистки кеша или удаления устаревших логов.
Синтаксис функции:
bool unlink ( string $filename [, resource $context ] )
$filename (обязательный): Путь к удаляемому файлу. Может быть абсолютным или относительным. Важно иметь правильные права на запись в директории файла.
$context (опциональный): Ресурс контекста потока, созданный с помощью функции stream_context_create(). Используется для модификации поведения операции, например, при работе с HTTP или FTP. В большинстве случаев не требуется.
Функция возвращает true при успешном удалении и false в случае неудачи.
<?php
$file = 'test.txt';
if (file_exists($file)) {
if (unlink($file)) {
echo "Файл удален.";
} else {
echo "Не удалось удалить файл.";
}
} else {
echo "Файл не существует.";
}
?>Файл удален.
<?php
$result = unlink('old_data.csv');
var_dump($result);
?>bool(true)
<?php
$result = @unlink('ghost_file.txt'); // Используем @ для подавления предупреждения
var_dump($result);
?>bool(false)
rmdir() - Удаляет пустую директорию. Применяется для работы с каталогами, а не файлами.
rename() - Переименовывает или перемещает файл. Может использоваться как альтернатива удалению с последующим созданием, если нужен эффект "замены".
file_exists() - Проверяет существование файла или директории. Часто используется перед вызовом unlink() или rmdir().
SplFileInfo::isWritable() - Метод объекта SplFileInfo для проверки возможности записи (и удаления) файла. Работа в объектно-ориентированном стиле.
<?php
// Файл принадлежит другому пользователю или доступ только для чтения
$success = unlink('/etc/config.cfg');
var_dump($success); // false
?>Warning: unlink(/etc/config.cfg): Permission denied in ... bool(false)
<?php
// Файл открыт в другом приложении или скрипте
$fh = fopen('locked.log', 'a');
$deleted = unlink('locked.log');
fclose($fh);
var_dump($deleted);
?>bool(false)
<?php
$result = unlink('my_folder');
var_dump($result);
?>Warning: unlink(my_folder): Is a directory in ... bool(false)
В PHP 8.0 существенных изменений в поведении функции unlink() не было. Однако, начиная с PHP 7.0, ошибки уровня E_WARNING при сбое операции стали более информативными. В PHP 5.3 и выше улучшена обработка символических ссылок: unlink() удаляет саму ссылку, а не целевой файл.
<?php
$context = stream_context_create(array( /* опции */ ));
$result = unlink('ftp://user:pass@example.com/remote_file.txt', $context);
?><?php
function cleanDirectory($dir) {
$items = array_diff(scandir($dir), array('.', '..'));
foreach ($items as $item) {
$path = $dir . DIRECTORY_SEPARATOR . $item;
if (is_dir($path)) {
cleanDirectory($path);
rmdir($path); // Удаляем пустую директорию
} else {
unlink($path);
}
}
}
cleanDirectory('tmp_cache');
?><?php
try {
if (!file_exists('important.data')) {
throw new Exception('Файл для удаления не найден.');
}
if (!is_writable('important.data')) {
throw new Exception('Нет прав на удаление файла.');
}
if (!unlink('important.data')) {
throw new Exception('Неизвестная ошибка при удалении.');
}
echo "Операция завершена успешно.";
} catch (Exception $e) {
echo 'Ошибка: ', $e->getMessage();
}
?><?php
symlink('/var/www/original.zip', 'link_to_file.zip');
$deleted = unlink('link_to_file.zip'); // Удаляет ссылку, оригинал остается
var_dump($deleted);
echo "Оригинальный файл существует: " . file_exists('/var/www/original.zip');
?>bool(true) Оригинальный файл существует: 1
Unlink в Python
import os
os.remove('file.txt') # Удаляет файл
# Для рекурсивного удаления директорий: shutil.rmtree('directory')const fs = require('fs').promises;
async function deleteFile() {
try {
await fs.unlink('file.txt');
console.log('Файл удален');
} catch (err) {
console.error('Ошибка:', err);
}
}
deleteFile();-- Удаление строк из таблицы, а не файлов
DELETE FROM logs WHERE created_at < NOW() - INTERVAL 30 DAY;
-- Для работы с файлами используется команда системной оболочки через SELECT ... INTO OUTFILE или LOAD_FILEОтличия: В PHP unlink() работает на уровне файловой системы. В SQL операции обычно производятся с данными внутри таблиц. Python и Node.js используют похожий синтаксис, но в асинхронном контексте Node.js часто применяются промисы или колбэки.