Функции за работа с файловата система
PHP Manual

fopen

(PHP 4, PHP 5)

fopenОтваря файл или URL

Описание

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

Функцията fopen() свързва именован ресурс определен чрез параметър filename с поток.

Параметри

filename

Ако filename е във формат "scheme://..." се приема, че е URL и PHP ще търси подходяща опаковка (wrapper) за съответния протокол. Ако не бъде намерена опаковка за този протокол, PHP ще изведе съобщение, с цел да помогне за проследяване на потенциални пробелими в скрипта и после ще продължи сякаш filename е обикновен файл.

Ако PHP реши, че filename определя локален файл ще се опита да отвори поток към него. Файлът трябва да е достъпен за PHP, затова трябва да се убедите, че правата за достъп до файла позволяват това. Могат да важат допълнителни ограничения ако е активирано защитен режим или open_basedir.

Ако PHP прецени, че filename определя регистриран протокол и този протокол е регистриран като URL, PHP ще провери дали е разрешено allow_url_fopen. Ако е забранено (off), PHP ще изведе предупреждение и извикването на fopen ще се провали.

Забележка: Списъкът на поддържаните протоколи може да бъде намерен в List of Supported Protocols/Wrappers. Някой протоколи (наричани също опаковки (wrappers)) поддържат context и/или php.ini опции. Вижте конкретната страница за даден протокол, който използвате, за да разберете какви опции могат да бъдат използвани (например php.ini опцията user_agent използвана от http опаковката). За описание на contexts и параметъра zcontext вижте Stream Функции.

Под Windows трябва да освободите всички обратни наклонени, използвани в пътя до файла или трябва да използвате прави наклонени черти.

<?php
$handle 
fopen("c:\\data\\info.txt""r");
?>

mode

Параметърът mode определя типа на достъп, който искате за потока. Той може да бъде един от следните:

Списък за възможните режими при работа fopen()
Режим Описание
'r' Отваря само за четене. Установява указателя на файла в неговото начало.
'r+' Отваря за четене и запис. Установява указателя на файла в неговото начало.
'w' Отваря само за запис. Установява указателя на файла в неговото начало и нулира дължината на файла. Ако файлът не съществува се опитва да го създаде.
'w+' Отваря за четене и запис. Установява указателя на файла в неговото начало и нулира дължината на файла. Ако файлът не съществува се опитва да го създаде.
'a' Отваря само за запис. Установява указателя на файла в неговия край. Ако файлът не съществува се опитва да го създаде.
'a+' Отваря за четене и запис. Установява указателя на файла в неговия край. Ако файлът не съществува се опитва да го създаде.
'x' Отваря само за запис. Установява указателя на файла в неговото начало. Ако файлът съществува, fopen() ще върне FALSE и ще генерира грешка от тип E_WARNING. Ако файлът не съществува се опитва да го създаде. Това е равносилно да подаване на флагове O_EXCL|O_CREAT към използваната отдолу системна функция open(2). Този режим се поддържа от PHP 4.3.2 и по-късните и работи единствено за локални файлове.
'x+' Създава и отваря за четене и запис. Установява указателя на файла в неговото начало. Ако файлът съществува, fopen() ще върне FALSE и ще генерира грешка от тип E_WARNING. Ако файлът не съществува се опитва да го създаде. Това е равносилно да подаване на флагове O_EXCL|O_CREAT към използваната отдолу системна функция open(2). Този режим се поддържа от PHP 4.3.2 и по-късните и работи единствено за локални файлове.

Забележка: Различните фамилии операционни системи имат различно означаване за "край на ред" в текстови файлове. Когато записвате текстов файл и искате да вмъкнете прекъсване на ред се нуждаете от превилните символ(и) за "край на ред" за вашата операционна система. Базираните на Unix системи използват \n като символ за "край на ред", докато Windows системите използват \r\n, а Macintosh системите \r.
Ако използвате погрешни символи за "край на ред", когато записвате във файл, може да откриете, че в други програми, които използват файлоте те изглеждат странни.
Windows има флаг за трансформиране към текстов режим ('t'), който прозрачно ще трансформира \n към \r\n, когато работите с файла. В контраст на това, можете същп да използвате 'b', за да бъдете в двоичен режим, при който няма трансформиране на данните. За да използвате тези флагове, сложете или 'b' или 't' като последен на параметъра mode .
Подразбиращия се режим за трансформиране зависи от SAPI и версията на PHP, която използвате, така че се насърчава винаги да определяте подходящия флаг поради съображения за съвместимост. Трябва да използвате режим 't', когато работите с обикновени текстови файлове и използвате \n за "край на ред". При всички други случаи използвайте 'b'.
Ако не използвате 'b', когато работите с двоични файлове, може да се получат странни проблеми с вашите данни, включително повредени графични файлове и странни проблеми със символите \r\n.

Забележка: От съображение за съвместимост силно се препоръчва винаги да се използва 'b' при отварянето на файлове с fopen()

Забележка: Също поради съображение за съвместимост силно се препоръчва да пренапишете вашия код, който разчита на режима 't' за поставяне на правилните "край на ред" и да използвате вместо него режим 'b'.

use_include_path

Опционалния трети параметър use_include_path може да бъде '1' или TRUE ако искате да бъде претърсен и пътя указан чрез include_path за достигане до вашия файл.

context

Забележка: Контекстната поддръжка беше добавена в PHP 5.0.0. За повече подробности относно contexts, се обърнете към Stream Функции.

Връщани стойности

При успех връща файлов манипулатор, при грешка FALSE.

Грешки/Изключения

Ако отварянето се провали, функцията връща FALSE и се генерира грешка от тип E_WARNING. Можете да използвате @, за да поттиснете генерирането на тази грешка.

Дневник на промените

Версия Описание
4.3.2 От PHP 4.3.2 нататък, режима по подразбиране е двоичен ('b') за всички платформи, които имат двоичен и текстов режим. Ако имате проблеми с вашите скриптове след преминаване към по-нова версия на PHP - опитайте да използвате флага 't' за заобикаляне на проблема, докато преапишете вашия код по начин споменат по-долу.
4.3.2 Бяха добавени режимите 'x' и 'x+'

Примери

Example #1 fopen() примери

<?php
$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");
?>

Бележки

Предупреждение

Ако използвате SSL, Microsoft IIS ще наруши протокола, като прекъсне връзката без да изпрати индикатора close_notify. При достигане до края на данните, PHP ще съобщи за това чрез "SSL: Fatal Protocol Error". За да се справите с това, трябва да намалите нивото на error_reporting така, че да не генерира предупреждения. PHP 4.3.7 и по-късните версии могат да разкриват неправилно работещ IIS сървър, когато отворите потока чрез опаковката https://, и ще подтиснат предупреждението. При използване на fsockopen() за създаване на ssl:// сокет, разработчикът е отговорен за това да открие и подтисне предупреждението.

Забележка: Когато е включен в защитен режим, PHP проверява дали директорията, с която се работи, е със същия UID (собственик) като скрипта, който се изпълнява.

Ако имате проблеми с четенето и записването във файлове и използвате модулната версия на PHP, помнете че трябва да сте сигурни, че web сървъра има права за достъп до съответните директории и файлове.

Вж. също


Функции за работа с файловата система
PHP Manual