Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

for (начальное_значение; конечное_условие; инкремент)

While (условие)

инструкция

" Условие " - это логическое выражение, " инструкция " - это обычно блок.

Семантика оператора “ while ” может быть определена посредством блок-схемы, изображенной на Рис. 2‑3.

Рис. 2‑3. Семантика оператора "while"

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

Структура цикла в двух возможных вариантах приведена ниже:

while (выражение) {блок_выполнения}

либо

while (выражение): блок_выполнения endwhile;

Если произошёл вход в цикл, то, очевидно, внутри цикла должно произойти что-то (какие-то вычисления), что, в конце концов, приведёт к невыполнению (ложности) условия, по которому происходит вход в тело цикла. Иначе произойдёт так называемое «зацикливание», что означает невозможность самопроизвольного выхода из цикла.

Приведём примеры использования цикла while (Пример 2‑10):

Пример 2‑10

<?php //эта программа напечатает все четные цифры в интервале 1- 9

$i = 1;

while ($i < 10)

{

if ($i % 2 == 0) echo "$i <br>"; // печатаем цифру, если она четная

$i++; // и увеличиваем $i на единицу

}

echo "<br>";

//П

$n=1 ;//инициализация переменной обязательна. //иначе её значение будет равно нулю

while ($n < 10)

{

echo 'Значение $n = ', $n, "<br>";

$n *= 2;

} // Вывод всех степеней 2 до 2^31 включительно

$i = 1; $p = 2;

while ($i < 32)

{

echo $p, " ";

$p *= 2;

$i ++;

}

?>

2.2.9.2. Цикл с постусловием - оператор DO WHILE

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

Оператор “ do-while ” позволяет реализовать цикл с постусловием в программе и имеет следующий вид:

do

инструкция

While (условие)

" Условие " - это логическое выражение, " инструкция " - это обычно блок.

Тело цикла “ do-while ” выполняется хотя бы один раз, независимо от условия повторения цикла.

Семантика оператора “ do-while ” может быть определена посредством блок-схемы, изображенной на Рис. 2‑4.

 

Рис. 2‑4. Семантика оператора do-while

 

Элемент " условие " представляет собой логическое (булево) выражение, значением которого является true или false. Может отсутствовать часть с else.

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

Пример:

<?php

$i = 12;

do{

if ($i % 2 == 0) print $i;

// если число четное, то печатаем его

$i++;

// увеличиваем число на единицу

}

while ($i<10)

?>

2.2.9.3. Циклы FOR

Операторы, обеспечивающие циклические вычисления на основе “ for(для), были введены в высокоуровневые языки программирования с самого начала их развития.

В настоящее время известно несколько модификаций этого оператора.

Основная идея – использование начальной строки оператора для установки (инициализации) некоторых начальных условий, записи условий выхода из цикла и управления параметрами выхода в начальной строке оператора.

Традиционный цикл for

Семантика простейшего (традиционного) оператора цикла представлена на

Рис. 2‑5. Этот оператор основан на использовании счётчике цикла – переменой “ i ”. Шагом цикла по умолчанию является +1.

Сначала осуществляется инициализация переменной – счётчика. Начальное значение i=i1. После прохождения тела цикла, значение счётчика увеличивается на шаг =1. Вход в тело цикла прекращается при выполнении условия i>i2. При выполнении этого условия, управление передаётся на команду, следующую за телом цикла. В общем случае способ изменения состояния счётчика может быть другим.

 

Цикл типа for(для) Предписывает выполнять тело цикла для всех значений некоторой переменной (параметра цикла) в заданном диапазоне.
нц для i от i1до i2 тело цикла (последовательность действий) кц

Рис. 2‑5 а. Семантика традиционного цикла for

Рис. 2‑5 б. Блок-схема цикла for

Общий синтаксис традиционного цикла for имеет следующий вид:

for (начальное_значение; конечное_условие; инкремент)

{ фрагмент кода - тело цикла; }

