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

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


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

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

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

Здравствуйте все, кто не побоялся трудностей и решил окунуться в удивительный и странный мир программирования. Дело это не простое, но затягивает не хуже игрушек. Вообще, это и есть игра, только противник твой - упрямый сервер, а оружие - голова. Рассылка РНР для всех! позволит Вам сделать первые шаги в программировании на скриптовом языке РНР. У Вас будет возможность задать вопрос по интересующей Вас теме и получить на него профессиональный ответ. Или наоборот - дать ответ, если Вы его знаете. Вы сможете обмениваться мнениями и читать авторские статьи, а так же размещать здесь свою информацию. И это - только начало. Я надеюсь, что рассылка РНР для всех! станет хорошим помощником для многих из Вас! Вопросы по организации рассылки и свои мнения присылайте на адрес для связи - virtualphp@tut.by. Буду рад любым предложениям о сотрудничестве.

А еще хочу сказать большое СПАСИБО сайту и его автору лично TweakMan-y за помощь в рекламе моей рассылки. Оптимизация и настройка компьютера

Я хочу поприветствовать две тысячи вновь прибывших подписчиков, которые присоединились к нам с того момента, как администрация http://subscribe.ru перевела рассылку в раздел серебренных. За что ей большое спасибо...


Что может РНР?

МАССИВЫ

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

count - count($a)
- Если у Вас есть массив с таким именем, Вы можете узнать его размер (индекс максимального значения). Это бывает очень полезно, когда надо искать что-то в массиве, длинна которого не есть постоянная величина. Значение может быть присвоено любой другой переменной, и использовано в дальнейшем.

current - возвращает текущий элемент массива. Каждая переменная-массив имеет внутренний указатель, который указывает на один из своих элементов. Кроме того, все элементы в массиве связываются двунаправленным списком указателей для дополнительных целей. Внутренний указатель указывает на первый элемент, который включался в массив пока Вы не выполняли одну из функций, которые модифицируют этот указатель в этом массиве. Функция current() просто возвращает элемент массива, на который в данный момент указывает внутренний указатель. Он никак не перемещает указатель. Если внутренний указатель указывает на конец списка элементов, current() возвращает false(ложно). Внимание: если массив содержит пустые элементы (0 или "", пустую строку), то функция возвратит "false" для каждого из них. Это показывает, что текущий элемент является нулевым значением или вы дошли до конца массива.

end - устанавливаете внутренний указатель массива на последнем элементе. Более подробно смотрите чуть выше.

next -- передвигает внутренний указатель массива. Возвращает следующий элемент массива, от текущей позиции внутреннего указателя массива, или "ложь"(false) если нет больше элементов. Внимание: если массив содержит пустые элементы, тогда эта функция возвратит "ложь"(false) и для этих элементов. next() ведет себя подобно current(), с одной лишь разницей. Он передвигает внутренний указатель массива на один элемент вперед прежде, чем возвратить элемент. Это означает что он возвращает значение следующего элемента и передвигает на него внутренний указатель массива. Если при обращении к следующему элементу обнаружен конец массива - next() возвращает "ложь"(false).

prev - перемещает внутренний указатель массива. Возвращает предыдущий элемент массива, или "ложь"(false), если перед текущим нет больше элементов. Внимание: если массив содержит пустые элементы, то функция возвратит "ложь" и на этих элементах. prev() ведет себя подобно next(), за исключением того что он переводит внутренний указатель массива на одну позицию назад, а не вперед.

reset - устанавливает внутренний указатель массива в первом элементе. reset() возвращает внутренний указатель массива в первый элемент. reset() возвращает первый элемент массива.

rsort - Сортирует массив в обратном порядке (по убыванию). По алфавиту в том числе. К сожалению, русский алфавит тут не при чем.

sort - сортирует массив. Точно тоже что и предыдущее, только по возрастанию.

Конечно, это далеко не все функции, которые есть в РНР относительно массивов. Но остальное - часто очень специфично и решается иногда более простыми методами.


Пример в номер

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

<?php
$link = "http://virtual.bresttelecom.by/php/"; //
адрес где будем брать что-нибудь
$file = fopen($link, "r");  // 
открываем соединение с указанным адресом                     
$rf = fread($file, 20000); //
считываем в переменную содержимое открытого файла
$var = eregi( "<title>(.*)</title>", $rf, $title);

    //
это что-то новенькое... но смысл понятен - вырезает все,  
    //  
что находится между <title> и </title>

fclose($file);  //
не нужно забывать закрывать за собой соединение
echo "ВСЕ ТУДА --> <a href=\"$link\">$title[1]</a>"; //
выводим результат на экран
?>


