Головна Інтернет Софт Hardware Мобіленд Вебмайстру Адміну Coding Hackzone Форум

Coding:

Программируем на РНР


Это не только очень просто – это еще и захоплююе! К такому выводу неизменно приходишь, если начинаешь знакомиться с основами программирования языком гипертекстового препроцессора РНР. Ну вот, только начало, а уже непонятные слова пошли. Это же нужно было придумать такое – гипертекстовый препроцессор! Так что для улучшения восприятия материала давайте предварительно условимся, что будем применять упрощенные и понятны всем сроки, что бы было понятно. И еще одна непременная условность – делаем все так, как делаем. Есть несколько способов открыть Панель Управления в Windows, есть разные способы приготовить одно и то же блюдо, и есть разные способы и методы программирования. С поставленной задачей можно справиться так, как описано, и совсем по-другому. Но в нашем случае –акцент будет делаться на простоту и логичность, а не на скорость и чистоту кода. Все это придет немного позже, а пока наша цель – учитьсяучиться, и еще раз учиться. В продолжение темы, поднятой в статье “РНР для всех! ”, мы углубимся дальше в чрезвычайный мир програмування

  Циклы в РНР.

 

Циклы в программировании – то есть операции, которые повторяются. Начало (точка отсчета) указывается вначалу цикла, а длительность его выполнения ограничивается каким-либо условием. Примером цикла может служить копирование нескольких файлов. Алгоритм выполнения этого задания можно описать так: установить счетчик скопированных файлов в нуль, скопировать файл, проверить или закончились файлы, если нет - увеличить счетчик скопированных файлов, вернуться к началу цикла (опять скопировать файл), если так – закончить цикл. Теперь рассмотрим, как циклы реализуются в синтаксисе РНР.

 

$i = 0; $n = 10;

while ($i <= $n):

echo $i.”
\n”;

$i++;

endwhile;

?>

 

Зміст скрипту очень простой. Предоставляем переменной $ і значение, которое отвечает начальные циклу, а переменной $ n – значение конца цикла. Дальше открываем цикл оператором WHILE ( ), и внутри его дужек описываем условие, при выполнении которому цикл будет продолжать свою работу. В нашем случае выполнение не перервется, пока $i <= $ n . Как только это условие будет нарушено, управление будет передано следующей за циклом операции РНР. Внутри цикла могут быть любые команды РНР (разделенные между собой обычно точкой с запятой). Только нужно следить за тем, что бы переменная $ і, что используется в цикле, была увеличена (и совсем не обязательно на единицу), инакше цикл станет бесконечным, и интерпретатор РНР будет выполнять его, покане закроется сессия (окно браузера). Оператор ENDWHILE означает конец цикла. Скрипт, описанный здесь, выводит на экран браузера цифры, начиная с 0 до 10. Причем цифры будут выведены в столбик, потому что после вывода на экран значения переменной $ і мы выводит HTML -тег переводе строки (< br >). После него идет перевод строки для кода, переданного клиенту (его можно посмотреть, выбрав пересмотр в виде HTML в меню Вашего браузера). Это не обязательно, но таким способом достигается читабельность кода. Например я привожу еще один вариант выполнения отмеченной выше задачи, но уже намного более правильно в содержании чистоты кода и скорости виконання

 

$i = 0; while ($i <= 10) { echo $i++.”
”; }

?>

 

Дивно, но эти два примеры абсолютно идентичны в смысле результата. Но сам скрипт вместился в одну строку! Разница – в стиле приложения оператора цикла и в потому, что переменная циклу выводится на экран одновременно с увеличением. И в этом – вся заманчивость программирования. Иноди бывает что-то простое сделать очень трудно, а сложное – легко. Никогда не стоит останавливаться на уже достигнутом, а нужно пробовать применять инши алгоритмы и решения. Вот Вам еще один вариант решения. Он основан на приложении конструкции РНР DO. WHILE . Это так же цикл, но отличается он от просто WHILE тем, что значение логического выражения проверяется не к (как в случае с WHILE ), а закончив работы операторов, включенных всам цикл. Таким образом, DO. WHILE гарантированно будет выполнен хотя бы один раз, что в случае с WHILE совсем не обязательно. Ведь если условие является неправдой, управление сразу будет передано дальше. Для циклов DO..WHILE существует только один вид синтаксиса:

$i = 0; do { echo $i.”
\n”; $i++; } while ($i <=10);
?>

Здавалося бы, достаточно вариантов, но это не все - существует еще несколько вариантов цикла. И, как правило, именно они и используются программистами. Циклы FOR - наиболее могучие циклы в PHP. Они работают подобно их аналогам в языке программирования C. Синтаксис цикла FOR:

FOR (expr1; expr2; expr3) statement

Перший выражение (expr1) безусловно вычисляется (выполняется) в начале цикла.В начале каждой итерации (проход цикла) вычисляется expr2. Если оно равняется TRUE (истина), то цикл продолжается и выполняются вложенный(е) оператор(ы). Если оно равняется FALSE (неправда), то цикл заканчивается. В конце каждой итерации вычисляется (выполняется) expr3. Каждое из этих выражений может быть пустым. Если expr2 пусто, то цикл продолжается бесконечно (PHP за умалчиванием считает его,що равняются TRUE, как и в языке Си). Это не так зря, как могло бы показаться, потому что чаще всего нужно закончить выполнение цикла, используя оператор BREAK в соединении с логическим условием вместо использования логического выражения в FOR . Если внутри цикла (каждого) встречается этот оператор ( BREAK ), цикл безусловно прекращает выполнение итерации, и управление передается следующей за циклом команде. Если встречается оператор CONTINUE – управление передается на начало следующееближайшего цикла. Например посмотрим, как можно еще реализовать вывод на экран пользователя список чисел. Не забывайте о переходе из HTML в PHP.

/*  пример  1 */
for ($i = 1; $i <= 10; $i++) 
{ print $i; }
/*  пример  2 */
for ($i = 1;;$i++) 
{ if ($i > 10) { break; } print $i; }
/*  пример  3 */
$i = 1; for (;;)
{ if ($i > 10) { break; } print $i; $i++; }
/*  пример  4 */
for ($i = 1; $i <= 10; print $i, $i++) ;
 
Так что не говорите потом, что у Вас не было выбора :-) На примере тривиальной задачи мы рассмотрели, как РНР позволяет разными способами достичь одной цели. Как правило, на практике применяется наиболее пригодная конструкция, но часто в этом нет никакой необходимости, достаточно использовать самый простой и логический варіант
 

 

Відправлення пошти

 

Дуже частохочется знать, что происходит на сайте за время Вашего отсутствия. Конечно, можно периодически проверять форум, гостевую, и тому подобное. на предмет новых сообщений, но есть способ лучше! Почему бы не посылать самому себе сообщения на почтовый ящик, когда на сайте происходит и или инша событие. Как пример могу предложить такие варианты – регистрация в рассылке, ввод сообщения в форум, гостевую, и тому подобное, ошибка открытия файла, организация обратной связи, опроса мнения читателей о размещенной статье и т.д и т.п. Способов применить эту возможность РНР – масса, осталось разобраться как это работает. Как всегда – просто! Синтаксис таков:

 
Mail ( $email, "Уведене сообщения %quot%, 
  
  $str, "From: сообщение ");    
 

Звичайно, перед этим соответствующие переменныедолжны быть введенные или вручную, или с помощью формы (нужно следить за соответствием имен переменных в форме и в скрипте). При выполнении данной команды интерпретатор РНР отошлет письмо с текстом из переменной $str по адресу, отмеченной в переменной $ email . Все инше – служебная информация, которая может быть в некоторых случаях опущена как ненужная. Например рассмотрим систему контроля за посетителями определенных страниц сайта. Такая возможность может понадобиться для анализа посещений определенных статей, страниц, и тому подобное. Нам будет нужна информация о посетителе, что в РНР автоматически доступная через переменные окружения. Эту информацию мы будем отсылать себе на почтовый ящик. Только не перестарайтесь – каждое посещение такой страницы вызывает отправление письма, и шкатулка может оказаться переполненной

 
<?php
if (isset ($HTTP_X_FORWARDED_FOR)) 
{ 
$host = gethostbyaddr($HTTP_X_FORWARDED_FOR); 
}else{ 
$host = gethostbyaddr($REMOTE_ADDR); } 
 