Начальное_значение – это выражение, определяющее переменную (счётчик цикла) и инициализирующее её значение. Например, $i = 1.

При этом, в качестве начального значения можно использовать число, числовое выражение (например, 2+1), или значение переменной.

Конечное_условие – выражение, определяющее конечное значение счётчика. Например: $i < 10, или $i < $size, $i < $size + 10.

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

Инкремент (шаг) может быть отрицательным.

Переменная – счётчик цикла может быть использован в выражениях в теле цикла.

Указанные особенности отражены в примере Пример 2‑11.

Пример 2‑11

<?php

for ($i = 0; $i < 3; $i++)

{ echo "$i, Привет "; }

echo "<br>";

for ($i = 1; $i < 1+2; $i++)

{ echo "$i, Привет "; }

echo "<br>";

$j = 1; $k = 2; $l = 2;

for ($i = $l; $i < $j + $k; $i++)

{ echo "$i, Привет "; }

Вложенные циклы for

Один цикл for можно использовать внутри другого. Как это сделать, показано на примере Пример 2‑12, выводящем таблицу умножения чисел от 1 до 9.

Пример 2‑12

<?php

for ($i=1; $i<=9; $i++)

{

echo ("<br> Умножение на $i <br>");

for ($j=1; $j<=9; $j++)

{

$result = $i*$j;

echo "$i X $j= $result <br>";

}

}

?>

Универсальный цикл FOR

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

Для отображения структуры (синтаксиса) этого оператора в литературе встречаются четыре формы:

1. for (выражение1; выражение2; выражение3) {блок_выполнения}

2. for (начальное_выражение; условное_выражение; заключительное _выражение) {блок_выполнения}

1. for (инициализация; условие; приращение) { блок_выполнения}

2. for (инициализирующие_команды; условие_цикла; команды_после _прохода) {тело_цикла}

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

for (выражение1; выражение2; выражение3): блок_выполнения endfor;

При сравнении приведённых форм с синтаксисом традиционного оператора for видно, что он является частным случаем универсального.

Анализ четырёх форм позволяет в целом понять логику работы оператора. Очевидно, что перед началом итераций блока тела цикла происходит выполнение каких-то действий. Наиболее общей из них выглядит форма 1.

С расшифровкой выражений 2-4 все понятно. Сравнивая формы 3 и 1 догадываемся, что эти действия должны отображаться в выражении1 (или в начальном выражении).

Так же, как и в традиционном цикле, общие правила выполнения (алгоритм) универсального for следующие:

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

2. Условное выражение (выражение2) проверяется на истинность перед началом каждой итерации тела цикла.

3. После очередного выполнения тела цикла выполняется заключительное выражение (выражение3).

4. Рассмотренные выражения разделяются точкой с запятой (;).

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

Начнём с классического примера (Пример 2‑13):

Пример 2‑13

<?php

//Пример №1

echo "Начинает работать пример №1 <br>";

$t = 0;

for($i = 0,$j = 1; $t <= 4; $i++, $j++)

{

$t = $i + $j;

echo "\$t= $t, <br>";

}

echo "\$i = $i, \$j = $j, \$t = $t, <br>";

//Пример №2

echo "Начинает работать пример №2 <br>";

for($i = 0, $j= 0, $k = "Test". ": = "; $i < 10;$i++)$k = $k. ".";

echo $k;

echo "<br>";

//Один оператор в теле цикла можно написать без фигурных скобок

echo 'Далее - результаты работы программы с телом кода в { } <br>';

for($i = 0, $j= 0, $k = "Test". ": = "; $i < 10;$i++)

{$k = $k. ".";

echo "\$k равно $k <br>";

}

echo $k;

?>

Обратите внимание на то, что для увеличения $i на 1 используется оператор сложения с присваиванием. Для этого есть веские причины: циклы for в PHP не поддерживают более традиционной записи $i = $i + 1.

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

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

6. Выражение1 и выражение3 могут включать в себя любые действия.

