Как проверить, доступен ли ресурс потока PHP для чтения или записи?

Как мне проверить в PHP, является ли ресурс потока (или указатель файла, дескриптор или что-то еще, что вы хотите их назвать) читаемым или записываемый? Например, если вы столкнулись с ситуацией, когда вы ничего не знаете о том, как ресурс был открыт или создан, как проверить, доступен ли он для чтения? И как проверить, доступен ли он для записи?

На основании проведенного мной тестирования (только с обычными текстовыми файлами с использованием PHP 5.3.3), fread () не выдает ошибок ни на каком уровне, когда ресурс недоступен для чтения. Он просто возвращает пустую строку, но он также возвращает пустой файл. И в идеале было бы лучше иметь проверку, которая не изменяет сам ресурс. Проверка возможности чтения ресурса путем попытки чтения из него изменит положение указателя.

И наоборот, fwrite () не выдает ошибок ни на каком уровне, когда ресурс недоступен для записи. Он просто возвращает ноль. Это немного более полезно, потому что если вы пытались записать определенное количество байтов в файл, а fwrite () возвращает ноль, вы знаете, что что-то пошло не так. Но все же это не идеальный метод, потому что было бы намного лучше узнать, доступен ли он для записи, прежде чем мне нужно будет писать в него, чем пытаться писать в него и посмотреть, не сработает ли он.

Кроме того, в идеале проверка должна работать с любым видом потокового ресурса, а не только с файлами.

Возможно ли это? Что-нибудь подобное существует? Мне не удалось найти ничего полезного. Заранее благодарим за ответы.

18
задан jnrbsn 14 March 2011 в 03:02
поделиться