Но на самом деле это не все, конечно. Никто нам не помешает вырезать таким же образом новости, например, или курсы валют с погодой. Или еще что - фантазируйте на здоровье! Рассмотрим скрипт подробнее. В первой строчке вводим адрес, где будем что-нибудь брать. Адрес может быть как относительный так и абсолютный. Дальше - новый для нас оператор fopen. Он открывает соединение по указанному адресу. Следующий оператор производит чтение указанного количества байт по открытому нами адресу. Адрес должен быть обязательно открыт, иначе будет возвращено FALSE. Вот как можно проверить, открыто ли соединение:

<?php
$link = "http://virtual.bresttelecom.by/php/";
$file = fopen($link, "r"); 

if ($file) {      // если соединение прошло успешно...               
$rf = fread($file, 20000); 
$var = eregi( "<title>(.*)</title>", $rf, $title);
fclose($file); 
echo "ВСЕ ТУДА --> <a href=\"$link\">$title[1]</a>";

exit;
            }
else {          // если нет...
echo "Извините, соединение не было установлено!"; exit;
     }
?>

Вот теперь Вы сможете точно знать, было или нет открыто соединение с указанным адресом. Вообще - так и нужно делать даже если вы абсолютно уверены в правильности набранного Вами адреса. А вдруг... Мало ли что может произойти. Поэтому желательно оградить посетителя от ошибок, которые в РНР выдаются прямо пользователю в браузер. Это вообще-то преимущество, но может сослужить иногда очень плохую службу, тем более что есть выход лучше - детектировать успешность выполненного доступа и принять в соответствии с результатом нужное решение. Или - считать данные, или - вывести сообщение об ошибке. А еще лучше - перед операторами открытия и закрытия файлов ставить символ @. Он обозначает, что если при выполнении этого оператора произошла ошибка, информацию об этом на экран не выводить. Вопрос - зачем это надо? Например для того, что бы вместо вывода ошибки на экран посетителя послать сообщение самому себе на почтовый ящик... Да - да! Именно так. Кроме всего прочего РНР с необычайной легкостью может обеспечить отправку сообщений на электронную почту. Но об этом - в следующий раз.


Наши обшибки

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

  • Самое распространенное - не стоит завершающая оператор точка с запятой. Не ставится она только в конструкции if () {} {} Основной признак - ошибка в следующей строке за тем оператором, в котором нет точки с запятой.

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

  • В конструкции if () {} {} отсутствует завершающий знак - } Исключений нет. Признак этой ошибки очень простой, и позволяет детектировать эту ошибку очень просто. При запуске скрипта на выполнение интерпретатор выдает ошибку в самой последней строчке кода, где стоит завершающий тег ?>


Сайты в тему

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

  • http://php3.agava.ru - информационный ресурс о РНР. Есть примеры и много статей самого различного уровня. От начинающего до профи! Язык - русский. Как ни странно, он пока не доступен. Возможно, это временное явление.

  • http://www.php.net/ - официальный сайт РНР. Масса информации, но только для тех, кто дружит с английским.


Примеры скриптов

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

  • vremya.rar - выводит на экран время в соответствии с логикой русского языка.

  • data.rar - выводит на экран число, месяц и день недели.


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

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

  • http://virtual.bresttelecom.by - Виртуальный Брест. На РНР работают чат, форум, гостевая, объявления, статистика посещений, обмен компакт дисков.


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

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

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