7. Циклы for в PHP не поддерживают традиционной записи увеличения переменных цикла.

Рассмотрим процесс выполнения цикла в примере №1 (Пример 2‑13):

a. Выполняется начальное выражение: переменной $i присваивается значение 0, а переменной $j – значение 1.

b. Проверяется условное выражение – не превышает ли значение $t числа 4? Поскольку это так, выражение условия - ИСТИНА и тело цикла будет выполняться.

c. Выполняются действия внутри тела цикла. Вычисленное значение $t выводится на экран.

d. После выполнения тела цикла, итерация заканчивается выполнением заключительного выражения (выражение 3: $i++, $j++), в результате чего значения $i и $j увеличиваются на 1 и становятся равными 1 и 2 соответственно.

e. В начале следующей итерации проверяется условное выражение. Текущее значение $t равно 1, и поэтому тело цикла будет в очередной раз выполняться.

f. В конце данной итерации значения $i и $j становятся равными 2 и 3.

g. Поскольку текущее значение $t = 3, снова пройдёт очередная итерация и значение $t станет равным 5.

h. Очередное вычисление условного выражения даст значение ЛОЖЬ. Поэтому произойдёт выход из цикла с печатью рассмотренных переменных цикла $i, $y, $t.

Семантика цикла for в обобщенном графическом отображении представлен на рисунке Рис. 2-6. Проведённый выше анализ и рассмотренные примеры позволяют легко расшифровать эту конструкцию.

 

Рис. 2‑6. Обобщённое графическое отображение семантики цикла for

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

Другие модификации оператора цикла возможные в PHP рассмотрены в разделе 2.2.9.5.

Сравнение конструкций for и while

Хотя циклические конструкции for и while выполняют практически одинаковые функции, считается, что цикл for делает программу более наглядной. Это объясняется тем, что программист при виде команды for немедленно получает всю необходимую информацию о механике и продолжительности цикла, так как условие изменяется в самой управляющей конструкции, а не где-то внутри блока.

С другой стороны, в командах while приходится тратить лишнее время на поиск обновлений управляющих переменных — в больших программах это может занимать немало времени.

2.2.9.4. Частные случаи использования цикла for в PHP

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

1. Каждое из выражений 1-3 может быть пустым.

Если выражение 2 является пустым, то это означает, что цикл должен выполняться неопределённое время, так как в этом случае PHP считает это выражение всегда истинным. Иногда это бывает полезно.

В этом случае выйти из цикла можно с помощью оператора break.

Оператор break досрочно (то есть, без проверки стандартного условия выхода из цикла) прерывает выполнение любого оператора цикла (а не только оператора for). Естественно, что для этого потребуется использование какого-либо другого условия. Таким образом, цикл становится более гибким. Оператор break передаёт управление первой следующей за телом цикла строке (Пример 2‑14).

Пример 2‑14

<?php

for ($i=0;; $i++)

{

if ($i>=10) break;

// если $i больше или равно 10, то прекращаем работу цикла

if ($i % 2 == 0) echo "\$i = $i <br>";

// если число четное, то печатаем его

}

echo "Выход из цикла по оператору break";

$x = 5;

echo " Начальное значение \$x перед входом в цикл равно $x <br>";

for (;; $x += 2)

{

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

if ($x == 15)

break; // Выйти из цикла for;

}

echo "Выход из цикла по оператору break <br>";

//Вариант альтернативно1 формы оператора

$x = 7;

echo " Начальное значение \$x перед входом в цикл равно $x <br>";

for (;; $x +=2):

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

if ($x == 17):

break; //Выйти из цикла for

endif;

endfor;

echo "Выход из цикла по оператору break <br>"

?>

2. Приращение переменной цикла может осуществляться в зависимости от некоторого условия, определяемого в цикле. В этом случае приращение не должно указываться в управляющем выражении. Ниже приводится пример, в котором все выражения (в том числе и выражение приращения) являются пустыми (Пример 2‑15).

