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

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


Служба Рассылок Subscribe.Ru проекта Citycat.Ru

Рассылка сайта
РНР для всех!

Выпуск номер 14

Здравствуйте

Мне приходит очень много просьб вернуться к самому началу, и рассказать о основах РНР. Предыдущие два вывуска рассылки были именно на эту тему. Сегодня мы продолжим, ведь рассылке в первую очередь именно для новичков, и они справедливо возмущены, когда я начинаю залазить в дебри. И еще приходит много вопросов, где купить книги по РНР. Я не буду публиковать такие вопросы, кроме как в этом выпуске, зато Вы всегда сможете найти в любой рассылке ссылку, где купить книги в Интернете. заказать


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

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

Циклы в РНР

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

<?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>"; }
?>

Удивительно, но эти два примера абсолютно идентичны в смысле результата. Но сам скрипт уместился в одну строчку! Разница – в стиле применения оператора цикла и в том, что переменная цикла выводится на экран одновременно с увеличением. И в этом – вся прелесть программирования. Иногда бывает что-то простое сделать очень трудно, а сложное – легко. Никогда не стоит останавливаться на уже достигнутом, а пробовать применять другие алгоритмы и решения. Вот Вам еще один вариант решения. Он основан на применении конструкции РНР 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++) ;

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

Отправка почты

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

Mail ( $email, "Введено сообщение", $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, "статистика", $str, "From:информация");
?>

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

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

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

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

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

    a - "am" или "pm"
    A - "AM" или "PM"
    d - день месяца, цифровой, 2 цифры (на первом месте ноль)
    D - день недели, текстовый, 3 буквы; т.е. "Fri"
    F - месяц, текстовый, длинный; т.е. "January"
    h - час, цифровой, 12-часовой формат
    H - час, цифровой, 24-часовой формат
    i - минуты, цифровой
    j - день месяца, цифровой, без начальных нулей
    l (строчная 'L') - день недели, текстовый, длинный; т.е. "Friday"
    m - месяц, цифровой
    M - месяц, текстовый, 3 буквы; т.е. "Jan"
    s - секунды, цифровой
    S - английский порядковый суффикс, текстовый, 2 символа; т.е. "th", "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 "Здравствуйте!";
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]."<br>"; $i++; }

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


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

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

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

//-- определяем массив для дней недели --
$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.", ".$den_nedeli;
?>


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

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


Заключение


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

Андрей Кухарчик @ июнь 2001
http://virtual.bresttelecom.by
virtualbrest@tut.by 


P.S. По Фидо просшла ссылка, которую я с удовольствием переадресовываю Вам. Не знаю, будет ли она работать (когда я проверял - работала), но там лежит файл около 7,5 Мегабайт, в котором дистрибутивы PHP+Apache+MySQL. Все уже установлено и настроено, нужно только распаковать куда надо. Пробуйте!
http://virtual.bresttelecom.by/apache.phtml

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


Сайты в тему

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

  • http://www.php.net/ - официальный сайт РНР. Масса информации, но только для тех, кто дружит с английским.
  • http://go.to/php-encoder - защита РНР скриптов.
  • http://phpclub.net - Архив бесплатных PHP-приложений (вкл. E-commerce), форумы, чаты, рассылки, книги, обучение, хостинг.
  • http://www.devshed.com/Server_Side/PHP/ интересные статьи по PHP и не только.
  • http://ancient.dax.ru На сайте много готовых решений на PHP: форумы, чаты, гостевые книги и многое другое. Кроме того сам сайт реализован на php.

Где можно посмотреть

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

http://virtual.bresttelecom.by - Виртуальный Брест. На РНР работают чат, форум, гостевая, объявления, статистика посещений, обмен компакт дисков, анекдоты.
www.gdekupit.ru Интернет-каталог Где купить в России. Каталог полностью автоматизирован. Регистрация, добавление нового города, Оформление Договора, выписка счета, служба рассылки и т.д. полностью автоматизировано. Все, кроме счетчика посещений на PHP и MySQL. Кстати, регистрация предприятий, расположенных в любом города России, абсолютно бесплатная.
http://www.ohrana.nsk.su - Практически весь сайт написан на PHP. Используется БД на MySQL.

