Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
web-пр_МВ_ДЗ_ЛР_1.doc
Скачиваний:
20
Добавлен:
13.11.2019
Размер:
5.4 Mб
Скачать

Функция in_array

in_array("искомое значение","массив",

["ограничение на тип"]);

позволяет установить, содержится ли в заданном массиве искомое значение. Если третий аргумент задан как true, то в массиве нужно найти элемент, совпадающий с искомым не только по значению, но и по типу. Если искомое значение – строка, то сравнение чувствительно к регистру.

Например, имеется массив не изученных нами языков программирования. Мы хотим узнать, содержится ли в этом массиве язык PHP. Напишем следующую программу:

<?php

$langs = array("Lisp","Python","Java",

"PHP","Perl");

if (in_array("PHP",$langs,true))

echo "Надо изучить PHP<br>"; // выведет сообщение "Надо изучить PHP"

if (in_array("php",$langs))

echo "Надо бы изучить php<br>";

// ничего не выведет, поскольку в массиве есть строка "PHP", а не "php"

?>

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

Например:

<?php

$langs = array("Lisp","Python",array("PHP","Java"),"Perl");

if (in_array(array("PHP","Java"),$langs))

echo "Надо бы изучить PHP и Java<br>";

?>

Функция array_search

Это еще одна функция для поиска значения в массиве. В отличие от in_array в результате работы array_search возвращает значение ключа, если элемент найден, и ложь – в противном случае. А вот синтаксис у этих функций одинаковый:

array_search("искомое значение","массив",

["ограничение на тип"]);

Сравнение строк чувствительно к регистру, а если указан опциональный аргумент, то сравниваются еще и типы значений. До PHP 4.2.0, если искомое значение не было найдено, эта функция возвращала ошибку или пустое значение NULL.

<?php

$langs = array("","Lisp","Python","Java", "PHP","Perl");

if (!array_search("PHP",$langs))

echo "Надо бы изучить PHP<br>";

else {

$k = array_search("PHP",$langs);

echo "PHP я изучил $k-м";

}

?>

В результате мы получим строчку: PHP я изучил 4-м

Очевидно, что эта функция более функциональна, чем in_array, поскольку мы не только получаем информацию о том, что искомый элемент в массиве есть, но и узнаем, где именно в массиве он находится. А что будет, если искомых элементов в массиве несколько? В таком случае функция array_search() вернет ключ первого из найденных элементов. Чтобы получить ключи всех элементов, нужно воспользоваться функцией array_keys().

Работа с файлами

<?php

$h = fopen("1.txt","w");

/* открывает на запись файл 1.txt если он существует, или создает пустой

файл с таким именем, если его еще нет */

$h = fopen("dir/2.txt","w+");

/* открывает на запись и чтение или создает файл 2.txt в директории dir */

$h = fopen( "http://www.server.ru/dir/file.php","r");

/* открывает на чтение файл, находящийся по указанному адресу*/

?>

<?php

$h = fopen("my_file.html","w");

$text = "Этот текст запишем в файл.";

if (fwrite($h,$text)) echo "Запись прошла успешно";

else

echo "Произошла ошибка при записи данных";

fclose($h);

?>

В результате работы этого скрипта в браузере мы увидим сообщение о том, что запись прошла успешно, а в файле my_file.html появится строка "Этот текст запишем в файл.". Если бы этот файл существовал до того, как мы выполнили этот скрипт, все находящиеся в нем данные были бы удалены.

Если же мы напишем такой скрипт:

<?php

$h = fopen("my_file.html","a");

$add_text = "Добавим текст в файл.";

if(fwrite($h,$add_text,7)) echo "Добавление текста прошло успешно<br>";

else echo "Произошла ошибка при добавлении данных<br>";

fclose($h);

?>

то к строке, уже существующей в файле my_file.html, добавится еще семь символов из строки, содержащейся в переменной $add_text, т.е. слово «Добавим»

Считывание всех строк файла my_file.txt:

<?php $h = fopen("my_file.html","r");

while (!feof ($h)) {

$content = fgets($h);

echo $content,"<br>";}

?>

Функция stat( ) возвращает индексируемый массив с подробной информацией о файле с заданным именем: stat(string имя_файла)

В элементах массива возвращается следующая информация:

0 Устройство

1 Индексный узел (inode)

2 Режим защиты индексного узла

3 Количество ссылок

4 Идентификатор пользователя владельца

5 Идентификатор группы владельца

6 Тип устройства индексного узла

7 Размер в байтах

8 Время последнего обращения

9 Время последней модификации

10 Время последнего изменения

11 Размер блока при вводе/выводе в файловой системе

12 Количество выделенных блоков

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

$file = "datafile.txt";

list($dev, $inode, $inodep, $nlink, $uid, $gid, $inodev, $size, $atime, $mtime, $ctime, $bsize) = stat($file);

echo(date("F d Y H:i:s.", fileatime("1.html")); // вывод в формате даты

Задание к работе:

  • Ознакомиться с теоретическим материалом.

  • Cоздать скрипт на php для выполнении индивидуального задания (варианты 1-5 решают задачу 1, варианты 6-10 решают задачу 2, варианты 11-15 решают задачу 3, варианты 16-20 решают задачу 4). Использовать элементы диалога таблицы 8.1.

  • Оформить отчет согласно требованиям.

Задачи:

1 Создать скрипт для работы гостевой книги: использовать указанные элементы диалога для ввода информации о пользователях сайта и оставляемых комментариях, которая будет записывается в файл. Создать страницу с просмотром всех сообщений.

2 Создать текстовый файл с информацией о товарах (название, цена, фирма), в котором отдельная строка соответствует одному товару. Создать скрипт, который выводит на страницу прайс товаров с возможностью заказа товара по нажатию кнопки возле соответствующей строки. При заказе товара, обязательно пользователь вводит свое имя и требуемое количество товара. Список заказов хранить в другом файле, например “zakazi.txt”. Использовать следующую функцию для разбития строки файла на составляющие: list($name,$price)= split (":", $srt,2);

3 Создать список файлов указанной директории, с указанием размеров каждого файла и датой последнего обращения к файлу. Полученную информацию записать в файл statistic_files.txt.

4 В выбранном файле подсчитать кол-во ссылок, таблиц и рисунков.

Таблица 8.1- Индивидуальное задание для выбора элементов диалога

Текст задания

Текст задания

1

Text, password, textarea

11

Select, text

2

Select, textarea

12

Radio, text

3

radio, textarea

13

Checkbox, radio

4

Image (кнопка), textarea

14

Password, select

5

Text, select, reset

15

Select, textarea

6

Text, checkbox

16

Checkbox, select

7

Radio, select

17

Select, text

8

Text, password

18

Radio, textarea

9

reset, select

19

Image (кнопка), textarea

10

Text, radio

20

Select, textarea

Отчет должен содержать:

  • Название и цель работы.

  • Ход работы с детальным описанием выполненных действий с рисунками, листингом кода.

  • Экранные формы браузера с загруженными страницами.

  • Выводы о проделанной работе.

Вопросы для подготовки к защите работы:

  • Какие вы знаете функции для работы со строками?

  • Как открыть файл на чтение, для записи в начало, для записи в конец?

  • Приведите функции работы с директориями?

  • Приведите функции работы с массивами?

  • Обработка ошибок при подключении к файлам?