Пример 2‑15

<?php

//Печать чётных чисел в примере с пустыми выражениями в операторе for

$i=2; //задаем начальное значение счетчика

For (;;)

{

if ($i>=10) break;

//если $i больше или равно 10 то прекращаем работу цикла

if ($i % 2 == 0) echo "\$i = $i <br>";

//если число четное, увеличиваем счетчик на единицу

$i++;

}

?>

3. Использование оператора continue в операторах цикла.

Наконец, в операторе for предусмотрена возможность досрочного (то есть, без выполнения всех команд цикла) перехода к началу цикла (к первой строке цикла, содержащей управляющие выражения). Его применение продемонстрировано в примере Пример 2‑16.

Пример 2‑16

<?php

echo 'Использование оператора continue',"<br>";

$value = 1;

for ($value = -2; $value < 3; $value++)

{

if($value == 0)

{

continue;

}

echo "1 / $value = ", 1/$value, "<br>";

}

?>

В этом примере выводятся на экран числа, обратные к счётчику цикла. Для предотвращения деления на ноль, что вызвало бы сообщение о математической ошибке, с помощью оператора continue осуществляется отмена данного варианта.

Цикл FOREACH (Цикл ДЛЯ КАЖДОГО)

Конструкция foreach представляет собой разновидность for, включенную в язык для упрощения перебора элементов массива. Существуют две разновидности команды foreach, предназначенные для разных типов массивов:

Первая форма:

foreach (массив as Имя_Переменной1)

{ Итерационный блок }

Вторая форма:

foreach (массив as Имя_Переменной2 => Имя_Переменной1)

{ Итерационный блок }

Итерационные блоки – это совокупность операторов, для которых в каждой итерации будут определены значения соответствующие номеру итерации:

· Имя_Переменной1= значению очередного элемента массива и

· Имя_Переменной2= значению ключа очередного элемента

В приводимом ниже примере (Пример 2-17), переменная 1 с именем $value используется для вывода элементов массива $arr на печать в первой форме оператора foreach.

Массивы состоят из отдельных элементов, и цикл foreach используется для перебора всех элементов массива без использования счётчика цикла.

Пример 2‑17

<?php

$arr = array ("яблоки","апельсины", "бананы");

foreach ($arr as $value)

{

echo "Текущий фрукт: $value <br>";

}

$menu = array("pasta", "steak", "potatoes", "fish", "fries");

foreach ($menu as $item)

{

echo "Текущий продукт: $item <br>";

//print "$item <BR>"; //альтернативный способ печати

}

?>

Результат будет следующим:

Текущий фрукт: яблоки
Текущий фрукт: апельсины
Текущий фрукт: бананы
Текущий продукт: pasta
Текущий продукт: steak
Текущий продукт: potatoes
Текущий продукт: fish
Текущий продукт: fries

В этом примере следует обратить внимание на два обстоятельства.

Во-первых, конструкция foreach автоматически возвращается в начало массива (в других циклических конструкциях этого не происходит).

Во-вторых, нет необходимости явно увеличивать счетчик или иным способом переходить к следующему элементу массива — это происходит автоматически при каждой итерации foreach.

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‑1) создания массивов и одновременно рассмотрим некоторые особенности их использования в PHP.

Пример 3‑1

<?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‑2 создаются три массива: численно-индексированные $zoopark, $goroda и, так называемый, ассоциативный $photo.

 

Пример 3‑2

<?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, жёстком диске, магнитной ленте, блоке флэш-памяти или другом) он записан. Всё, что знает программа — это имя файла, его размер и атрибуты. Эти данные она получает от драйвера файловой системы. Именно файловая система устанавливает, где и как будет записан файл на физическом носителе (например, жёстком диске).

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

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

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

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

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

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

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

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

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

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

С:// имя_папки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 начинается с косой черты, то это не абсолютный путь, а относительный. Относительно текущего места на диске! А абсолютный путь всегда должен начинаться с буквы.

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

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...