Запись в файл
Запись в файл в РНР выполняется сравнительно просто. Для этого можно воспользоваться функцией 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.

Закрытие файла
По завершении использования файла его следует закрыть. Для этой цели служит функция fclose () (“file close” – “закрыть файл”), вызов которой показан ниже:
fclose($fp);
Эта функция возвращает значение true в случае успешного закрытия файла и false, если что-то этому помешало. Вероятность ошибки при этом намного меньше, чем при открытии файла, поэтому в данном случае мы решили не производить проверку результата ее выполнения.
Полная версия сценария processorder. php приведена в листинге 2.2.

|