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

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


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

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

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

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


Как писать на РНР?

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

  1. Подсветка синтаксиса.
  2. Нумерация строк.
  3. Интеграция с оболочкой для вызова по правой кнопке мыши.
  4. Малый размер, нетребовательность к ресурсам.
  5. Удобный поиск, хороший шрифт и т.д

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


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

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

1  <?php
2
3  $filename = "counter.dat";
4  $fp = @fopen($filename,"r");
5  if ($fp) {
6  $counter=fgets($fp,10);
7  fclose($fp);
8  } else {
9  $counter=0;
10 }
11 $counter++;
12 print $counter;
13 $fp = @fopen($filename,"w");
14 if ($fp) {
15 $counter=fputs($fp,$counter);
16 fclose($fp);
17 }
18 ?>

В том же каталоге необходимо создать файл counter.dat, закачать его на сервер и присвоить ему атрибуты, разрешающие доступ чтения и записи для всех. Это атрибуты 666 или 777. Подойдут и те, и те. После этого указанный код вставляется в любое место нужной страницы, и все! Там, где Вы вставили код, будет выведено сообщение о количестве посетителей. Рассмотрим работу скрипта подробнее.

1  - открываем скрипт.
2  - пробел.
3  - присваиваем переменной имя файла, где будет храниться количество посещений.
4  - открываем соединение с этим файлом, причем только на чтение.
5  - проверяем, успешно ли открылось соединение.
6  - если успешно, считываем из открытого файла первые 10 символов в переменную счетчика.
7  - закрываем соединение.
8  - если нет...
9  - присваиваем переменной счетчика ноль.
11 - увеличиваем переменную счетчика на единицу.
12 - выводим на экран переменную счетчика.
13 - открываем соединение на запись с очисткой всего содержимого файла.
14 - если успешно, то...
15 - записываем новое значение переменной счетчика в файл.
16 - закрываем файл.

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

Еще предлагаю Вам рассмотреть конструкцию открытия файла, которая уже сама по себе много чего может: $fp = @fopen($filename,"w");
Во первых, можно проверить, существует ли такой файл. А во вторых - очистить его, если он есть, или создать если его нет. И поместить указатель, куда будет произведена запись или чтение в начало или конец. Делается это с помощью буквы в кавычках после имени файла и запятой. Вот список возможных вариантов:

  • 'r' - Открыть только для чтения, помещает указатель на начало файла.
  • 'r+' - Открыть для чтения и для записи, помещает указатель на начало файла.
  • 'w' - Открыть только для записи, помещает указатель на начало файла и очищает все содержимое файла. Если файл не существует, создается новый файл
  • 'w+' - Открыть для чтения и для записи, помещает указатель на начало файла и очищает все содержимое файла. Если файл не существует, создается новый файл.
  • 'a' - Открыть только для записи, помещает указатель на конец файла. Если файл не существует, создается новый файл.
  • 'a+' - Открыть для чтения и для записи, помещает указатель на конец файла. Если файл не существует, создается новый файл.

Как видите все просто и несложно. Дальше нам встретилась новая команда записи в файл, которую Вы наверняка будете частенько применять. $counter=fputs($fp,$counter);
При открытом соединении $fp, в тот файл куда оно открыто будет записана строка $counter.


Наши обшибки

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

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

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

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


Сайты в тему

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

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


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

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

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/ - сайт бесплатных игр (все со скриншотами и линками на загрузку)


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

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

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

