Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программируем на PHP - вопросы и ответы.


Информационный Канал Subscribe.Ru

Здравствуйте! Выпуск номер 69
рассылки сайта РНР для всех!

Форум сайта / Сайт автора

Важная информация:

  • Открыт сайт, который представляет всю информацию о нужном для вас хостинге - http://host.virtualbrest.com (от 5 у.е. за год включая панель управления + все, что необходимо для работы сайта + поддержка).

  • Если вас интересует возможность быстрой разработки скриптов и приложений для сети Интернет под ваши нужды, или вам необходима помощь специалиста в поддержке и развитии собственных систем (сайтов, страничек и т.д.), пишите на адрес: virtualphp@tut.by - с темой "разработка".

  • Не сомневаюсь, вы заметили, что материал в рассылке излагается последовательно. Да, это так, я подготовил его уже давно, и сейчас просто выкладываю периодически в сеть в виде рассылки свою книгу. В печатном варианте она вышла давно, а вот в электронном - совсем недавно.
    Тут можно: купить электронный вариант книги

    Оплата принимается в распространенных электронных валютах Рунета. Стоимость книги -
    0,5 у.е. (приравнено к WM). Узнать про электронные деньги можно, например, тут: http://webmoney.ru

  • По поводу размещения информации в этой рассылке обращайтесь на адрес: virtualphp@tut.by

  • скачать предыдущие выпуски вместе с картинками можно тут

Пример счетчика посещений на РНР 

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

<p>Посетителей странички -
<?php
$filename = "counter.dat";
$fp = @fopen($filename,"r");
if ($fp)

{

$counter=fgets($fp,10);
fclose($fp);

} else { $counter=0; }

$counter++;
echo $counter;
$fp = @fopen($filename,"w");
if ($fp)

{

$counter=fputs($fp,$counter);
 fclose($fp);

}

?></p> 

В том же каталоге, что и Ваша страничка, создайте файл  counter.dat, закачайте его на сервер, и с помощью своего FTP-менеджера измените атрибуты этого файла таким образом, чтобы он был доступен для записи. Обычно нужно установить галочки на всех атрибутах файла. Если Вы этого не сделаете, скрипт будет постоянно выдавать ошибку при попытке записи в файл.  

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

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

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

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

Циклы в РНР 

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

<?php

$i = 0;
$
n = 10;
while ($i <= $n):
echo $i.”<br>\n”;

$i++;
endwhile;

?> 

Смысл скрипта очень прост. Присваиваем переменной $i значение, соответствующее началу цикла, а переменной $n – значение конца цикла. Далее открываем цикл оператором WHILE ( ), и внутри его скобок описываем условие, при выполнении которого цикл будет продолжать свою работу. В нашем случае выполнение не прервется, пока $i <= $n. Как только это условие будет нарушено, управление будет передано следующей за циклом операции РНР. Внутри цикла могут быть любые команды РНР (разделенные между собой как обычно – точкой с запятой).

Только нужно следить за тем, что бы переменная $i, используемая в цикле, была увеличена (и совсем не обязательно на единицу), иначе цикл станет бесконечным, и интерпретатор РНР будет выполнять его, пока не закроется сессия (окно браузера). Оператор ENDWHILE означает конец цикла.

Скрипт, описанный здесь, выводит на экран браузера цифры, начиная с 0 до 10. Причем цифры будут выведены в столбик, так как после вывода на экран значения переменной $i мы выводит HTML-тег перевода строки <br>. После него идет перевод строки для кода, переданного клиенту (его можно посмотреть, выбрав просмотр в виде HTML в меню Вашего браузера). Это не обязательно, но таким образом достигается удобочитаемость кода.

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

<?php

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

?> 

Удивительно, но эти два примера абсолютно идентичны в смысле результата. Но сам скрипт практически уместился в одну строчку! Разница – в стиле применения оператора цикла и в том, что переменная цикла выводится на экран одновременно с увеличением. И в этом – вся прелесть программирования. Всегда есть способ лучше, и порой очень трудные задачи решаются буквально несколькими строчками кода. Иногда бывает что-то простое сделать очень трудно, а сложное – легко. Никогда не стоит останавливаться на уже достигнутом, а пробовать применять другие алгоритмы, варианты и решения.

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

<?php
$i = 0;
do

{

echo $i.”<br>\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++) ;
 

Так что не говорите потом, что у Вас не было выбора :-). На примере тривиальной задачи мы рассмотрели, как РНР позволяет разными способами достичь одной цели. Как правило, на практике применяется наиболее подходящая конструкция, но часто в этом нет никакой необходимости, достаточно использовать самый простой и логичный вариант.

Наши друзья

http://virtual.brest.by - Виртуальный Брест. Региональный информационно - развлекательный портал города Бреста. Чат, форум, статьи, услуги, объявления, недвижимость, каталог сайтов - это и многое другое ждет Вас на страницах сайта.
http://host.virtualbrest.com - хостинг по самым маленьким ценам - от 3 у.е. за 1 год!
http://204040.com - Интернет-магазин компьютерного салона Успех г. Брест
http://tweak.tut.by - http://tweak.bresttelecom.by - Оптимизация и настройка компьютера. Если Вас интересуют различные аспекты настройки Вашего мегагерцевого друга, Вам надо посетить сайт посвященный настройке и оптимизации. Кроме того - список последних версий популярных программ и свежие новости, а так же чат, форум и многое другое!

автор рассылки Андрей Кухарчик / http://virtual.brest.by/php


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться

В избранное