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

Активист

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

Задача - узнать, есть ли права на удаление файла средствами 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() выполнилась успешно во всех распространенных ОС.
 

Андрейка

Senior pomidor developer
Активист
то должно соблюдаться, что бы функция unlink() выполнилась успешно во всех распространенных ОС.
у процесса должны быть права на удаление файла.. тебе это помогло?
 

Активист

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

И так очень часто здесь!
 

Frol

Новичок
сравнение гениально.
продавец "элитного магазина" должен предложить вездеход.
 

Фанат

oncle terrible
Команда форума
Обычно программисты налаживают систему при установке, и дальше уже все равботает, как запланировано.
В том числе и файлы удаляются.

Если речь идет о создании скрипта для распространения, то можно в систем реквайрементс поставить отсутствие сейф моде
 

Breeze

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

зы: is_writable будет достаточно ИМХО.. по крайней мере в *nix'ах
 

Активист

Активист
Команда форума
Выполню инструкции, которые там описаны. Поскольку их нужно выполнить один раз, а после удалить.

-~{}~ 06.07.07 10:48:

А если не могу удалить, то Выведу сообщении соответствующее.
 

С.

Продвинутый новичок
Извиняюсь за нескромность, какого рода инструкции?
 

Alexandre

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

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

Чтобы получить имя владельца в виде строки, используйте функцию posix_getpwuid().
 

Активист

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

Почему инсталятор устроен таким образом - не спрашивайте - это удобно.
 

Alexandre

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

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

но первый способ надежней (т.к. модуль posix может быть не установлен)
 

С.

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

Breeze

goshogun
Команда форума
Партнер клуба
Активист
Скажу тебе по секрету.. is_writable должен быть не только файл, но директория в которой он лежит
 
Сверху