Вопросы: 

  1. Здравствуйте помогите правильно напистаь скрипт по аудентификации, я что то совсем запутался с Oracle-ом, подскажите хотя бы что я делаю не так, с Mysql, мне не поможет, мне нужно именно с БД Oracle. Заранее благодарен, С уважением Олег.

    <html>
    <?php
    if(!isset($PHP_AUTH_USER)) {
    Header("WWW-Authenticate: Basic realm=\"restricted area\"");
    Header("HTTP/1.0 401 Unauthorized");
    echo Вы ввели неправельный пароль... \n";
    exit;
    } else {
    $db="userpass";
    $conn = OCIlogon ("users", "password", $db);
    $str = OCIParse ($conn, "select * from users);
    $user_id = strtolower ($PHP_AUTH_USER);
    $result = -Oci -("select password from userpas" .
    "where username = '$username'")
    $row = -Oci - ($result);
    if ($PHP_AUTH_PW != $row["password"]){
    Header("WWW-authtenticate: basic realm=\"restricted area\"");
    Header("HTTP/1.0 401 Unathorized");
    echo " Аудентификация невозможна повторите попытку";
    exit;
    }
    }
    ?>
    </html>

    ответить
  2. В зависимости от типа броузера на страницу, помощью include, надо вставить различные фрагменты HTML кода. Как определить какой броузер у клиента?
    ответить
  3. Не подскажите url с которого можно скачать дистрибутив Apache, а то на www.apache.org не могу найти.
    ответить
  4. Каким образом можно скрыто передать значение переменной, так, чтобы не через URL? Когда у нас есть форма, мы пользуемся <input type=hidden...>, а когда нет формы? Это осуществимо? (Допустим, входит зарегистрированный пользователь, и дальше на всех страницах мне надо знать его id. Нехорошо, если он будет светиться в УРЛе).
    ответить
  5. Здравствуйте!!!! Какое программное обеспечение необходимо, чтобы программировать на PHP? Если нужно,какое-то специальное ПО, то подскажите где его можно скачать. Заранее спасибо. Moiseev.
    ответить
  6. У меня есть переменная $num. Как из неё убрать кусок текста/цифры, скажем начиная с hello т.е.
    $num="Manhello!" а после преобразования остается "Man"

    ответить


    Ответы на заданные вопросы:
  1. Здравствуйте! А можно ли сделать так, что бы в страницу HTML (с расширением *.htm ) вставить внизу текстовой счетчик, написанный на php? Просто на одном сервере не поддерживается php. А код счетчика, написанный на пхп, у меня есть на другом сервере.

    Ответ:
    Как я понял - нет. Расширение должно быть РНР3 так или иначе, а если поддержки на серваке нет, это невозможно.

    Ответ:
    Вообще-то нет. Только через FRAME или IFRAME

  2. Вопрос повидимому простой, но я что то "зациклился". На форме есть набор checkbox-ов., формируется автоматически. Количество заранее неизвестно. Имя общее, например kod. Value разные, например 52, 63, 75 и т.д., определяются при создании формы. Надо выделить несколько!!! и передать, например методом POST для обработки. В результате получаю только одно значение, а надо бы
    все. Самая большая проблема в том, что заранее не известно, ни сколько checkbox-ов будет на форме, ни их значения. Возможен вариант что в форме будут меняться и/или имя checkbox-а. Заранее благодарен. Игорь Румянцев


    Ответ:
    Используй в имена тега INPUT массивы: например следующим образом
    <input type="radio" name=form[kod52]>какой-то текст
    <input type="radio" name=form[kod52]>какой-то текст
    <input type="radio" name=form[kod63]>какой-то текст
    <input type="radio" name=form[kod75]>какой-то текст
    <input type="radio" name=form[kod88]>какой-то текст
    атрибут name можешь генерировать скриптом
    далее для разбора введенной информации можешь использовать следующую крнструкцию:
    <?php
    while(list($key,$value)=each($form)){
    if ($key = "kod63") {
    выполнить что-то;
    }
    и т.д.
    }
    //скипт не тестировал, но после обработки напильником должно работать!
    ?>

    With best regards
    Nedbalski Andrew


    Ответ:
    Вообще-то это в FAQ'ах описано, достачно описывать чекбоксы так:
    <input type=chebox name='kod[]' value=56>
                                      ^^^^^
    Теперь в PHP данные из этого поля доступны как массив $kod[].
    Василий Шабанов

  3. Пожалуйста, подскажите, как при помощи php скачать файл с машины клиента на сервер (через браузер).

    Ответ:
    Этот момент достаточно подробно описан в мануале:
    http://www.php.net/manual/en/features.file-upload.php
    Там же есть много полезных замечаний для php под разные ОС. Сорри, но русского мануала на сайте PHP нет.

    Ответ:
    Вот такой скрипт я использовал для он-лайновой передачи цифровых фоток в
    печатный центр (ПХП3):

    <?
    header("Cache-Control: no-cache, must-revalidate");
    header("Pragma: no-cache");
    header("Expires: Thu, 1 Jan 1970");
    if($action1){ // флаг, что файл принят
    Print('
    <HTML><body bgcolor="#FFFFFF" text="#000000">
    <p><font face="Arial, Helvetica, sans-serif"><font size="+1">Результаты передачи файла
    </font><br><br>
    ');
    set_time_limit(60); // задержка, если очень
    большой файл, то придется притормозить скрипт
    $path1 = dirname($PATH_TRANSLATED)."/upload/"; // путь к аплоаду
    $source = $file1;
    $source_name = $file1_name;
    if(($source <> "none")&&($source <> "")){ // посмотреть, действительно
    ли существует файл - если нет то выдаем none
    if($error1 <> 1){ // флаг ошибки записи на сервер
    $dest = $path1.$source_name; // добавить имя файла к нашему
    пути
    if(!copy($source,$dest)){ // копируем файл
    из темп. в нашу директорию и смотрим - получилось ли
    // ЗДЕСЬ УЖЕ КОД ОБРАБОТКИ ФАЙЛА!!!
    } else {
    echo "Ошибка сервера (нету записи)\n"; // нужна директория с возможностью
    записи
    $error1 = 1; // ставим флаг
    } }
    unlink($source); // уничтожаем файл из темп.
    директории на сервере
    } Print('<br><a href="upload.html">Back</a></font></p></body></html> ');
    } else {

    //А ВОТ И САМА ФОРМОЧКА:
    echo'
    <html>
    <body bgcolor="#FFFFFF" text="#000000">
    <p><font face="Arial, Helvetica, sans-serif"><font size="+1">' .$ip. '</font><br><br>
    <BR>Выберите вашу фотографию нажав на кнопку "Browse". Не забудте - максимальный размер
    фотографии - 2 Мб. <BR>
    <form method="post" enctype="multipart/form-data" action="upload.html">
    <input type="hidden" name="MAX_FILE_SIZE" value="2000000">
    <input type="hidden" name="action1" value="1">
    Файл: <input type="file" name="file1" size="30"><br>
    <br>
    <input type="submit" value="Отправить">
    </form>
    </font></p>
    </body>
    </html>
    '; } ?>

  4. Как мне сделать так, что бы не закачивать каждый раз файлы для проверки на сервер. Можно ли проверять работоспособность РНР в offline?

    Ответ:
    можно и сервер не ставить для простой проверки РНР кода делай так
    php.exe -f index.php | more
    можно отловить все синтаксические ошибки

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


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

Предлагаю Вам стать участниками баннерообмена. Ваши ссылки и описания Ваших сайтов вы можете присылать по адресу рассылки - 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 -->

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

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 - Название: Управления вневедомственной охраны г.Новосибирска. Описание: Услуги по охране квартири других объектов, сопровождение грузов. На сайте: интересные статьи, новости, криминальная хроника, вакансии и другая полезная информация!

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

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

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


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

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

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


Разное

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


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



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

В избранное