http://www.webclub.lv   - Латвийский Клуб Веб-мастеров Наш сайт предназначен для всех кто творит и хочет творить Интернет. Мы предлагаем информацию, помощь и примеры по дизайну. Довольно обширная коллекция скриптов. Статьи, учебники и многое другое.
http://www.love24h.com/ru/   - международная служба знакомств, все анкеты (более 1500) с фото
http://www.freeglobus.com/ - сайт бесплатных игр (все со скриншотами и линками на загрузку)

http://trinet.wallst.ru - на PHP сделан каталог игр
www.nixers.com - сайт для поиска непостоянной работы в Ирландии. Short term, part-time and temporary jobs in Ireland.
http://karaganda.central.kz - "На связи Караганда" - содержание сайта полностью отделено от оформления.
http://moredeneg.wallst.ru - Сайт о Реальном заработке в сети. На сегодняшний день сайт почти полностью на PHP.


Почта рассылки

Открывается новый раздел, в котором будут публиковаться материалы, дополнения и обзоры, составленные по Вашим письмам...

Отвечаю на вопрос
Если имеються ввиду переменные окружения CGI (хоть PHP и не являеться CGI-приложением, но они доступны):
REQUEST_METHOD
Это одно из самых главных поле используемое для определения метода запроса HTTP Протокол HTTP использует методы GET и POST для запроса к серверу.Они отличаются тем что при методе GET запрос является как-бы частью URL т.е. http://www./myscript.cgi?request а при методе POST данные передаются в теле HTTP-запроса (при GET тело запроса пусто) и следовательно для CGI тоже есть различие при GET запрос идет в переменную QUERY_STRING а при POST подается на STDIN скрипта.
Пример:REQUEST_METHOD=GET
QUERY_STRING
Это строка запроса при методе GET. Вам всем известно что запрос из формы кодируется браузером поскольку не все символы разрешены в URL некоторые имеют специальное назначение. Теперь о методе urlencode: неплохо бы чисто формально напомнить,что все пробелы заменяются в URL на знак '+', а все специальные и непечатные символы на последовательность %hh ,где hh-шестнадцатиричный код символа,разделитель полей формы знак '&',так что при обработке форм надо произвести декодирование.
Пример:QUERY_STRING= name=quake+doomer&age=20&hobby=games
CONTENT_LENGTH
Длина в байтах тела запроса.При методе запроса POST необходимо считать со стандартного входа STDIN CONTENT_LENGTH байт,а потом производить их обработку.Обычно методом POST пользуютс для передачи форм,содержащих потенциально большие области ввода текста TEXTAREA.При этом методе нет никаких ограничений,а при методе GET существуют ограничения на длину URL .
Пример:CONTENT_LENGTH=31
CONTENT_TYPE
Тип тела запроса(для форм кодированых выше указаным образом он application/x-www-form-urlencoded)
GATEWAY_INTERFACE
Версия протокола CGI.
Пример:GATEWAY_INTERFACE=CGI/1.1
REMOTE_ADDR
IP-Адрес удаленого хоста,делающего данный запрос.
Пример:REMOTE_ADDR=139.142.24.157
REMOTE_HOST
Если запрашивающий хост имеет доменное имя,то эта переменная содержит его, в противном случае -тот же самый IP-адресс что и REMOTE_ADDR
Пример:REMOTE_HOST=idsoftware.com
SCRIPT_NAME
Имя скрипта,исполизованое в запросе.Для получения реального пути на сервере используйте
SCRIPT_FILENAME
Пример:SCRIPT_NAME=/~paaa/guestbook.cgi
SCRIPT_FILENAME
Имя файла скрипта на сервере.
Пример:SCRIPT_FILENAME=/home/p/paaa/public_html/cgi-bin/guestbook.cgi
SERVER_NAME
Имя серера ,чаще всего доменное как www.microsoft.com ,но в редких случаях за неимением такового может быть IP-адресом как 157.151.74.254
Пример:SERVER_NAME=www.uic.nnov.ru
SERVER_PORT
TCP-Порт сервера используюшийся для соединения .По умолчаниию HTTP-порт 80, хотя может быть в некоторых случаях другим.
Пример:SERVER_PORT=80
SERVER_PROTOCOL
Версия протокола сервера.
Пример:SERVER_PROTOCOL=HTTP/1.1
SERVER_SOFTWARE
Програмное обеспечение сервера.
Пример:Apache/1.0
AUTH_TYPE, REMOTE_USER