$ip=getenv('REMOTE_ADDR');
$date=date('d M Y, H:i:s');
$host1=gethostbyaddr("$ip");
 
$str=("
 Дата  - $date
 Хост  - $host
IP -адреса -$ip
---------------------");
mail( $ email, "статистика %quot%, $str, "From:інформація");
?>
 

Якщо Вы разместите на одной из Ваших страниц этот код РНР, информация о посетителе (это дата входа, хост и IP -адреса) будет в Вашем почтовом ящике. Еще можно послать себе сообщение во время возникновения ошибки (например открытие файла) на сайте:

 
$filename = "data.txt"; 
$fp = @fopen($filename,"r"); 
if ( !$fp ) { @mail( $email, " Ошибка !", " Ошибка 
  открытие   файлу $filename !"); }
 

Як правило, можно поставить знак @, и есливозникнет ошибка при отправлении почты, сообщения об этом не будет выведено на экран. А можно просто проверить, пошло письмо или нет: if ( @mail( $ email, "Тест %quot%, $ str ) ) { ... что сделать если письмо пошло ... } else { ... что делать, если состоялась ошибка отправления (не доступная шкатулка, сайт, и тому подобное) } Собственно говоря, существует возможность забирать почту из любого акаунта, но это требует расширения РНР за счет подключения дополнительных модулей, и в стандартном снабжении недоступно. Если в переменной $ email указать несколько адресов, разделенных пробилами, информация будет разослана по всем отмеченным адресам. Это открывает простой путь к организации собственной, ни от кого не зависимой системы почтовых рассылок

 
 Времена и дати
 

Коли уже разговор коснулся даты, попробуем разобраться как все это можно использовать в своих собственных целях. В РНР чаще всего используется функция DATE в формате $ date=date (`параметр`); Параметров может быть несколько, и разделяются они между собой запятой. Вот список допустимых параметрів

 

·         a - "am" або "pm"

·         A - "AM" або "PM"

·        d - день месяца, цифровой, 2 цифры (на первом месте нуль)

·         D - день недели, текстовый, 3 буквы; то есть "Fri"

·         F - месяц, текстовый, длинный; то есть "January"

·         h - час, цифровой, 12-часовой формат

·         H - час, цифровой, 24-часовой формат

·         і - минуты, цифровий

·         j - день месяца, цифровой, без начальных нулів

·         l (строчная `L`) - день недели, текстовый, длинный; то есть "Friday"

·         m - месяц, цифровий

·         M - месяц, текстовый, 3 буквы; то есть "Jan"

·         s - секунды, цифровий

·         S - английский порядковый суффикс, текстовый, 2 символа; то есть "th %quot%, %quot%nd"

·         U - секунды с начала століття

·         Y - год, цифровой, 4 цифри

·         w - день недели, цифровой, 0 означает неділя

·         y - год, цифровой, 2 цифри

·         z - день года, цифровой; то есть "299"

Зверніть внимание на отличия в регистре. Каждый символ в разных регистрах имеет разные функции. Теперь Вы легко можете получить информацию о текущем времени, ииспользовать ее на собственном сайте. Один из наиболее распространенных вариантов – вывод текущего времени и дать. Конечно, все это делается без проблем на JavaScript, но кто видел эти скрипты, тот поймет разницу (по крайней мере в размере и скорости выполнения, не говоря уже о траффике от сервера к браузера). Ну, время по моему мнению выводить достаточно безсенсовно, потому что воин есть у каждого пользователя в треи Windows -, а вот вывести число, месяц и день недели (так и украинским языком) бывает полезно. Начнем с приветствия посетителю. Было бы не плохо вывести соответствующую фразу в зависимости от времени посещения. Сказано – сделано:

php
$h=date(`H`);
if ($h>=5 && $h<=11) echo "Доброе утро!";
if ($h>=12 && $h<=18) echo %quot%Здравствуйте!";
if ($h>=19 && $h<=24) echo "Добрый вечер!";
if ($h>=1 && $h<=4) echo "Спокойной ночи!";
?>

Цифри желаемого времени можно проставить любые, в зависимости от личного понятия дня и ночи :-) Следующий шаг – вывод числа, дня недели и названия месяца. Но прежде чем мы приступим к реализации алгоритма, нам нужно познакомиться еще с одним важным моментом в языках програмування

 

Масиви в РНР

Якщо Вы четко представляете себе, что такое массив, предлагаю Вам сразу перейти к чтению следующего абзаца. Если нет, тогда именно это Вы в настоящий момент и узнаете. Массив – это ряд переменных, упорядоченных по имени и маючих разный индекс. Например уювить, что у Вас есть двадцать названий, и все их нужно внести впрограмму. Можно для удобства обозвать переменные одинаковым именем и ставить в конце каждого имени переменной число в соответствии с номером названия. У Вас выйдет самый простой одномерный массив. Только любой язык программирования (и РНР так же!) предоставляет набор средств для более детальной и удобной работы с таким набором – массивом. И число (так называемый индекс) нужно взять в квадратные дужки. Допустимо существует ряд срочных переменных – компьютер, Интернет, модем, монитор. Имя для массива выберем $ m, хотя доступное кбудь-яке, как и у обычной переменной. Индекс в массивах начинается не с единицы, а из нуля, и таким способом для внесения наших слов в массив нужно сделать так:

$ m [0] = “комп`ютер”;
$
m [1] = “Интернет”;
$
m [2] = “модем”;
$
m [3] = “монитор”;

Тепер у нас создан массив с именем $m но максимальным индексом (это количество элементов в массиве) – 4. Именно 4, хотя последний заполненный элемент – 3. Если мы попробуем считать элемент с 4-м индексом, результат будет равняться пустому строчные, потому что там просто ничего нет. Обращаться к элементам массива нужно по имени массива и его индексные, что и составляет основное удобство. Например мы можем вывести на экран все элементы массива:

$i = 0; while ($i < count($m)) { echo $m[$i].”
”; $i++; }
 

Функція count($ m ) выдает нам число, которое отвечает максимальному индексные массиву. Следовательно у нас всегда существует возможность знать, сколько элементов присутствуют в данном массиве. Что еще можно узнать о массивах в РНР? Например, функция currentвозвращает текущий элемент массива. Каждая переменная-массив имеет внутренний указатель (это не индекс, а специяльний параметр который как правило или совпадает с индексом или превышает его на единицу, но необов`язково), который указывает на один из своих элементов. Кроме того, все элементы в массиве связываются двокерунковим списком указателей для дополнительных целей. Внутренний указатель указывает на первый элемент, который включался в массив пока Вы не выполняли одну из функций, которые модифицируют этот указатель в этом массиве. Функция current() просто возвращает элемент массива, на который в данный момент указывает внутренний указатель. Она никак не перемещает указатель. Если внутренний указатель указывает на конец списка элементов , current() возвращает false (неправда). Внимание: если массив содержит пустые элементы (0 или " %quot%, пустая строка), то функция повернет "false" для каждого из них. Это показывает, что текущий элемент естьнулевым значением или вы дошли до конца массива. End - устанавливаете внутренний указатель массива на последнем элементе. Next - передвигает внутренний указатель массива. Возвращает следующий элемент массива, от текущей позиции внутреннего указателя массива, или "неправда"(false) если не есть больше элементов. Если массив содержит пустые элементы, тогда эта функция повернет "неправда" (false) но для этих элементов. next() ведет себя подобно current(), из одной лишь разницей. Он передвигает внутренний указатель массива на один элемент вперед прежде, чем повернуть элемент. Это значит что он возвращает значение следующего элемента и передвигает на него внутренний указатель массива. Если при обращении к следующему элементу обнаружен конец массива - next() возвращает "неправда" (false). Prev - перемещает внутренний указатель массива. Возвращает предыдущийэлемент массива, или "неправда" (false), если перед текущей нет больше элементов. Если массив содержит пустые элементы, то функция повернет "неправда" но на этих элементах. prev() ведет себя подобно next(), за исключением того, что он переводит внутренний указатель массива на одну позицию назад, а не вперед. Reset () - устанавливает внутренний указатель массива на первом элементе. Rsort () - сортирует массив в обратном порядке (по убыванию). По алфавиту в том числе. К сожалению, украинский алфавит здесь ни к чему. Sort () - сортирует массив. Точно так же что и предыдущая, только по росту. Конечно, это далеко не все функции, которые есть в РНР относительно массивов. Но инше - часто очень специфически и решается иноди более простыми методами

Дата по русски

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


//-і определяем массив для месяцев -ые <і>
$q[]="";
$q[]="января"; <і>
$q[]="февраля"; <і>
$q[]="марта"; <і>
$q[]="апреля"; <і>
$q[]="мая"; <і>
$q[]="июня"; <і>
$q[]="июля"; <і>
$q[]="августа"; <і>
$q[]="сентября"; <і>
$q[]="октября"; <і>
$q[]="ноябрю"; <і>
$q[]= %quot%декабря"; <і>

//- определяем массив для дней недели -ые <і>
$e[0]="воскресенье"; <і>
$e[1]="понедельник"; <і>
$e[2]="вторник"; <і>
$e[3]="среда"; <і>
$e[4]="четверг"; <і>
$e[5]="пятница"; <і>
$e[6]="суббота"; <і>

// -і-і считываем месяц
$m=date('m');

if ($m=="01") $m=1;
if ($m=="02") $m=2;
if ($m=="03") $m=3;
if ($m=="04") $m=4;
if ($m=="05") $m=5;
if ($m=="06") $m=6;
if ($m=="07") $m=7;
if ($m=="08") $m=8;
if ($m=="09") $m=9;

// -і-і считываем день недели
$we=date('w');


// -і-і считываем число
$chislo=date('d');

// - вытягиваем из день недели
$den_nedeli = $e[$we];

// - вытягиваем значение месяца
$mesyac = $q[$m];


echo "В наше время ".$chislo." ".$mesyac. %quot%, ".$den_nedeli;
?>

Тепер рассмотрим, как работаетэтот скрипт. Сначала нам нужно определить два массива, в которых будут сохраняться соответственно украинское название месяца и украинское название дня недели. Поскольку месяц не может быть нулевым, нам нужно позаботиться о ввод элемента массива с нулевым индексом. Если индекс массива не отмечен, он принимается как таковой, что равняются внутреннему указателю. Если массив пустой и еще не определенный, внутренний указатель указывает на первый элемент (тот что имеет индекс нуль). Увод нового элемента массива перемещает внутренний указатель на единицу наверх, и таким способом обеспечивается следующий ввод значения массива в элемент массива, единицу, которая имеет индекс на, больше, чем предыдущий. В принципе, можно обеспечить ввод данных в массив разными способами. Но отмеченный здесь – самый простой и примитивный. Мы просто предоставляем по очереди нужные нам данные элементам массива, и таким способом заполняем его.Точно такая же история наблюдается и из вторым массивам. Только здесь уже индекс нужных элементов массива указывается явно, и внутренний указатель устанавливается на тот индекс, который отмечен. А после вводу значения перемещается наверх на единицу. Разница между этими двумя методами в том, что если массив уже был определен раньше, и индекс при вводи не отмечен, заполнится элемент массива, на которую указывает внутренний указатель. А он может находиться и в конце! А если индекс отмечен явно, внутренний указатель устанавливается на его значение, и запись происходит в явно отмеченный элемент. Собственно, чаще массивы бывают намного длиннее, чем приведенные в примере, и удобнее воспользоваться специяльной функцией, что позволяет считать отмеченный в ней файл и ввести все, что есть в этом файле в массив. Причем разделителем считается перевод строки, что очень удобно. Синтаксис этой функции - $ім`я массиву= file (“им`я файлу”); Дальше формируется массив с отмеченным именем и значениями, которые отвечают строкам файла.

Коли массивы определены, нам нужно считать номер месяца. Он считывается с ведущим нулем, если номер месяца менее десяти, и потому нам нужно позаботиться о его отсечении. Здесь можно применить так же разные алгоритмы и методы, но мы воспользуемся лобовым решением – просто сравним полученное решение из рядом предварительно известных вариантов и изменим номер месяца на правильный без нуля. Решение грубо, зато понятно и уже знакомое нам. Хотя так делать не правильно – более утончены методы. Например – проверить полученное значение на ведущий нуль, и если проверка является истиной (самый первый символ в строке – нуль), удалить первый символ

Далі по поступь скрипту мы считываем день недели ичисло. С числом делать ничего не нужно, а вот день недели и месяц должны поддаться обработке. Вытягиваем из введенного нами ранее массиву день недели. Номер дня недели указывает на элемент нашего массива, где сохраняется нужное укаринска название, и таким образом мы в любом случае одержимо правильное значение. Изменяется номер дня недели, изменяется номер (индекс) элемента, из которого считывается значение. Причем здесь, в отличии от массива с именем месяца, нуле отвечает воскресенье, что мы и учли при вводи массива дней недели. Точно такую же операцию проводим и для месяца. Его номер указывает на элемент массива, где сохраняется правильное имя месяца русским языком. А дальше – виводимо результат на экран в произвольной форме.

Висновок

Отже, мы познакомились с очень важными в любойязыку программирования принципами организации циклов и массивов. А также узнали, как применять на практике возможность отправления почты и считывания дать. Не сомневаюсь, что вы сможете придумать еще много примеров для приложения этих вещей на практике. Не стесняйтесь экспериментировать и пробовать разные варианты. Именно так и изучаются языки программирования – на примерах. Используйте для поиска новых решений и скриптов Интернет, подпишитесь на рассылки по РНР для получения новой информации. Если не все понятно – смело задавайте вопрос, я постараюсь по мере сил и знаний ответить на них. И никогда не останавливайтесь на достигнутом, потому что всегда существует то, что мы еще пока не знаем, но так хочется...

Андрій Кухарчик @ июнь 2001
<а href="javascript:if(confirm(`http://virtual.bresttelecom.by/php \n\nэтот файл не был найденTeleport Pro, потому что it is addressed on а domain or path outside the boundaries set for its Starting Address. \n\nвы хотите открыть это из сервера?`))window.location=`http://virtual.bresttelecom.by/php`" tppabs="http://virtual.bresttelecom.by/php">http://virtual.bresttelecom.by/php
<а href="mailto:virtualphp@tut.by">virtualphp@tut.by


Источник: http://virtual.bresttelecom.by
02.10.2002



Коментарии (11) | Оставить коментарий

Алекс | 10.10.2010 09:18
На каком язіке єто написано? Исправить миллион ошибок невозможноПроще переписать и не позориться

твоя смерть | 16.11.2010 22:17
от навіщо бог створив москалів,мені здаєтся тіки для того щоб вони лише підпиздували якусь хуйню збоку і смерділи як те лайно на кожному кроці.

Ice | 17.04.2011 06:50
That′s really tihnikng out of the box. Thanks!

Chianna | 17.04.2011 19:52
That′s a mold-brekaer. Great thinking!

Marel | 17.04.2011 21:12
Stands back from the keyboard in amazement! Tnhaks!

cheap oem software | 10.02.2012 22:17
121GYz Author, keep doing in the same way..!!

buy oem software | 12.02.2012 19:40
t0NZW6 The Author is crazy..!

Adobe OEM Software | 07.03.2012 14:40
Dft7gK I appreciate you sharing this article post.Much thanks again. Much obliged.

Buy Cheap OEM Software | 07.03.2012 14:42
AdGQgB A big thank you for your blog.Thanks Again. Really Cool.

Adobe OEM Software | 08.03.2012 04:41
ODXaZw Very informative article.Really thank you! Will read on...

wholesale men clothing | 20.03.2012 23:48
I am so grateful for your blog.Thanks Again. Really Great.

Добавить комментарий

Имя:
Код:
Комментарий: