Узнать, есть ли права на удаление файла

Активист

Активист
Команда форума
Узнать, есть ли права на удаление фвйла

Задача - узнать, есть ли права на удаление файла средствами PHP

Если, скажем, у нас файл file.txt имеет права на запись средствами PHP (is_writable === true), но при, если PHP работает как www, а владелец файла - user, получаем - нет прав.

Подумал сделать следующее -
if (fileowner("file.txt") !== getmyuid()) {
exit("No permissions to delete file.txt");
}
Верно?

И еще, обязательно ли иметь права на запись, что бы удалить файл, или нужен какой-то специальный флаг.
Как это будет работать в разных ос FreeBSD, Linux, Windows?

Или может быть есть какой-либо другой способ?
 
PHP:
if (!unlink("file.txt")) {
exit("No permissions to delete file.txt");
}
 
Типа вы@@@ся ?

Зачем писать, что бы только что-нибуть написать? Я похож на дебила, который задает дебильные вопросы?

Мне нужно знать, наверняка, удалится ли файл после выполнения указанных в нем инструкций или нет, а ты тут пиши х...ю

PHP:
<?php
error_reporting(E_ALL);

if (!unlink("file.txt")) {
	exit("No permissions to delete file.txt");
}
?>

Код:
Warning: unlink(file.txt) [function.unlink]: Permission denied in D:\Web\www\localhost\htdocs\test.php on line 4
No permissions to delete file.txt

Подкорректируют вопрос:
Что должно соблюдаться, что бы функция unlink() выполнилась успешно во всех распространенных ОС.
 
Активист
то должно соблюдаться, что бы функция unlink() выполнилась успешно во всех распространенных ОС.
у процесса должны быть права на удаление файла.. тебе это помогло?
 
Ну а если ты приходишь в элитный магазин, и спрашиваешь:
"Мне нравится вот этот автомобиль, не подскажите, сколько он стоит?"
А тебе отвечают
"К сожалению, вот эта яхта не продается"
Как на это реагировать?

И так очень часто здесь!
 
сравнение гениально.
продавец "элитного магазина" должен предложить вездеход.
 
Обычно программисты налаживают систему при установке, и дальше уже все равботает, как запланировано.
В том числе и файлы удаляются.

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

зы: is_writable будет достаточно ИМХО.. по крайней мере в *nix'ах
 
Выполню инструкции, которые там описаны. Поскольку их нужно выполнить один раз, а после удалить.

-~{}~ 06.07.07 10:48:

А если не могу удалить, то Выведу сообщении соответствующее.
 
Извиняюсь за нескромность, какого рода инструкции?
 
[offtop]цирк да и только...
А если не могу удалить, то Выведу сообщении соответствующее.
и что пользователь будет делать с твоим сообщением, если это конфедициально, если информация должна быть удалена, а система не смогла ее удалить...?
Отвечу: Пользователь будет себя чуствовать, что на него вылили ведро воды...

Подсказка к решению:
узнать группу - команда echo `whoami`
узнать пермишенны команда echo `ls -l <full/path/to/file>`
стоит заметить, что кавычки обратные

Чтобы получить имя владельца в виде строки, используйте функцию posix_getpwuid().
 
Alexandre
Это файлы. содержащие иструкции инстоляции, т.е. система многомодульная, и очень много сайтов приходится поддерживать (в основном обновлением занимаются люди очень мало понимающие в правах unix, PHP), инсталются только те модули, которые нужны, или же подключаются новые только копированием нужных директорий модулей.
Естественно SQL не нужно выполнить два раза. Проверка на IS_WRITABLE проходит, но файлы не удаляются (не достаточно прав)

Почему инсталятор устроен таким образом - не спрашивайте - это удобно.
 
Активист см Подсказка к решению (предыдущий пост)
там указаны команды, как можно проверить права. Хочу заметить, что надо проверить ось, в винде работать не будет ( если не установлен пакет UnixUtil ^:) )

ну еще можно использовать функцию stat(), чтоб не заморачиваться с парсингом ls
которая дает uid & gid
их можно сравить с posix_getgrgid и posix_getegid, posix_geteuid

но первый способ надежней (т.к. модуль posix может быть не установлен)
 
Почему инсталятор устроен таким образом - не спрашивайте - это удобно.
Ну что ж... Тогда ты станешь возможно первым в мире специалистом в суггестологии удаления файлов. Везет тебе...
 
Активист
Скажу тебе по секрету.. is_writable должен быть не только файл, но директория в которой он лежит
 
Сверху