в разрешении отказано - php разблокирует ссылку


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

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

И ошибка: Предупреждение: разорвать связь(test.txt) [функция.разорвать связь]: В разрешении отказано

Почему? b.php и test.txt это 777 и та же группа/логин

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

Author: eugui, 2012-11-28

5 answers

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

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

 22
Author: Arjan, 2012-11-27 23:43:23

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

 18
Author: Ashwin Pathak, 2014-04-24 04:24:09

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

Однако вы можете создавать папки и файлы с помощью mkdir(), но способ удаления папок (rmdir()) отличается от способа, которым вы удаление файлов(unlink())

 6
Author: ashkan nasirzadeh, 2018-03-07 11:04:54
// 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."; } 

Попробуйте это. Надеюсь, это поможет.

 3
Author: Ardi, 2012-11-27 23:33:24

Разрешение на файл в порядке (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

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

 0
Author: dean, 2017-06-02 15:02:32