PHP. Учебник. 2005

fopen

Пред.

След.

fopen

(PHP 3, PHP4, PHP 5)fopen -- Открывает файл или URL

Описание

resource fopen (string filename, string mode [, bool use_include_path [, resource zcontext]])

- fopen() закрепляет именованый ресурс, указанный в аргументе filename, за потоком. Если filename передан в форме "scheme://...", он считается URL'ом и PHP проведёт поиск обработчика протокола (также известного как "обвёртка") для этой схемы. Если ни одна обвёртка не закреплена за протоколом, PHP выдаст замечание чтобы помочь вам отследить потенциальную проблему в вашем скрипте и продолжит выполнение, будто filename указывает на обыкновенный файл.

- Если PHP решил, что filename указывает на локальный файл, тогда он попытается открыть поток к этому файлу. Файл должен быть доступен PHP, так что вам следует убедиться, что права доступа на файл разрешают это. Если вы вкдючили безопасный режим или open_basedir, накладываются дальнейшие ограничения.

- Если PHP решил, что filename указывает на зарегистрированный протокол и этот протокол зарегистрирован как сетевой URL, PHP проверит состояние директивы allow_url_fopen. Если она выключена, PHP выдаст предупреждение и вызов fopen закончится неудачей.

Замечание: Список поддерживаемых протоколов доступен в разделе Прил. M. Некоторые протоколы (обвёртки) поддерживают context и/или опции php.ini. Обратитесь к соответствующей странице с описанием используемого протокола для получения списка опций, которые могут быть установлены. (например, значение php.ini user_agent используется обвёрткой http). Для получения описания параметров contexts и zcontext, обратитесь к разделу Ссылка CXXXII, Stream Functions.

Замечание: Поддержка контекста была добавлена

в PHP 5.0.0.

Замечание: Начиная с версии PHP4.3.2, бинарный режим является режимом по умолчанию для всех платформ, которые различают бинарный и текстовый, режимы. Если у вас возникли проблемы после обновления, попробуйте использовать флаг 't' в качестве обходного пути до тех пор, пока вы не измените свои скрипты для достижения большей портируемости, как отмечено выше.

- Параметр mode указывает тип доступа, который вы запрашиваете у потока. Он может быть одним из следующих:

Таблица 1. Список возможных режимов для fopen() используя mode
modeОписание
'r'- Открывает файл только для чтения; помещает указатель в начало файла.
'r+'- Окрывает файл для чтения и записи; помещяет указатель в начало файла.
'w'- Открывает файл только для записи; помещает указатель в начало файла и обрезает файл до нулевой длинны. Если файл не существует - пробует его создать.
'w+'- Открывает файл для чтения и записи; помещает указатель в начало файла и обрезает файл до нулевой длинны. Если файл не существует - пробует его создать.
'a'- Открывает файл только для записи; помещает указатель в конец файла. Если файл не существует - пытается его сздать.
'a+'- Открывает файл для чтения и записи; помещает указатель в конец файла. Если файл не существует - пытается его сздать.
'x'- Создаёт и открывает только для записи; помещает указатель в начало файла. Если файл уже существует, вызов fopen() закончится неудачей, вернёт FALSE и выдаст предупреждение уровня E_WARNING. Если файл не существует, попытается его создать. Это эквивалентно указанию флагов O_EXCL|O_CREAT для внутреннего системного вызова open(2). Эта опция поддерживается начиная с версии PHP4.3.2 и выше, и работает только для локальных файлов.
'x+'- Создаёт и открывает для чтения и записи; помещает указатель в начало файла. Если файл уже существует, вызов fopen() закончится неудачей, вернёт FALSE и выдаст предупреждение уровня E_WARNING. Если файл не существует, попытается его создать. Это эквивалентно указанию флагов O_EXCL|O_CREAT для внутреннего системного вызова open(2). Эта опция поддерживается начиная с версии PHP4.3.2 и выше, и работает только для локальных файлов.