"Александр Лозовюк" < aleks_3i@mail.ru >


Вопросы и ответы
задать вопрос

Предлагаю Вам присылать свои вопросы на адрес рассылки. Первое время будет действовать только вариант пересылки вопроса по почте, но в будущем приоритет будет отдаваться вопросам, заданным с формы на сайте. Вопрос должен быть кратким, точным и по теме. Ответы на вопросы по мере знаний будут даваться мной, а если я не смогу дать Вам исчерпывающий ответ - кто-то из подписчиков обязательно поможет. А если Вы знаете ответ на заданный вопрос - не поленитесь ответить. Этим Вы очень поможете кому-то решить свою проблему. Синтаксис и грамматика - авторские.

задать вопрос

Вопросы: 

  1. В рассылке я читал что если php подключен как модуль к apache то он работает быстрее. Вопрос: Где можно скачать этот модуль для win32? И как его встроить в apache? Заранее благодарю
    ответить
  2. У меня Apache под Win, как можно добавить FTP опции ?
    ответить
  3. Как в php подключить библиотеки для работы с изображениями и флеш?
    ответить
  4. Скажите, пожалуйста, добавляет ли www.f2s.com баннер.
    ответить
  5. почему у меня при использовании команды $counter=fgets($fp,10); - считывание идет до ближайшего перевода каретки, дальше нет. - filesize($filename) дает одно значение, а считать возможно только меньше Спасибо, Илья mis421@chat.ru
    ответить
  6. Есть вопрос по поводу организации поиска на РНР. Значит так. Мне достался сайт на корректировку. Есть список авторов, есть их статьи, у одного одна, у другого несколько. Весь настоящий вариант исполнен в виде: поисковая форма в ней необходимо вводить точные фамилии, а по ним открывается заведомо готовый файл, представляете какой бардак. Как индексировать, как добавлять и т.д. атас. Подскажите как реализовать лучше всего, в базу не впихнуть так как статьи некоторые очень громоздкие. может лучше через обычные текст-файлы, но как осущ. поиск. Подскажите.С уважением Андрей.
    ответить
  7. На одном хосте мне дали доступ к MySql то есть дали пароль и остальные параметры. Как я понимаю веб интерфейса там нет и отсюда вопрос куда мне вводить все эти примочки для того чтобы создать
    базу данных, таблицу и всякие строчки. Если можно ответьте пожалуста по подробнее!
    ответить
  8. Как из изображения, загружаемого пользователем через форму, сгенерить маленькие превьюшки?
    Спасибо! С уважением, Анна

    ответить
  9. У меня PHP 4.0.3pl1, бинарники под win32 (брал на php.net), WinNT и apache. Подключил библиотеку php_gd.dll (для работы с GIF); при вызове любой функции этой библиотеки выдается сообщение
    "<functionName>: No GIF support in this PHP build", где <functionName> - имя вызываемой функции. Неужели PHP под win32 не умеет работать с GIF? Тогда зачем же включать в бинарники эту библиотеку?

    ответить
  10. Пожалуйста, подскажите! Где можно лучше всего почитать и понять механизмы работы session в PHP4 в полном объеме. Честно говоря документацию я проработал, но работать с ними так и не научился из-за отсутствия опыта в этих делах. Хотелось бы видеть примеры использования в системах аутентификации пользователей с использованием cookies и без них, а также механизм шифрования пароля и данных при передаче от пользователя к серверу. И еще правильно ли заявление, что session является наиболее эффективным механизмом (я не имею ввиду маленькие проекты типа домашних страничек, а более серьезные разработки). Спасибо. АМ.
    ответить
  11. Просьба не посылать читать FAQ (или подскажите где взять по емейлу), как поднять Apache под Мандрейковский Linux 7.2 (возможно я неправильно выбрал инсталяцию - рабочая станция, а не сервер)
    ответить
  12. Я сделал посылку так:
    mail(trim($mails[$i]), $subject, $text, "Content-type: text/plain; charset=koi8-r\nFrom:
    czar_admin@mtu-net.ru\nReply-To: czar_admin@mtu-net.ru\n\n");
    Здесь: берется адрес отсыльщика из файла, потому стоит на всякий случай трим.
    Потом идет текст. потом контенты и фромы с реплеями. в книге написано было, что лучше контент писать в начале и в конце головы сообщения. результат: приходит письмо (текст перекодирован в кои8-р). в нем. в адресе "от кого" приходит не мой мейл, а мейл хоста. в теме пусто.
    Текст приходит в кодировке , не определяемой БАТом и Оутлуком. Приходится перекодировать в кои8-р и все читается. Но это мне не нравится. То есть контент - не работает. И контент, и фром, и реплайТо приходят в теле письма. Почему так?

    ответить
  13. Просьба не посылать читать FAQ (или подскажите где взять по емейлу),
    как поднять Apache под Мандрейковский Linux 7.2

    ответить
  14. В выпуске 7 вы сказали, что в PHP есть функция виртуал - аналог апачевских "include virtual". Если не трудно, опишите точно ее, поскольку второй совет по указанию в served-parced типов файлов PHP ни к чему не приводит (точнее приводит к полному отказу загрузки страниц - их предлагает сохранить на диск).Заранее благодарен Василий Ясный.
    ответить
  15. WIN98+APACHE.1.3.6.+PERL+MYSQL+PHP4
    Не работает функция crypt()
    Warning: crypt() is not supported in this PHP build in d:\usr\local\www\shop\admin\index.php on line 36
    Как установить эту функцию?

    ответить



    Ответы на заданные вопросы:
  1. Где можно найти электронные книги по PHP???

    Ответ:

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


    http://www.citforum.ru/internet/php.shtml

    Книги в электр. виде(а вернее переводы книг) Я брал на phpclub. но честно говоря Я бы посоветовал
    читать бумажный вариант, а скрипты или что-либо другое копировать из Нета. Я вот купил недавно умную книжку Дж. Кастаньетто и др."Профессиональное РНР программирование" довольно толково написана книга. и цена у нас здесь(в Краснодаре) вполне устраивает - 204 р.


    На киевском рынке "Петровка" или в магазине технической книги на пр. Победы - возле КПИ.
    Я, например, покупаю книги по VISA на http://www.ozon.ru


    Вот ссылки с которых я скачал много ценной инфо по PHP
    http://emanual.ru/
    http://phpclub.unet.ru/
    http://www.citforum.ru/
    http://detail.phpclub.net/
    http://www.devshed.com/Server_Side/PHP/Manual/manfiles/manual.html


    Эл. книгу по PHP можно найти на ftp://www.iatp.unibel.by/pub/software/php/

  2. Привет! У меня есть вопрос... Допустим есть сайт с одинаковым дизайном, как менять отдельные его
    элементы его содержания... инклюде виртуал не подойдет... Так как на первые десять страниц нужно вставить новости к примеру, а в другие 10 в этом же месте нужно вставить различные материалы, обзоры и т.д. Причем что файл с дизайном один типа index.php, и его вот так гибко приходится менять... Если вы чтонить из выше упомянутого поняли, помогите пожалста желательно с примером...
    Большое спасибо!


    Ответ:
    Ну и в чем трабла? нужно вывести новости? выводи через echo. Нужно инфо? include. посмотри рассылку от 10 июня, а там пример с почтой, может понравиться принцип. Adam Adamich

  3. S chego nachat' izuchenie PHP, kakoe PO nugno?

    Ответ:
    Отвечаю на вопрос. Для работы с РНР необходимо сам дистрибутив РНР(списать можно в Нете: www.apache.org, www.php.net, www.mysql.com), версия в зависимости от системы Unix или windows(специально с маленькой буквы, хотя и Сам работаю на нем), и еще сервер необходим, что-то из этих: Apache, IIS, Sambar и т.д. Если надо работать с базами данных то еще необходим сервер MySQL. С уважением Андрей.

  4. Я долго ищу надежную, быструю, бесплатную службу, дающую бесплатные e-mail’ы (с SMTP, POP3). Я
    испробовал множество из них, но у всех есть недостатки – то невозможно соединится; то почта не
    принимается, а у них на сайте (в web интерфейсе) посмотреть можно; то невозможно отправить. Подскажите, какая лучше и какую выбрать?


    Ответ:

    А ты когда нибудь видел ИДЕАЛЬНОГО ЧЕЛОВЕКА? а вообще неплохая служба mail.ru Adam Adamich

    чем тебе например не нравиться мыло на yahoo.com или на usa.com? если ты патриот, то попробуй http://www.mail-in.net киевского провайдера UIC

  5. Вопрос, относительно MySQL У меня создано несколько виртуальных хостов: 127.0.0.1, 127.0.0.2
    Я создала обычным путем базу данных в MySQL
    >CREATE DATABASE products;
    >CREATE TABLE clients (name VARCHAR(25), email VARCHAR(25), choise VARCHAR(8));
    А файл для обработки stat.phtml поместила в 127.0.0.2 И у меня происходил стопор: "Не могу выбрать базу данных " Не трудно было догадаться в чем может быть дело, но появляется другой вопрос:
    Как тогда создавать базы данных на других хостах, а не тех, которые указаны по-умолчанию?

    stat.phtml
    <?
    $hostname = "127.0.0.2";
    $username = "";
    $password = "";
    $dbName = "products";
    $userstable = "clients";

    MYSQL_CONNECT($hostname,$username,$password) OR DIE("Не могу создать соединение ");
    mysql_select_db("$dbName") or die("Не могу выбрать базу данных ");
    .......................
    .......................
    MYSQL_CLOSE();
    ?>


    Ответ:
    Привет Всем! А разве можно создать на одной локальной машине несколько IP для виртуальных хостов, по-моему нет. Я просто сам сталкнулся с такой проблемой не давно и не смог этого сделать,
    может Вы знаете как, подскажите. И еще, кажется в строке $hostname ="127.0.0.2", скорее всего
    пишется имя хоста прописанного в файле Hosts(в каталоге Windows) и в файле httpd.conf каталога Apache\conf\... Пробовали использовать программку MyAdmin С уважением Андрей.


    По-моему в скрипте надо всегда указывать localhost, а если не хотите смешивать в одной базе информацию из разных хостов - заведите по базе на хост. Мне кажется, что это надежнее. Успехов!

  6. Вопрос по переменным окружения РНР. Если есть у кого полный список, или знаете где такой можно взять в Интернете, ответьте пожалуйста.

    Ответ:
    Ответ в разделе Письма рассылки.

    Таковой список способен выдавать сам PHP. Для этого необходимо написать простенький скрипт:
    <?
    phpinfo();
    ?>
    затем обратиться к нему из броузера. Получите массу полезной информации, в том числе и список
    переменных окружения. Также это добро есть в документации на PHP: Variables->Predefined variables.
    Павел, pavel@imail.dc.ukrtel.net


  7. При вставке в скрипт dl("php_mcrypt.dll"); окно браузера выдает сообщение: Warning: Unable to load dynamic library 'd:\usr\local\php4\extensions\php_mcrypt.dll' - Присоединенное к системе устройство не работает. in d:\usr\local\www\shop\admin\index.php on line 5 extension=php_mcrypt.dll - тоже не помогает

    Ответ:
    А faq не пробовал читать? А где лежит dll? А права доступа к dll проставил какие? Adam Adamich

    Отвечаю на вопрос. скорее всего не верно отрабатывает httpd.conf - файл настроек Apache сервера, вернее не прописана загрузка библиотеки. Там есть такие строки: # loadmodule.... и таких строк несколько. Попробуйте прописать такой вариант. у Меня получалось в почти подобной ситуации.
    С уважением Андрей.

  8. В одной из книг, которую я читаю, написан перечень "функций уровня абстракции баз данных (dbm-style)". При попытки их использовать в своих файлах ( локально на компьютер при запущенном апаче ) выводится сообщение: "Fatal error: Call to undefined function: dbase_create() in
    d:/./data-base.php on line 5". ( вызов неизвестной функции ? ). Значит ли это, что для их использования надо установить еще какую-нибудь программу ?


    Ответ:
    ДА, если все остальное работает. Ты dbbase сажал вместе с PHP? А сажать нужно!
    Adam Adamich


    Попробуйте:
    В системном каталоге Windows (c:\windows, C:\winnt) есть файл php.ini. Раскомментарьте строчку
    extension=php_dba.dll и проверьте путь к extensions в этом же файле: extension_dir = j:\php\extensions\
    Путь мой, впишите свой. P.S. В письме Вы написали, что вызываете dbase_create(). Эта функция не из "функций уровня абстракции баз данных (dbm-style)", а из раздела "dBase Functions", а для них нужен
    extension=php_dbase.dll.В случае чего pavel@imail.dc.ukrtel.net

  9. У меня установлены PHP 4.0.4pl1, Apache 1.3.14 и MySQL 3.23.22-beta ( и все под Win98 ).
    PHP и Apache я настроил нормально ( между собой работают великолепно ). Хочу проверить взаимодействие с MySQL, для чего экспортировал одну из своих баз данных. В свойствах MySQL отображаются базы: mysql ( что это такое я уже прочитал в книге ) и моя под именем ilya.
    В ней показана database tables "cpu". Table columns: test [ char(50)], cpu char(30)] и другие.
    Теперь хочу написать сценарий на PHP для работы с ней. Хотя бы вывод содержимого. По примерам в книге не получается. Если кому несложно, покажите образец (самый простой, чтобы хотя бы представить себе как оформляются команды ). Заранее благодарен, Илья. mis421@chat.ru

    Ответ:
    Ловите пример. Для простоты без HTML тегов, табличек и прочих наворотов. Пример выводит в броузер Вашу таблицу целиком.

    <?
    mysql_connect("localhost", "root", "") or die("Can't connect: '$php_errormsg'");
    @mysql_select_db("ilya") or die("Can't select database: '$php_errormsg'");

    $query = "SELECT * FROM cpu";
    $result = mysql_query($query);
    $number = mysql_num_rows($result);
    if ( $number == 0 ) print "Таблица пуста!<BR>";
    else
    { // Таблица не пуста
    $i = 0;
    while ($i < $number)
    {
    $test = mysql_result($result, $i, "test");
    $cpu = mysql_result($result, $i, "cpu");
    print "Строка $i: test=$test; cpu=$cpu<BR>";
    $i++;
    } // while
    } // if
    // Закрыть соединение с БД
    mysql_close();
    ?>

задать вопрос


Обмен ссылками и баннерами

Предлагаю Вам стать участниками баннерообмена. Ваши ссылки и описания Ваших сайтов вы можете присылать по адресу рассылки - virtualphp@tut.by Все ссылки обязательно появятся в этой рассылке. Если есть желание разместить свой баннер 88*31 на сайте рассылки http://virtual.bresttelecom.by/php/ , укажите это дополнительно, и пришлите код своего баннера. В любом случае, Вам надо будет разместить у себя код баннера сайта рассылки, и только на главной страничке Вашего сайта. Или - на нескольких других.

PHP для всех! Программируем сами.            <!-- PHP banner --><a target="_blank"  href="http://virtual.bresttelecom.by/php/"><img    src="http://virtual.bresttelecom.by/php/php/php1.gif" border="0" width="88" height="31"
alt="
PHP для всех! Программируем сами."></a>

<!-- PHP banner end -->
PHP для всех! Программируем сами.            <!-- PHP banner --><a target="_blank"  href="http://virtual.bresttelecom.by/php/"><img    src="http://virtual.bresttelecom.by/php/php/php2.gif" border="0" width="88" height="31"
alt="
PHP для всех! Программируем сами."></a>

<!-- PHP banner end -->
PHP для всех! Программируем сами. <!-- PHP banner --><a target="_blank"  href="http://virtual.bresttelecom.by/php/"><img    src="http://virtual.bresttelecom.by/php/php/php3.gif" border="0" width="88" height="31"
alt="
PHP для всех! Программируем сами."></a>

