отказано в разрешении - PHP unlink

У меня есть два файла: b.php и тест.txt

<?php 
$b = "test.txt";
unlink($b);
?>

и ошибка: предупреждение: unlink (test.тхт) [функция.unlink]: разрешение отказано

почему? b.php и тест.txt-777 и та же группа/login

если я установил 777 в Родительском каталоге, я могу выполнить unlink, но я должен установить 777 и вернуться к 755?

5 ответов


You (как в процессе, который выполняется b.php, либо вы через CLI или веб-сервер) требуется доступ на запись в каталог, в котором находятся файлы. Вы обновляете содержимое каталога, поэтому доступа к файлу недостаточно.

обратите внимание, что если вы используете PHP chmod() функция для установки режима файла или папки в 777 вы должны использовать 0777 чтобы убедиться, что число правильно интерпретируется как восьмеричное число.


сначала вам потребуется закрыть файл с помощью fclose($handle); Он не удаляется, потому что файл используется. Поэтому сначала закройте файл,а затем попробуйте.


в дополнение ко всем ответам, которые есть у других друзей, если кто-то, кто ищет этот пост, ищет способ удалить папка"" не "файл" , следует позаботиться о том, что папки должны удалить php rmdir () функция и если вы хотите удалить "папку" по unlink(), u столкнется с неправильным предупреждающим сообщением, в котором говорится "отказано в разрешении"

однако u может создавать папки и файлы с помощью 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

этот небольшой код сделает магию и удалит любой выбранный файл из любой папки, если фактический путь к файлу собран.