Замечание: Разные семейства операционных систем имеют разные соглашения относительно окончанийя строк. Когда вы пишете текст и хотите вставить разрыв строки, вы должны использовать правильный(-ые) символ(ы) для вашей операционной системы. Системы семейства Unix используют \n в качестве символа конца строки, системы семейства Windows используют \r\n в качестве символов окончания строки и системы семейства Macintosh используют \r в качестве символа конца строки.

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

- Windows предлагает флаг режима текстовой трансляции ('t'), который автоматически переведёт \n во время работы с файлом. И наоборот - также вы можете использовать 'b' чтобы принудительно включить бинарный (двоичный) режим, в котором ваши данные не будут преобразовываться. Чтобы использовать эти режимы, укажите 'b' или 't' в качестве последней буквы параметра mode.

- Так как установка флага трансляции по умолчанию зависит от SAPI и версии PHP, которую вы используете, рекоммендуем явно задавать указанный флаг из соображений портируемости. Вы должны использовать режим 't' если вы работаете с текстовым файлом и использовать \n для разделения для обозначения конца строки в вашем скрипте, при этом не беспокоясь за читаемость ваших файлов в других приложениях типа "Блокнота". В противном случае вам следует использовать флаг 'b'.

- Если вы явно не укажете флаг 'b' во время работы с бинарными файлами, вы можете столкнуться со странной порчей ваших данных, включая испорченные файлы изображений и странные проблемы с символами \r\n.

Замечание: Из соображений портируемости, настоятельно рекоммендуется всегда использовать флаг 'b' при открытии файлов с помощью fopen().

Замечание: Кроме того, из соображений портируемости, также настойчиво рекоммендуется переписать старый код, который полагается на режим 't', чтобы вместо этого он использовал правильные окончания строк и режим 'b'.

- Необязательный третий параметр use_include_path может быть установлен в '1' или TRUE, если вы также хотите провести поиск файла в include_path.

- Если открыть файл не удалось, функция вернёт FALSE и сгенерирует ошибку уровня E_WARNING. Вы можете использовать @ для того, чтобы подавить это предупреждение.

Пример 1. Примеры использования функции fopen()

<?

$handle = fopen("/home/rasmus/file.txt", "r");

$handle = fopen("/home/rasmus/file.gif", "wb");

$handle = fopen("http://www.example.com/", "r");

$handle = fopen("ftp://user:password@example.com/somefile.txt", "w");

?>

- Если вы сталкиваетесь с проблемами во время чтения или записи файлов, и вы используете PHP в виде серверного модуля, убедитесь в том, что процесс сервера имеет доступ к файлам и директориям, которые вы используете.

- На платформе Windows, вам необходимо не забывать экранировать все обратные слеши в пути к файлу или использовать прямые слеши.

<?

$handle = fopen("c:\\data\\info.txt", "r");

?>

Внимание
При использовании SSL,

Microsoft IIS нарушает протокол, закрывая соединение без отправки

индикатора close_notify. PHP сообщит об этом как о "SSL: Fatal Protocol Error"

в тот момент, когда вы достигнете конца данных. Чтобы обойти это, вы должны

установить error_reporting на

уровень, исключающий E_WARNING.

PHP версий 4.3.7 и старше умеет определять, что на стороне сервера находится

проблемный IIS и не выводит предупреждение.

Если вы используете fsockopen() для создания ssl://сокета,

вы сами отвечаете за определение и подавление этого предупреждения.

Замечание: Когда опция safe mode включена, PHP проверяет,

имеет ли каталог, с которым вы собираетесь работать, такой же UID (владельца),

как и выполняемый скрипт.

- См. также раздел Прил. M, описание функций fclose(), fgets(), fread(), fwrite(), fsockopen(), file(), file_exists(), is_readable(), stream_set_timeout() и popen().

Пред.

Начало

След.

fnmatch

Уровень выше

fpassthru 22222

Free Web Hosting