<!-- PHP banner end -->
PHP для всех! Программируем сами. <!-- PHP banner --><a target="_blank"  href="http://virtual.bresttelecom.by/php/"><img    src="http://virtual.bresttelecom.by/php/php/php4.gif" border="0" width="88" height="31"
alt="
PHP для всех! Программируем сами."></a>

<!-- PHP banner end -->

Предлагаю Вашему вниманию работы дизайнеров, приславших свои работы в качестве баннеров для сайта РНР для всех! Номер в списке соответствует номеру в имени баннера - php1, php2 и т.д. Так что Вы можете оценить их работы и при желании воспользоваться их услугами.

  1. http://tweak.tut.by - Оптимизация и настройка компьютера. Если Вас интересуют различные аспекты настройки Вашего мегагерцевого друга, Вам надо посетить сайт посвященный настройке и оптимизации. Кроме того - список последних версий популярных программ и свежие новости, а так же чат, форум и многое другое!

  2. http://www.webclub.lv - Латвийский Клуб Веб-мастеров Наш сайт предназначен для всех кто творит и хочет творить Интернет. Мы предлагаем информацию, помощь и примеры по дизайну. Довольно обширная коллекция скриптов. Статьи, учебники и многое другое.

Правила у меня стандартные - описания Ваших сайтов будут периодически (в зависимости от их количества) размещаться в рассылке. И конечно - будет отдельная страничка на сайте, на которой будут представлены все друзья сайта.

http://virtual.bresttelecom.by - Виртуальный Брест. Региональный информационно - развлекательный портал города Бреста. Чат, форум, статьи, услуги, объявления, недвижимость, каталог сайтов - это и многое другое ждет Вас на страницах сайта.
http://tweak.tut.by - http://tweak.bresttelecom.by - Оптимизация и настройка компьютера. Если Вас интересуют различные аспекты настройки Вашего мегагерцевого друга, Вам надо посетить сайт посвященный настройке и оптимизации. Кроме того - список последних версий популярных программ и свежие новости, а так же чат, форум и многое другое!
http://saleha.al.ru/anecdot/index.phtml   - самые новые и смешные анекдоты.
http://klepan.narod.ru  - Халява pliz! - реферал клуб.
http://www.ohrana.nsk.su - Название: Управления вневедомственной охраны г.Новосибирска. Описание: Услуги по охране квартири других объектов, сопровождение грузов. На сайте: интересные статьи, новости, криминальная хроника, вакансии и другая полезная информация!
http://www.programing.narod.ru - программирование на РНР
http://icebreaker.dax.ru - самый информативный сайт об ударных инструментах, здесь находится огромное количество полезной информации для ударника:фотографии,статьи,табулатуры,самоучители,ссылки и много чего ещё!
http://webd.hut.ru - AGS Design. Сайт для вебмастера. 1500+ изображений фонов, иконки и кнопки, отличная графика, скрипты, очень понятная документация по различным языкам программирования, изучение Фотошоп
от А до Я, и мн. др.


