Запись в файл

Запись в файл в РНР выполняется сравнительно просто. Для этого можно воспользоваться функцией fwrite() (“file write” — “запись в файл”) или fputs() (“file put string” — “запись строки в файл”); fputs () — это псевдоним fwrite(). Функция fwrite() вызывается следующим образом:

fwrite($fp, $outputstring);

Этот вызов указывает РНР на необходимость записи строки из переменной $outputstring в файл, на который указывает $fp.

Новой альтернативой fwrite() является функция file_put_contents (), которая имеет следующий прототип:

int file_put_contents ( string filename,

................................string data

................................[, int flags

................................[, resource context]])

Эта функция записывает строку, передаваемую в параметре data, в файл с именем filename без необходимости его открытия и закрытия с помощью функций fopen () и fclose (). Функция появилась в РНР 5 и к ней имеется связанная функция file_ get_contents (), которая будет обсуждаться далее. Необязательные параметры flags и context используются, в основном, для записи в удаленные файлы с помощью, например, HTTP или FTP.

Параметры функции fwrite ()

Фактически функция fwrite () принимает три параметра, при этом третий из них является необязательным. Прототип функции fwrite () имеет следующий вид:

int fwrite(resource handle, string string [, int length])

Третий параметр length задает максимальное количество записываемых байтов. Если этот параметр присутствует в вызове функции fwrite (), она будет записывать строку string в файл, на который указывает параметр handle, до тех пор, пока не достигнет конца строки или не запишет length байт, в зависимости от того, что произойдет раньше.

Длину строки в РНР можно получить с помощью встроенной функции strlen ():

fwrite($fp, $outputstring, strlen($outputstring));

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

Форматы файлов

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

Сейчас необходимо создать строку, которая представляет одну запись в нашем файле данных. Это можно сделать следующим образом:

$outputstring = $date. "\t" . $tireqty. " покрышек\t"

.$oilqty." бутылок масла\t".$sparkqty." свечей зажигания\t\$"

.$total."\t".$address."\n";

В этом простом примере каждая запись заказа сохраняется в отдельной строке файла. В таком случае в качестве простого разделителя записей используется символ новой строки. Поскольку символы новой строки невидимы, мы представляем их в виде управляющей последовательности "\n".

В данном курсе поля данных будут всегда записываться в одном и том же порядке, а в качестве разделителя полей используется символ табуляции. Поскольку и этот символ невидим, он также будет представлен управляющей последовательностью "\t". В качестве разделителя можно использовать любой легко читаемый признак.

Разделителем, или ограничителем, должна быть подстрока, которая наверняка не будет встречаться в исходных данных, иначе придется подвергнуть исходные данные дополнительной обработке с целью удаления или преобразования всех вхождений такого ограничителя.

После обработки нескольких заказов содержимое файла может выглядеть примерно так, как показано в листинге 2.1.

Запись в файл