разрешение отклонено - php unlink

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

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

и ошибка: Предупреждение: unlink (test.txt) [function.unlink]: Отказано в доступе

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

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


person eugui    schedule 27.11.2012    source источник
comment
Они в одном каталоге?   -  person Explosion Pills    schedule 28.11.2012
comment
может быть, вам нужно разрешение на запись в каталог, в котором они находятся, для процесса, который запускает php-код.   -  person Martin Sommervold    schedule 28.11.2012
comment
Является ли это частью веб-сайта? Если это так, вам нужно убедиться, что процесс веб-сервера имеет права доступа к каталогу и/или файлу.   -  person akatakritos    schedule 28.11.2012
comment
Проверьте разрешения родительского каталога. Попробуйте установить 777 в родительском каталоге и посмотрите, изменит ли это что-нибудь.   -  person craig1231    schedule 28.11.2012
comment
если я установлю 777 в родительском каталоге, тогда я смогу выполнить unlink, но мне нужно установить 777 и вернуться к 755?   -  person eugui    schedule 28.11.2012
comment
Вы можете установить его обратно на 755, но тогда вы не сможете создавать новые файлы или удалять существующие, пока не вернете режим на 777.   -  person Arjan    schedule 28.11.2012
comment
Мне нужно установить 777 в папке, чтобы выполнить отвязку?   -  person eugui    schedule 28.11.2012
comment
.htaccess капчи: запретить от всех, при изменении на разрешение от всех сообщение об ошибке больше не появляется   -  person khaled_webdev    schedule 23.01.2014
comment
может быть, вам стоит попробовать использовать абсолютный путь. если проблема сохраняется даже после разрешений, ‹?php echo $_SERVER['DOCUMENT_ROOT']; ?› даст вам абсолютный путь   -  person VishalParkash    schedule 27.02.2020


Ответы (5)


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

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

person Arjan    schedule 27.11.2012
comment
Пример chmod php: chmod("/somedir/somefile", 777); php.net/manual/en/function.chmod.php Также обратите внимание: сама папка должна быть исполняемой всеми. - person Avatar; 18.02.2021

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

person Ashwin Pathak    schedule 24.04.2014

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

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

в итоге как факт:

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

например, если вы хотите readSync файл, который не существует, с помощью node fs module вы столкнетесь с неправильной EPERM ошибкой

person kia nasirzadeh    schedule 07.03.2018

// 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."; } 

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

person Ardi    schedule 27.11.2012
comment
chown() [function.chown]: операция не разрешена - person eugui; 28.11.2012
comment
Вероятно, это связано с тем, что у вас нет прав на изменение владельца файла. Можете ли вы попробовать изменить права доступа к файлу, чтобы увидеть, изменится ли он? (например, chmod(test.txt, 0666). Вы можете попробовать отключить его на 666, чтобы посмотреть, что произойдет. Можно ли увидеть пользователя, которому принадлежит файл? - person Ardi; 28.11.2012

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

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

person Dean    schedule 02.06.2017