в разрешении отказано - php разблокирует ссылку
У меня есть два файла: b.php и test.txt
<?php
$b = "test.txt";
unlink($b);
?>
И ошибка: Предупреждение: разорвать связь(test.txt) [функция.разорвать связь]: В разрешении отказано
Почему? b.php и test.txt это 777 и та же группа/логин
Если я установлю 777 в родительском каталоге, я могу выполнить отсоединение, но мне нужно установить 777 и вернуться к 755?
5 answers
Вам (как и в процессе, который выполняется b.php
, либо вам через CLI
, либо через веб-сервер) необходим доступ на запись в каталог, в котором находятся файлы. Вы обновляете содержимое каталога, поэтому доступа к файлу недостаточно.
Обратите внимание, что если вы используете функцию PHP chmod()
для установки режима файла или папки на 777
, вы должны использовать 0777
, чтобы убедиться, что число правильно интерпретируется как восьмеричное число.
Сначала вам потребуется закрыть файл с помощью fclose($handle);
он не удаляется, потому что файл используется. Поэтому сначала закройте файл, а затем попробуйте.
В дополнение ко всем ответам, которые есть у других друзей, если кто-то, кто просматривает этот пост, ищет способ удалить "Папку", а не "файл", следует позаботиться о том, чтобы папки должны удаляться с помощью функции php rmdir(), и если вы хотите удалить "Папку" с помощью unlink()
, вы столкнетесь с неправильным предупреждающим сообщением, в котором говорится "отказано в разрешении"
Однако вы можете создавать папки и файлы с помощью mkdir()
, но способ удаления папок (rmdir()
) отличается от способа, которым вы удаление файлов(unlink()
)
// Path relative to where the php file is or absolute server path
chdir($FilePath); // Comment this out if you are on the same folder
chown($FileName,465); //Insert an Invalid UserId to set to Nobody Owner; for instance 465
$do = unlink($FileName);
if($do=="1"){
echo "The file was deleted successfully.";
} else { echo "There was an error trying to delete the file."; }
Попробуйте это. Надеюсь, это поможет.
Разрешение на файл в порядке (0777), но я думаю, что вы на общем сервере, поэтому для правильного удаления файла используйте; 1. создайте правильный путь к вашему файлу
// delete from folder
$filename = 'test.txt';
$ifile = '/newy/made/link/uploads/'. $filename; // this is the actual path to the file you want to delete.
unlink($_SERVER['DOCUMENT_ROOT'] .$ifile); // use server document root
// your file will be removed from the folder
Этот небольшой код сотворит чудо и удалит любой выбранный файл, который вы хотите, из любой папки при условии, что фактический путь к файлу указан.