Подпишитесь на рассылки!

Рассылки Subscribe.Ru
Программируем на PHP - вопросы и ответы
Новости сайта Виртуальный Брест
Оптимизация и настройка компьютера
Кроссворды еженедельно

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


Разное

Обращаю Ваше внимание, что правильный адрес рассылки - virtualphp@tut.by. Сайт рассылки доступен по адресу http://virtual.bresttelecom.by/php/
Если Вы можете помочь сделать баннер для сайта, буду Вам очень признателен. С графикой я не очень дружу, но думаю, что смогу быть полезен и Вам. Жду предложений. Нужен баннер 88*31, лучше анимированный, по теме РНР, вопросы, ответы, статьи и т.д. Все, приславшие свои предложения, будут рекламироваться в рассылке. Первые работы уже есть.

Текстовая обменная сеть

TLE (http://www.tle.ru)   - это уникальная сеть обмена ссылками, позволяющая увеличить посещаемость Вашего сайта. Показывая у себя на сайте 100 баннеров, вы зарабатываете всего 80 показов Ваших баннеров. Показывая 100 рекламных блоков TLE.RU, Вы зарабатываете 255 показов Ваших ссылок! Почуствуйте разницу! Высокий CTR%, удобная панель управления, мгновенная регистрация. Спешите! Только до 15 мая каждому новому участнику 50,000 БЕСПЛАТНЫХ показов! Узнать подробности и стать участником сети можно на сайте http://www.tle.ru


автор рассылки Андрей Кухарчик



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться Рейтингуется SpyLog

В избранное