Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VOPROSY_PO_IP.docx
Скачиваний:
16
Добавлен:
18.05.2015
Размер:
693.24 Кб
Скачать

2.2.9.5. Об альтернативном синтаксисе операторов цикла

Альтернативный синтаксис применим к любому, из рассмотренных в разделах 2.2.9.1 – 2.2.9.4 операторов цикла и операторов типа if. Примеры его использования уже приводились.

В альтернативном варианте открывающая фигурная скобка заменяется на двоеточие (:), а закрывающая скобка - на соответствующий оператор из ряда:

  • endwhile,

  • endfor,

  • endfor,

  • endforeach,

  • endfor,

  • endif

25.Особенности создания и использования массивов в PHP.

3.2. Создание массивов и особенности их использования в php

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

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

Пример 3‑9

<?php

//Прямой метод создания массива и

//автоматическая нумерация его элементов

$frukt[] = "яблоко";

$frukt[] = "груша";

$frukt[2] = "слива";

$frukt[4] = "абрикос";

$frukt[] = "персик";

echo "Первый элемент массива \$frukt[0]= $frukt[0] <br>";

echo "Второй элемент массива \$frukt[1]= $frukt[1] <br>";

echo "Третий элемент массива \$frukt[2]= $frukt[2] <br>";

echo "Пятый элемент массива \$frukt[4]= $frukt[4] <br>";

echo "Шестой элемент массива \$frukt[5]= $frukt[5] <br>";

//-------------------------------------------------------------------------------

//Пример с пустыми элементами массива

// $klient[0]= "Иванов";

$klient[1]= "Петров";

$klient[2]= "Сатин";

$klient[3]= "Кожедуб";

echo "Первый элемент массива \$klient[0] = $klient[0] <br>";

echo "Второй элемент массива \$klient[1] = $klient[1] <br>";

//Проверим, является ли первый элемент массива пустым

//Значение $a будет равно TRUE(1),

//если проверяемая переменная будет пустой и

//FALSE (0),если переменная будет иметь какое-либо значение

$a = is_null($klient[0]);//

echo "\$a = $a <br>";

$klient[0]= "Иванов";

echo "Первый элемент массива \$klient[0] = $klient[0] <br>";

$a = is_null($klient[0]);

echo "\$a = $a <br>";

$klient[]= "Федотов";

$klient[]= "Сидоров";

echo "Пятый элемент массива \$klient[4] = $klient[4] <br>";

echo "Шестой элемент массива \$klient[5] = $klient[5] <br>";

//--------------------------------------------------------------------------------

//Использование строк в качестве индексов

//Индексы массивов могут быть разного типа одновременно

$klient['Москва'] = "Москвин";

$klient["Рязань"] = Рязанов;

echo "Седьмой элемент массива \$klient = $klient[Москва] <br>";

echo "Восьмой элемент массива \$klient = $klient[Рязань] <br>";

$klient[7] = "Сапожников";

echo "Девятый элемент массива \$klient = $klient[7] <br>";

$kolelem = count($klient);//Подсчёт числа элементов массива $klient

echo "В массиве \$klient $kolelem элементов <br>";

//------------------------------------------------------------------------------------------

//Индекс элемента массива может быть отрицательным

$klient[-1] = "Фирсов";

$kolelem = count($klient);//Подсчёт числа элементов массива $klient

echo "В массиве \$klient $kolelem элементов <br>";

echo "\$klient[-1] = ". $klient[-1]."<br>" ;

//-----------------------------------------------------------------------------------------

//Элементы массива могут быть разного типа

$klient[8] = 150;

echo "Одиннадцатый элемент массива \$klient = $klient[8] <br>";

//Проверка типа элементов массива $klient

$tip = is_string($klient[Рязань]);

if($tip)

echo 'Тип восьмого элемента $klient - строковый', "<br>";

$c = is_integer($klient[8]);

if($tip)

echo 'Тип одиннадцатого элемента $klient - целый', "<br>";

?>

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

По результатам анализа и выполнения можно сформулировать несколько правил, которым подчиняются массивы и работа с ними в PHP:

    1. Первый элемент массива может иметь целочисленный индекс, равный нулю. Следовательно, необходимо считать элементы массива, начиная с нулевого индекса. Поэтому, если в массиве у нас всего пять элементов, то индекс последнего (пятого по счёту) равен четырём (4), а первого - нулю (0).

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

    3. Если элемент массива не определён, то он является пустым, но сам по себе массив все равно существует.

    4. Если для элемента ключ не задан, то в качестве ключа берется максимальный числовой ключ, увеличенный на единицу.

    5. В качестве индекса можно использовать строки. При вызове элемента массива со строчным индексом, этот индекс используется без кавычек.

    6. Строчные и числовые индексы могут использоваться одновременно, но счёт числовых индексов происходит независимо от строчных индексов.

    7. Сами элементы одного и того же массива могут быть разного типа.

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

Существует более краткая форма создания массива при помощи функции array( ).

В примере Пример 3 -10 создаются три массива: численно-индексированные $zoopark, $goroda и, так называемый, ассоциативный $photo.

Пример 3‑10

<?php

//Использование функции array()для создания

//численно-индексированного массива в однострочной форме

$zoopark = array('волк', 'тигр',"медведь",страус);

echo $zoopark[0],"<br>";

echo $zoopark[2],"<br>";

echo $zoopark[3],"<br>";

//Создание массива не с нулевого индекса

//в многострочной форме

$goroda = array(3=> "Москва",

4=> "Самара",

5=> Арзамас);

echo $goroda[2],"<br>";//результатом будет пустая строка

echo $goroda[3],"<br>";

echo $goroda[5],"<br>";

//Использование функции array()для создания

//ассоциативного массива

$photo = array("name" => "dog.jpg", size => "130k","type" => "image/jpg");

echo $photo['name'],"<br>";

echo $photo["size"],"<br>";

echo $photo[size],"<br>";

echo $photo['size'],"<br>";

echo $photo['NamE'],"<br>";//Результатом будет пустая строка

echo "Конец работы";

?>

Численно-индексированные массивы часто называют списками, поскольку существует строгая упорядоченность значений элементов массива по номерам, последовательно увеличивающимся на единицу.

Ассоциативный массив – это массив, в качестве индексов элементов которого используются строки. То есть у ассоциативных массивов ключи – строковые.

Для присвоения ключа элементу ассоциативного массива с использованием функции array() применяется следующая конструкция:

Строковый ключ => Значение элемента массива

При этом буквы нижнего и верхнего регистров в строковых ключах воспринимаются интерпретатором PHP как различные. Ключом может быть абсолютно любая строка, содержащая пробелы, символы перевода строки, нулевые символы и так далее (Правило №9).

Массивы такого типа называются ассоциативными, так как при их использовании становится возможным организовать поиск элементов «по ассоциации» между различными понятиями.

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

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

Например, при помощи функции range():

$years = range(2001, 2010);

и

$obratnporiadokbukv = range ("я","а" );

Проверьте, какие массивы будут созданы (можно использовать любые имена массивов).

28.Понятие файла и файловой системы. Свойства файла. Относительные и абсолютные пути до файла при использовании Интернета.

Понятие файла и файловой системы

Файл (англ. file — папка, скоросшиватель) — концепция в вычислительной технике: сущность, позволяющая получить доступ к какому-либо ресурсу вычислительной системы, и обладающая рядом признаков:

  • фиксированное имя (последовательность символов, число или что-то иное, однозначно характеризующее файл);

  • определённое логическое представление и соответствующие ему операции чтения/записи.

Сущность, соответствующая понятию «файл» может быть любой — от последовательности бит до базы данных с произвольной организацией или любым промежуточным вариантом.

Если это последовательность бит – то ему соответствуют операции чтения/записи потока и/или массива (то есть, последовательные, или с доступом по индексу).

Если под файлом понимается база данных - то ему соответствуют команды системы управления базой данных (СУБД).

Возможны и промежуточные варианты – тогда говорят о чтении и разборе всевозможных форматов файлов.

В информатике можно использовать следующее, наиболее общее, определение: файл — поименованная совокупность байтов.

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

Итак, в конечном счете, файл представляет собой последовательность байтов, хранящуюся на каком-либо физическом носителе информации. Каждый файл имеет абсолютный путь, по которому определяется его местонахождение. В качестве разделителя пути в Windows может использоваться как прямой (/), так и обратный (\) слеш. В других операционных системах используется только прямой слеш.

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

  1. области данных (не обязательно на диске);

  2. устройства (как физические, так и виртуальные);

  3. потоки данных, в частности, вход или выход процесса («pipe» следует переводить словом «конвейер»);

  4. сетевые ресурсы;

  5. объекты операционной системы.

Файлы первого типа (то есть как области данных) исторически возникли первыми и распространены наиболее широко, поэтому часто «файлом» называют и область данных, соответствующую имени.

По мере развития вычислительной техники файлов в системах становилось всё больше. Для удобства работы с ними, их, как и другие данные, стали организовывать в структуры (тогда же появились символьные имена). Вначале это был простой массив, «привязанный» к конкретному носителю информации. В настоящее время наибольшее распространение получила древовидная организация с возможностью монтирования и вставки дополнительных связей (то есть ссылок).

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

Файловая система (англ. file system) — порядок, определяющий способ организации, хранения и именования данных на носителях информации ИТ-оборудования (использующего для многократной записи, и хранения информации портативные флеш-карты памяти в портативных электронных устройствах: цифровых фотоаппаратах, мобильных телефонах и т. д) и компьютерной техники. Она определяет формат содержимого и физического хранения информации, которую принято группировать в виде файлов. Конкретная файловая система определяет размер имени файла (папки), максимальный возможный размер файла и раздела, набор атрибутов файла. Некоторые файловые системы предоставляют сервисные возможности, например, разграничение доступа или шифрование файлов.

Файловая система связывает носитель информации с одной стороны и соответствующими API для доступа к файлам — с другой. Когда прикладная программа обращается к файлу, она не имеет никакого представления о том, каким образом расположена информация в конкретном файле, так же, как и на каком физическом типе носителя (CD, жёстком диске, магнитной ленте, блоке флэш-памяти или другом) он записан. Всё, что знает программа — это имя файла, его размер и атрибуты. Эти данные она получает от драйвера файловой системы. Именно файловая система устанавливает, где и как будет записан файл на физическом носителе (например, жёстком диске).

        1. Свойства файла

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

Итак, к основным свойствам файла относятся:

  • Имя файла и его расширение, то есть тип файла (обычный, исполняемый, каталог и т.п.);

  • Атрибуты файла, определяющие его свойства: только для чтения, скрытый, системный и т.д.;

  • Временные метки: время создания, время модификации, время последнего доступа;

  • Права доступа: право на запись, чтение, выполнение, удаление и другие.

Абсолютные и относительные пути (дорожки) до файла

В этом и следующем разделах приводятся сведения, позволяющие разобраться в деталях и правильно применить пути до файлов при реализации операций с ними.

Обычно под дорожкой файлов понимают запись:

С:// имя_папки1/…/имя_папкиN/имяфайла

На эту запись очень похожа следующая: http://site.ru/file.html

Однако, это - не путь до файла. Это - виртуальный адрес файла, так называемый URI, с которым работает браузер. Рассмотрим подробнее, чем отличаются эти две записи.

Адрес файла является виртуальным, как и сам Web-сервер. Сайт существует как бы в двух измерениях – реальном и виртуальном.

Для всех посетителей - это виртуальный Web-сервер, на котором не существует файлов. В частности, если иметь в виду приведённый выше адрес - файла file.html.

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

Вот в этом различии и кроются трудности, с которыми часто сталкиваются новички: теряют файлы, путают ссылки с файлами, обращаются к локальным файлам по протоколу HTTP или пытаются вставить в скрипт (посредством операции include) файлы от корня Web-сервера.

А всего-то надо:

1. разобраться в абсолютных и относительных путях до реальных файлов;

2. различать корень Web-сервера, как его видит браузер, и корень файловой системы на диске.

Начнем с первого.

Если путь указывается от корня системы, то это путь абсолютный. Это как почтовый адрес в реальной жизни - откуда бы мы не двигались, по точному адресу всегда точно найдётся нужное место. Примеры абсолютных путей:

/var/www/site/forum/index.php

/img/frame.gif

с:\windows\command.com

В UNIX (ЮНИКС) - системах и на Web-сайтах корень обозначается косой чертой - "/".

Это очень важно, так как это не просто палочка, а самостоятельный адрес, путь. В адресе http://www.site.ru/ последняя косая черта не для красоты! Она обозначает вполне конкретный адрес - начало сайта.

На диске в ЮНИКС-системах так же можно набрать "cd /" и ты попадешь в корневой каталог.

В Windows-системах файловая система разбивается по дискам, поэтому, в абсолютном адресе надо указывать имя диска. Абсолютного корня всей файловой системы в Windows нет, у каждого диска – свой корень. Например, C:\ E:\ . Поэтому, даже если путь в Windows начинается с косой черты, то это не абсолютный путь, а относительный. Относительно текущего места на диске! А абсолютный путь всегда должен начинаться с буквы.

Если в начале пути корень не указать, то этот путь будет относительным, и он достраивается от текущего положения. В реальной жизни это напоминает совет, как найти магазин - "пройти два квартала прямо (с этого места), затем повернуть налево и там все время прямо". Дойти по такому пути можно только из конкретной точки. Если следовать совету, начиная путь из другой точки, то попадешь уже в иное место.

Самый простой пример относительного пути - это просто имя файла. Если файл находится в том же каталоге (папке), с которым работает программа - она его найдет, добавив текущий путь к имени файла. Текущий путь – это путь каталога, в котором находится работающая программа.

Ниже приведены примеры, из которых понятны принципы указания относительных путей (дорожек) до файла:

  • file.php (файл лежит в той же папке, в которой лежит работающая программа);

  • ./file.php (файл лежит в той же папке; такая запись иногда требуется в некоторых ЮНИКС-системах);

  • images/picture.jpg (файл лежит в папке (каталоге) images, которая находится в текущей);

  • ../file.php (файл лежит в папке, которая расположена на один уровень выше от текущей);

  • ../../file.php (файл лежит в папке, которая расположена на два уровня выше от текущей).

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

Теперь перейдём к рассмотрению второго пункта нашей программы, а именно, к выяснению, чем корень (корневая папка) каталога Web-сервера, как его видит браузер, отличается от корня (корневой папки) файловой системы на диске.

На диске путь к файлу скрипта может быть таким:

/var/www/site/forum/index.php

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

http://www.site.ru/forum/index.php

В этом примере можно увидеть, где пересекаются два измерения: у этих двух адресов есть общая часть - /forum/index.php - она-то и служит причиной путаницы.

Для браузера это самый полный путь, который только может быть. Он начинается от корня сайта. Для скрипта же, исполняющегося на сервере - это всего лишь часть пути. Для скрипта путь /forum/index.php окажется несуществующим - в корне диска нет каталога forum! Чтобы получить полный путь для того, что на сайте выглядит как /forum/index.php, надо приставить слева к нему путь к папке, которая считается корневой для всего Web-сервера.

В нашем примере - это /var/www/site.

Эта часть пути задается в конфигурации реального Web-сервера, и именно он содержится в глобальной предопределённой системной переменной PHP (о глобальных системных переменных подробнеерассказано при обсуждении примера Error: Reference source not found).

$_SERVER['DOCUMENT_ROOT'].

$_SERVER - это так называемый предопределённый массив, причём один из самых важных. В него PHP-интерпретатор помещает переменные, полученные от сервера. Без данных переменных сложно организовать полноценную поддержку Web-приложений.

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

Рассмотрим следующий пример. Допустим, у вас на сайте есть два раздела:

http://www.site.ru/about/info.phpи http://www.site.ru/job/vacancy.php

Если в файле info.php сделать ссылку просто на vacancy.php, то браузер ее не найдет - он будет искать адрес http://www.site.ru/about/vacancy.php, достраивая путь от текущего каталога. Поэтому надо писать полный путь от корня сайта - /job/vacancy.php

Всё это касается, естественно, не только тегов HTML <a>, но и <img>, и любых других, где используются ссылки на другие файлы.

Ссылки на локальные адреса следует писать без указания протокола и домена - только путь от корня сайта - /job/vacancy.php. Ссылки же на другие сайты следует писать полностью - http://www.site1.ru/job/vacancy.php. PHP предоставляет развитые средства для работы с файлами, каталогами и URL-ами. Одним из них является константа глобальная__FILE__, которая всегда содержит имя текущего исполняемого файла. Мы будем использовать эту константу в примерах.

29.Фукции основных операций с файлами в PHP.