не понятки с unlink

LEOnidUKG
На сайте с 25.11.2006
Offline
1724
961

Ничего не могу понять :(

Есть файл:

$file=Z://ajaxupload2/files/12396-2089

echo filesize($file);

echo file_get_contents($file);

Могу узнать размер, могу считать данные.

А вот:

unlink($file);

Warning: unlink(ajaxupload2/files/12396-2089) [function.unlink]: No such file or directory

Нету файла. Как это так?! Тестирую под виндой, поэтому с правами проблем не должно быть. Но тоже самое и линухе.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
edogs software
На сайте с 15.12.2005
Offline
775
#1

Вопреки распространённому мнению, в виндах, как минимум под ntfs, таки есть система управления правами доступа к файлам. Скорее всего у Вас банально нет прав на удаление файла. Поэтому чтение работает и получение размера файла тоже. Попробуйте заодно создание и изменение, если и они не сработают - будет 100% ясно в чем дело. Еще один нюанс в виндах, если файл на момент попытки удаления у Вас открыт, тоже может выдаваться такая же ошибка.

По поводу юникса, в принципе опять же - права доступа могут быть причиной. Но еще open_base_dir может срабатывать в safe_mode. При чем open_base_dir у некоторых хостеров (слава богу редко) работает как-то кривовато, и иногда надо выбирать что использовать - относительный или абсолютный путь, потому что работает только с одним:)

p.s.: не четко по Вашему вопросу, и ответ не полный, но читануть по диагонали смысл имеет http://forum.php.su/topic.php?forum=1&topic=449

Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход. Продаем lenovo legion в спб, дешевле магазинов, новые, запечатанные. Есть разные. skype: edogssoft
LEOnidUKG
На сайте с 25.11.2006
Offline
1724
#2

не не не... всё банальнее)))

он от корня не умеет работать... убираю $_SERVER['DOCUMENT_ROOT'] и он работает т.е. просто оставляю /ajaxupload2/files/12396-2089

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

Ещё и только под виндой оказывает...

=DEREK=
На сайте с 07.05.2009
Offline
130
#3

Используйте один слеш после буквы диска.

$file = 'Z:/ajaxupload2/files/12396-2089';

И будет работать. Проверял на Win7.

Показываю фокусы с Drupal (/ru/forum/526565)
LEOnidUKG
На сайте с 25.11.2006
Offline
1724
#4
=DEREK=:
Используйте один слеш после буквы диска.

$file = 'Z:/ajaxupload2/files/12396-2089';

И будет работать. Проверял на Win7.

Да там в том и прикол, что

В винде при $_SERVER['DOCUMENT_ROOT']

есть последний слэш, а в линухе его нету.

Ок.

Но всё равно вопрос, почему другие функции понимают, а эта нет.

Может баг? :)

[umka]
На сайте с 25.05.2008
Offline
456
#5
LEOnidUKG:
Может баг? :)

В виндовс? откуда?!

Лог в помощь!
LEOnidUKG
На сайте с 25.11.2006
Offline
1724
#6
'[umka:
;8316711']В виндовс? откуда?!

да не, в том, что filesize и другие понимают "//", а unlink нет.

Чем unlink "лучше", чем остальные?

=DEREK=
На сайте с 07.05.2009
Offline
130
#7

Быть может потому что unlink это вроде сишной unlink? Так в мануале пишется. Других видимых отличий не нашел пока. Да и именно эта функция указана на странице описания Filesystem протокола. Но это лишь догадки 🙅

LEOnidUKG
На сайте с 25.11.2006
Offline
1724
#8
(a path which does not begin with /, \, \\, or a Windows drive letter)

Мануалы, мануалы... Но всё же думаю можно было как-то это в один стиль чтоли...

Но ничего про "//" :D

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий