Более точно - меня интересует некий аналог стандартного С-шного errno, который, используй я эти функции в сишнике немедленно сказал бы мне в чём дело. А здесь как?
Предлагать error_reporting не надо - "вербательные" параметры сервера выкручены по-максиму в E_ALL и он ничего не говорит в данном случае. Попытка перехватить чего-нибудь куда-нибудь записываемое за спиной в лог через set_errorhandler ни к чему не приводит - не вызывается обработчик ошибок, т.е. провальную работу ftruncate сам интерпретатор не считает ошибкой.
Что делать, кроме шаманства?
Спустя 20 часов, 27 минут, 11 секунд (30.05.2010 - 19:12) Kuzya написал(а):
Помоему такого нет. В официальной документации сказано что fread в случае неудачи возвращает просто false. Может какой параметр указать забыли?
Спустя 8 часов, 18 минут, 44 секунды (31.05.2010 - 03:31) vasilisk написал(а):
Цитата (Kuzya @ 30.05.2010 - 16:12) |
Помоему такого нет. В официальной документации сказано что fread в случае неудачи возвращает просто false. Может какой параметр указать забыли? |
Если параметр из числа обязательных не указан - интерпретатор ругается. Т.е. идут сообщения. А здесь - нет ничего. Т.е. как я догадываюсь, там, в недрах интерпретатора просто вызывается fread и возвращается её буфер. А всякие errno - просто игнорируются. Вот я и хочу узнать - а как можно это errno извлечь? Ведь в libC эта errno есть...
Проблему можно обобщить на все функции файловой системы - как узнать, почему они провалились? И узнать не "программисту", а "программе" - ведь не всегда же программист сопровождает исполнение скрипта? Как приделать интеллектуальную реакцию программы на провал файловой операции? Скажем, я записываю файл, а прав на запись не хватает. Как сказать пользователю, что есть отсутствие именно прав, а не чего другое, переполнение диска, например или блокировка файла другим процессом?