Вопросы:

  1. Вопрос есть ли в РНР аналогичная замена директивы SSI <!--#exec cgi="cgi-bin/counter.cgi" -->
    И как функция пишется, я пробовал exec, system ничего не выходит. Нужно запустить из РНР файда CGI счетчик и что бы он вставил свое значение в файл РНР и counter.dat, в общем выполнить CGI скрипт. Заранее благодарен, Андрей.

    ответить
  2. Буду очень признателен, если кто сможет помочь мне разобраться, что такое сессионные переменные в PHP, как с ними работать, что, где и почем...8). К сожалению, в документашке нарисовано все(для меня;( видимо, не хватает мне чего-то) достаточно кратко, а опыты пока ни к чему не привели...
    Буду признателен за подробную "растолковку", или за линки на толковые подробные статьи с примерами по этой теме. Задача, собственно, может и тривиальна, тащить за собой из страницы в
    страницу, из скриптика в скриптик кучку значений (переменных, в т.ч массивчик), относящихся к данному посетителю, читай, сессии. Но по внешнему запросу ( ?zz="xxxx"&....), некрасиво, да и нельзя, т.к. некоторые значения - конфеденциальны, + да и великовато их количество; Кук - такая-же картина, да и еще его нужно "совать" первым в выводе, что не очень-то и подходит, данные в течении сессии должны изменяться; Писать данные в базу - некрасиво тоже, ерзать (читать-писать, да на каждого пользователя) с обращениями к базе каждый раз, т.е. 15-20-50-70 раз за сессию -
    накладно... остается - ??? Какие есть решения ??

    ответить
  3. Можно-ли из формы, используя PHP, передать одномерный массив данных, но сформированный не объектом multiple, а используя ...type="hidden"... ? Aliaksandr
    ответить
  4. Подскажите как мне можно настроить PHP на IIS (Internet Information Server).
    ответить

Ответы на заданные вопросы:

  1. Не подскажешь, где можно скачать php пакет? (т.е. есть у меня апача, я там над perl-ом балуюсь :-), так вот где мне можно скачать php интерпритатор (под винду, хотя она и мастдай).....)

    Ответ:
    Очевидно, что на официальном сайте РНР -
    http://www.php.net/ Но если нет желания копаться, вот вам ссылка. Скачайте файл, распакуйте, поставьте на диск F (можно сделать вируальный в AUTOEXEC.BAT или покопаться в настроечных файлах APACHE и поменять на свой диск). Там сразу APACHE и РНР в связке. Этот ответ из прошлой рассылки. Но как оказалось, мой провайдер почему-то не хочет отдавать файл, если он RAR. Пришлось переименовать в ZIP. Скачайте, переименуйте в RAR и распакуйте. Во как!

  2. Здравтсвуйте! Помогите! Просто меня один вопрос уже долго мучит. (вопрос елементарный).
    Как создать таблицу в MySQL, я открываю MySQL, и пишу следующее:
    mysql> create database prod;
    MySQL выдает:
    Query OK, 1 row affected (0.06 sec)
    Ну здесь все нормально, а вот дальше :(. Теперь создаю таблицы:
    mysql> create table clients (name varchar(25), email varchar(25), choise varchar (8));
    И вот, что выдает MySQL:
    ERROR 1046: No Database Selected
    Кто нибудь знает что это такое? :( С уважением,Virus)


    Ответ:
    Просто после создания базы надо написать:
    mysql> use prod;
    И дальше работать с базой.

    Ответ:
    Вы не выбрали базу данных... соответственно, Ваш mysql не знает где создавать тавлицу.
    Расписывать про sql-язык - долго и муторно, проще прочитать... ;) А вообще-то рекомендую пользоваться sql-запросами из того-же php, или, хотя-бы "администраторами", типа следующих,(каждый по своему великолепен, в каждом - изюминка!), оба могут работать из-под винды...

    Ответ:
    После того как создал базу надо в неё войти и затем только создавать таблицы.

  3. Пришло несколько вопросов, я их объединяю в один. Где можно получить бесплатный или почти бесплатный хостинг с поддержкой РНР и желательно базы данных.

    Ответ:
    Очень советую сходить на http://portland.co.uk Там предлагают хостинг с такими параметрами:
    15Mb (уверяю вас этого больше чем достаточно), CGI, PHP, MySQL, SSI, FTP рекламы НЕТ совсем!
    единственное ограничение - трафик 100Mb в месяц (но его легко увеличить). имя: name.portland.co.uk
    name.port5.com или ваше зарегистрированное По сайту можно получить сверхподробную статистику.
    Хостинг обеспечивает крупнейшая британская компания, т. ч. бояться "дауна" не стоит.

  4. А как можно узнать содержимое файла с расширением PHP, который находится на
    каком-либо сервере. Способ - сохранить объект как ... не помогает.


    Ответ:
    В том-то и дело, что никак. Нужно быть владельцем сервера! Иначе - практически не возможно. По крайней мере я о таком не слышал.

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


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

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

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

http://virtual.bresttelecom.by - Виртуальный Брест. Региональный информационно - развлекательный портал города Бреста. Чат, форум, статьи, услуги, объявления, недвижимость, каталог сайтов - это и многое другое ждет Вас на страницах сайта.
http://tweak.tut.by -
http://tweak.bresttelecom.by - Оптимизация и настройка компьютера. Если Вас интересуют различные аспекты настройки Вашего мегагерцевого друга, Вам надо посетить сайт посвященный настройке и оптимизации. Кроме того - список последних версий популярных программ и свежие новости, а так же чат, форум и многое другое!
http://saleha.al.ru/anecdot/index.phtml   - самые новые и смешные анекдоты.
http://klepan.narod.ru  - Халява pliz! - реферал клуб.


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

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

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


Разное

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


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



http://subscribe.ru/
E-mail: ask@subscribe.ru

В избранное