Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Vtoraya_chast_uchebnika_po_WWW_Okonchat_variant...doc
Скачиваний:
31
Добавлен:
27.09.2019
Размер:
6.06 Mб
Скачать

5.3.5.4. Чтение файла в индексированный массив: функция file()

Функция file() читает содержимое файла и помещает его в массив.

Синтаксис:

array file ( string $filename [, int $use_include_path [, resource $context ]] )

Каждый элемент возвращенного массива содержит соответствующую строку с символами конца строки. В случае ошибки, функция file() возвращает FALSE.

Можно использовать необязательный параметр use_include_path , равный "1", чтобы поиск файла также производился в каталогах, указанных директивой include_path.

Фрагмент кода иллюстрирует сказанное выше:

$lines = file($novpath);

// Осуществим проход массива и выведем номера строк и их содержимое в виде HTML-кода и в обычном виде:

foreach ($lines as $line_num => $line)

{

echo "Строка №<b>{$line_num}</b> : " . htmlspecialchars($line) . "<br>";

echo "Строка №<b>{$line_num}</b> : " . $line. "<br>";

}

Об использовании функции htmlspecialchars()!!!

Вообще говоря, эта функция относится к функциям преобразования символов. Но она настолько интересна, что хочется рассказать о ней подробнее. Функция делает одну простую, но важную вещь – производит преобразование спецсимволов в их HTML эквиваленты. Попросту говоря, эта функция гарантирует, что если кто-нибудь вдруг вздумает написать в гостевой книге или на форуме какой-то код (php, javascript и т.д.) он отобразиться совершенно нормально, но выполняться не будет!

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

Синтаксис функции:

string htmlspecialchars(string str [, int quote_style [, string charset]]);

Первый аргумент – строка, в которой надо выполнить преобразование.

В качестве второго необязательного аргумента принимается константа, задающая режим преобразования кавычек. Она может принимать следующие значения:

  • по умолчанию, используется ENT_COMPAT, преобразующая двойные кавычки, при этом одиночные остаются без изменений.;

  • в режиме ENT_QUOTES преобразуются и двойные, и одиночные кавычки;

  • в режиме ENT_NOQUOTES и двойные, и одиночные кавычки остаются без изменений.

Третий необязательный аргумент принимает строку, представляющую набор символов, используемых в преобразовании (по умолчанию ISO-8859-1).

5.3.5.5. Чтение файла целиком в строку: функция file_get_contents()

Синтаксис:

string file_get_contents ( string $filename [, bool $use_include_path [, resource $context [, int $offset [, int $maxlen ]]]] )

Данная функция идентична функции file() с той только разницей, что содержимое файла возвращается в строке, начиная с указанного смещения offset и до maxlen байтов. В случае неудачи, file_get_contents() вернёт FALSE.

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

5.3.5.6. Чтение файла с его синтаксическим разбором: функция fscanf()

Функция fscanf( ) обрабатывает данные из файла в соответствии с форматом.

Описание синтаксиса:

mixed fscanf ( resource $handle , string $format [ , $var_one [ , $var_two [... )

Функция fscanf() является альтернативой функции fgets(). Эта функция предназначена для чтения из файла структурированных данных, причем каждый элемент этих данных автоматически запоминается в отдельной переменной. В следующем примере рассмотрим текстовый файл с данными, содержащими имена и даты рождения персонала.

Текстовый файл с данными:

04-25-81 Иван Иванов

01-23-81 Сергей Петров

03-12-73 Светлана Ивановна

06-54-72 Юлия Васильевна

При обработке таких данных, пришлось бы не только читать по отдельности каждую строку файла, используя функцию fgets() , но и затратить немало времени на синтаксический разбор полученной строки, чтобы извлечь необходимый фрагмент данных (например, год рождения). Именно для использования в подобных ситуациях предназначена функция fscanf (). С помощью функции fscanf () можно читать строку из файла по заданному шаблону и автоматически сохранять каждый считанный элемент в отдельной PHP-переменной.

В описании синтаксиса функции:

  • $resource $handle - входной поток;

  • $format - задает шаблон, используемый при чтении;

  • $var_one и $var_two представляют собой переменные, в которых сохраняются разобранные фрагменты данных (эти необязательные параметры необходимо передавать по ссылке).

В случае успешного завершения fscanf () возвращает количество разобранных согласно шаблону элементов, а случае ошибки возвращается булевское значение false.

%b - Двоичное число.

%c - Одиночный символ.

%d - Десятичное число со знаком.

%u - Десятичное число без знака.

%f - Число с плавающей запятой.

%o - Восьмеричное число.

%s - Строка.

%x - Шестнадцатеричное число.

Замечание:

Если функции fscanf () не передано ни одной переменной для сохранения считанных значений, тогда вместо возврата количества считанных элементов эта функция вернет массив, содержащий все считанные значения, (fscanf () по-прежнему возвращает false в случае неудачного завершения.)

Знак амперсанта & означает передачу аргумента по ссылке, т.е. фактически передачу ее адреса. Например, если в функцию передать переменную по ссылке, то все изменения, которые будут делаться с этой переменной внутри функции, будут фактически проводиться над той переменной, которая была передана за пределами этой функции. Этот сценарий читает и разбирает каждую строку файла с датами рождений и выводит эти данные в удобочитаемом виде.

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

feof ($file_ref)

Во время чтения из файла эта функция применяется для определения того, есть ли еще данные для чтения. Если данных нет, она возвращает значение true. В вышеприведенном примере эта функция позволяет читать строки из файла, не зная предварительно количество строк или размер этого файла. После того, как все данные из файла считаны, он закрывается с помощью функции fclose ().

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

Любое пустое пространство в строке формата эквивалентно любому пустому пространству во входящем потоке. Это означает, что даже табуляция \t в строке формата может быть соотнесена одному символу пробела во входящем потоке данных.

Исходный файл для обработки с помощью функции fscanf () представлен на .

Рис. 5‑19. Содержание файла, обрабатываемого скриптом примера.

Обрабатывающий file4.txt обрабатывается скриптом примера Пример 5 -58.