VDS-BOX надежный хостинг

Хост обзор

Объявление

Стабильный и надежный хостинг - залог успешной работы web сайта. От выбора web хостинга зависит количество посетителей на сайте, что очень важно для коммерческих проектов. Даже при самом тщательном подходе к дизайну сайта, при самых убедительных рекламных компаниях - неудачный хостинг сайта снижает реальный поток потенциальных клиентов в десятки раз. Приобрести виртуальный хостинг для web сайта предлагают многие компании. Мы, гарантируем - качественный web хостинг, который является: Функциональным - мы заботимся о современных сетевых технологиях, и гарантируем стандартную поддержку CGI, Perl, SSH, SSL, PHP-5, MySQL-5, FTP, Zend Optimizer; управление DNS ;управление .htaccess; Наш хостинг подходит для большинства популярных CMS таких как: Для wap и pda: RotorCMS, Wap-Motor, JOHNcms, DCMS Для web которые устанавливаются из панели управления хостингом ISPmanager: WordPress, phpBB3, MamboCMS, Joomla, Drupal, Zikula, osCommerce, SugarCRM, CopperminePhotoGallery, Gallery, phpNuke, phpBB2plus, MediaWiki Высокоскоростным - посетители размещая на хостинге сайты имеют возможность быстрого доступа к информации; Хостинг сервера расположены в дата центре Hetzner. Данная компания является не просто популярным немецким хостинг-оператором, владеющим одним из самых крупных дата-центров страны, но и признанным международным лидером в сфере предоставления качественного хостинга. Простым в управлении - существуют удобные средства модификации сайта на хостинге; Надежным - оборудование для хостинга под сайт обеспечивает бесперебойную работу всех его функций; Гибким и универсальным - интернет хостинг соответствует стандартам предоставления услуг хостинга, как по программному обеспечению, так и по качеству технической поддержки и вместе с тем настраивается под потребности клиента. VDS-BOX.COM предлагает не просто услуги качественного хостинга сайтов, а различные тарифные планы ориентированные на любые потребности наших клиентов.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Хост обзор » Компьютеры » Уроки PHP


Уроки PHP

Сообщений 1 страница 10 из 12

1

амый простой способ отправить письмо при помощи PHP - воспользоваться стандартной функцией mail. Она имеет следующий синтаксис:

bool mail ( string to, string subject, string message [, string additional_headers [, string additional_parameters]])

Обязательные параметры:
E-mail получателя
Заголовок письма
Текст письма

Необязательные параметры:
Дополнительные заголовки письма
Дополнительные параметры командной строки

Возвращаемое значение::
true, если письмо было принято к доставке
false, в противном случае.

Простейший пример ее использования выглядит так:

<?php
mail("joecool@example.com", "My Subject", "Line 1 Line 2 Line 3");
?>

Если у Вас на экране появилась ошибка "Fatal error: Call to undefined function: mail()", это значит, что либо PHP собран без поддержки функции mail, либо она запрещена настройками сервера. Такая практика в последнее время широко распространена на бесплатных хостинговых серверах. Если Вы столкнулись с такой проблемой, воспользуйтесь возможностью отправки писем при помощи сокетов (sockets), детально описанной в разделе "альтернативные способы отправки писем". В случае, если Вы администратор системы, обратитесь к разделу "Как настроить сервер" и попробуйте устранить эту проблему как таковую.

Дополнительные заголовки письма (additional headers) могут использоваться для указания кодировки письма, адреса отправителя, обратного адреса и множества других опций. Они должны быть разделены переводом строк: комбинацией " ". Например, так:

<?php
mail("nobody@example.com", "the subject", $message,
     "From: webmaster@ example.com  "
    ."X-Mailer: PHP/" . phpversion());
?>

Перейдем к более сложному примеру. Предыдущие скрипты работали с форматом text/plain, теперь же попробуем отправить почту в формате HTML нескольким адресатам с указанием кодировки:

<?php
$to  = "Mary &lt;mary@example.com>, " ;
$to .= "Kelly &lt;kelly@example.com>";

$subject = "Birthday Reminders for August";

$message = '
<html>
    <head>
        <title>Birthday Reminders for August</title>
    </head>
    <body>
        <p>Here are the birthdays upcoming in August!</p>
    </body>
</html>';

$headers  = "Content-type: text/html; charset=windows-1251  ";
$headers .= "From: Birthday Reminder <birthday@example.com> ";
$headers .= "Bcc: birthday-archive@example.com ";

mail($to, $subject, $message, $headers);
?>

Комментарии к примеру: вначале мы определяем, кому адресовано письмо. Если получателей несколько, их адреса указываются в одной строке и разделяются запятыми. При задании заголовка и тела письма следите, чтобы кодировка, в которой они действительно написаны, совпадала с заявленной в заголовке charset.

В нашем примере переменная $headers состоит из четырех строк: в первых двух мы указываем тип отправляемого письма - HTML - и его кодировку. В следующих двух строках мы указываем адрес отправителя и адрес, по которому следует отправить скрытую копию письма.

Одна из часто возникающих проблем при отправке почты в koi8 - это формирование заголовка письма. Для ее решения необходимо воспользоваться следующим кодом, который переводит строку в кодировке win-1251 в понятный большинству почтовых клиентов koi8 заголовок.

<?php
$subject = '=?koi8-r?B?'.base64_encode(convert_cyr_string($subject, "w","k")).'?=';
?>

К примеру, заголовок "Почтовое уведомление" будет выглядеть как
=?koi8-r?B?8M/e1M/Xz8Ug1dfFxM/NzMXOycU=?=

Если Вы все сделали правильно, а получатель письмо не получает (помните, что временные издержки на доставку письма зависят от многих факторов и могут колебаться от нескольких минут до нескольких часов), убедитесь в том, что оно действительно отправилось. Это необходимо сделать в 2 этапа. Вначале попробуйте выполнить код:

<?php
if (mail("nobody@example.com", "the subject", "Example message",   
"From: webmaster@example.com  ")) {
    echo "messege acepted for delivery";
} else {
    echo "some error happen";
}
?>

В случае если уже на этом шаге Вы получили ошибку, это может означать, что у Вас либо не запущен sendmail (или другой транспортный агент), либо он неправильно настроен, либо существуют ошибки в php.ini. К примеру, в последнее время распространено правило не принимать письма, в которых не указан правильный заголовок Mail-from.

В случае, если сообщение было принято к отправке, попробуйте посмотреть файл /var/log/mail или попросить об этом Вашего администратора, так как для этого требуются права суперюзера (root). Это можно сделать при помощи команды tail /var/log/mail. В случае успешной отправки письма в log-файле должны появится строки нижеприведенного типа либо сообщение об ошибке:

Oct 2 00:21:02 l72 sendmail[131]: h91LL1DG000131: to=root, ctladdr=root (0/0), delay=00:00:01, xdelay=00:00:01, mailer=relay, pri=30225, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (h91LL1g1000134 Message accepted for delivery)
Oct 2 00:21:18 l72 sendmail[137]: h91LL1g1000134: to=, ctladdr= (0/0), delay=00:00:17, xdelay=00:00:16, mailer=local, pri=30774, dsn=2.0.0, stat=Sent

В любом случае попробуйте посмотреть раздел "Как настроить сервер".
2. Как отправить письмо c вложением (attachment)

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

В связи с этим дальнейшие примеры кода будут базироваться на готовом решении, взятом из PEAR (репозиторий приложений и модулей PHP). Пакет, который будет использован в примерах, называется Mail_Mime. Скачать последнюю версию пакета и получить исчерпывающую документацию можно по адресу http://pear.php.net/package/Mail_Mime. Рассмотрим пример его использования:

<?php
include('Mail.php');
include('Mail/mime.php');

$text = 'Text version of email';
$html = '<html><body>HTML version of email</body></html>';
$file = '/home/richard/example.php';
$crlf = " ";
$hdrs = array(
              'From'    => 'you@yourdomain.com',
              'Subject' => 'Test mime message'
              );

$mime = new Mail_mime($crlf);

$mime->setTXTBody($text);
$mime->setHTMLBody($html);
$mime->addAttachment($file, 'text/plain');

$body = $mime->get();
$hdrs = $mime->headers($hdrs);

$mail =& Mail::factory('mail');
$mail->send('postmaster@localhost', $hdrs, $body);
?>

Приведенный код довольно понятен, но все же несколько слов о нем.

Переменная $mime является экземпляром класса Mail_mime. В его конструктор мы передали необязательный параметр, определяющий, какой именно перевод строки будет использован: " " или " ". Данный класс предназначен для формирования тела и заголовков отправляемого письма. При помощи метода setTXTBody мы определяем текстовую часть письма. В качестве параметра метод принимает строку или имя файла, который будет использован. Аналогично при помощи метода setHTMLBody мы задаем содержимое HTML-версии письма.

Рассмотрим метод addAttachment подробнее. Принимаемые параметры:
string $data

Полный путь к прикрепляемому файлу на сервере либо его содержимое. Обязательный параметр.
string $c_type

Значение заголовка Сontent-type, который будет отправлен. Необязательный параметр, значение по умолчанию - application/octet-stream.
string $name

Имя прикрепляемого файла. Будет использован только в случае, если первый параметр ($data) является содержимым файла.
boolean $isfile

Определяет, является ли первый параметр путем к файлу. Необязательный параметр, значение по умолчанию - true.
string $encoding

Значение заголовка Content-Transfer-Encoding, определяющего формат, в котором будет отправлено приложение. Необязательный параметр. Допустимые значения: base64 (используется для двоичных файлов), quoted-printable(используется для текстовых файлов). Значение по умолчанию: base64.

Таким образом, есть два способа применения данного метода.
указывая путь к файлу на сервере: $mime->addAttachment('/home/user/report.txt', 'text/plain');
указывая содержимое файла (в таком случае третий и четвертый параметры необходимо указывать принудительно): $mime->addAttachment($contentFile, 'text/plain', 'report.txt', false);

Переходим к формированию заголовка и тела письма. Это все еще обязанности экземпляра класса Mail_mime. Для формирования тела письма применяется метод get, который в качестве необязательного параметра принимает ассоциативный массив. Ключами могут выступать следующие значения: text_encoding, html_encoding, 7bit_wrap, text_charset, html_charset. Для формирования заголовков используется метод headers. В качестве необязательного параметра принимает хеш-массив. Для более детального ознакомления с допустимыми значениями данного параметра обратитесь к RFC-822.

Вызов метода get() должен осуществиться до того, как будет вызван метод headers(). Убедитесь, что в Вашем коде это условие соблюдено.

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

Процесс отправки почты завершается вызовом метода send, принимающего в качестве входящего параметра список адресатов, заголовки письма и его тело.

Проверку на ошибки, во время отправки письма, можно реализовать используя следующий код:

<?php
$status =$mailer->send('user@your.domain.com', $headers, 'your message');
if (PEAR::isError($status)) {
      print("***ERROR");
}
?>

Для дальнейшего ознакомления с возможностями классов Mail и Mime_mail ознакомьтесь с разделами "Как отправить письмо с картинками", "Альтернативные способы отправки писем"
3. Как отправить письмо c картинками

Отправка письма с вложением и отправка HTML-письма с вложением существенно отличаются по своей природе. Конечно же, и те и те находятся в теле письма, закодированы в base64, но используемые в обоих случаях заголовки различаются. В данном разделе описывается, как отправить HTML-файл с внедренными (в отличие от прикрепленных) изображениями, используя класс Mime_mail. Подразумевается, что предыдущий раздел Вы уже прочитали.

<?php
include('Mail.php');
include('Mail/mime.php');

$text = 'Text version of email';
$html = '<html><body>HTML version of email<img src="image.jpg"></body></html>';
$file = '/tmp/image.jpg';
$crlf = " ";
$hdrs = array(
              'From'    => 'you@yourdomain.com',
              'Subject' => 'Test mime message'
              );

$mime = new Mail_mime($crlf);

$mime->setTXTBody($text);
$mime->addHTMLImage ($file, 'image/jpeg');
$mime->setHTMLBody($html);

$body = $mime->get();
$hdrs = $mime->headers($hdrs);

$mail =& Mail::factory('mail');
$mail->send('postmaster@localhost', $hdrs, $body);
?>

Отличие этого примера от приведенного в предыдущей главе - использование функции addHTMLImage. Она принимает следующие параметры:
string $data

полный путь к прикрепляемому изображению на сервере либо его содержимое. Обязательный параметр.
string $c_type

значение заголовка Сontent-type, который будет отправлен. Необязательный параметр, значение по умолчанию: application/octet-stream.
string $name

имя прикрепляемого изображения. Будет использовано только в случае, если первый параметр ($data) является содержимым файла.
boolean $isfile

определяет, является ли первый параметр путем к изображению. Необязательный параметр, значение по умолчанию: true.

Аналогично методу addAttachment существует два способа вызова этого метода: в качестве первого параметра можно указывать путь к изображению либо двоичные данные изображения. Во втором случае третий и четвертый параметры являются обязательными.

Особенность этого метода заключается в том, что каждому изображению при помощи заголовка Content-ID: <8820c4185> ставиться в соответствие уникальный ключ. После этого все ссылки на прикрепляемое изображение заменяются ссылками на его ключ. В результате, в пришедшем к получателю письме будет строка вида <IMG SRC="cid: 8820c4185">, которую почтовый клиент проанализирует, извлечет содержимое из соответствующей секции письма и "покажет картинку".

Более детальное описание MIME - заголовков предоставлено в разделе "MIME в разрезе".
4. Альтернативные способы отправки писем

На сегодняшний день распространены следующие способы отправки писем из php-скриптов:
Посредством вызова функции mail
Непосредственно вызовом sendmail-а
При помощи сокетов
Используя COM-объект

Первые три способа реализованы в классе PEAR::Mail, о котором было рассказано выше. Экземпляр этого класса должен создаваться посредством статического вызова метода factory (так называемый "паттерн фабрика"). Первый параметр метода определяет способ отправки письма, он может принимать одно из следующих значений: mail, sendmail, smtp. Второй параметр - массив, содержание которого зависит от значения первого параметра:
Значение 'mail' - отправка при помощи вызова стандартной функции, дополнительные параметры отсутствуют
Значение 'sendmail' - отправка непосредственно вызовом sendmail-а. Доступные дополнительные параметры:
sendmail_path - путь к программе на сервере;
sendmail_args - дополнительные параметры для командной строки.
Значение 'smtp' - отправка почты при помощи сокетов. Доступные дополнительные параметры:
host - IP адрес или доменное имя сервера, на котором запущен почтовый транспортый агент, готовый принимать почту, например localhost (для локального сервера) или mxs.mail.ru (для публичного сервера);
port - порт на котором он запущен, как правило 25-тый;
auth - логическое значение, которое указывает на необходимость SMTP авторизации, значение по умолчанию - false;
username - используется только при наличии SMTP авторизации, логин на сервере;
password - используется только при наличии SMTP авторизации, пароль на сервере.

Пример использования класса PEAR::Mail

<?php
$mail =& Mail::factory('smtp', array('host' => 'localhost', 'port' => 25));
$mail->send('postmaster@localhost', $hdrs, $body);
?>

В приложении к данной статье приведены примеры исходных кодов, реализовывающие все перечисленные способы отправки почты без применения класса PEAR::Mail
Источник: http://www.softportal.com/

0

2

PHP в вопросах и ответах. Часть I.
Ниже приведены ответы на наиболее часто задаваемые вопросы в форумах посвященных программированию на PHP.

Вопрос: Как определить версию браузера?

Ответ. Выполните эту программу и Вам все станет ясно:
<body text=white bgcolor=black>

<?php

echo "Ваш адрес (REMOTE_ADDR):
<font color=#ccccff><b><big>
".getenv("REMOTE_ADDR")." </big></b></font><br><br>";
echo "Ваша программа (HTTP_USER_AGENT): <font color=#ccccff><b>
".getenv("HTTP_USER_AGENT")." </b></font><br><br>";
echo "Предыдущая страница (HTTP_REFERER): <font color=#ccccff><b>
".getenv("HTTP_REFERER")." </b></font><br>";

?>

Соответственно делаем if (strstr(getenv("HTTP_USER_AGENT"),"MSIE")) echo "Вы используете Internet Explorer"; и другие проверки (в зависимости от того, с какой целью Вы решили разделять браузеры).

Вопрос: У меня есть веб-форма с кучей данных. Как упростить обработку кучи полей из формы?

Ответ. Используйте массивы!

Важно! Не используйте констукцию if ($название_поля) {действия} для проверки, установлена ли переменная. Следует использовать if (isset($названия_поля)) { ... }

Чтобы работать было удобнее, делайте так:

<?php
<form ... >
   Имя:      <input type=text name=asd[]> <br>
   Фамилия:  <input type=text name=asd[]> <br>
   Отчество: <input type=text name=asd[]> <br>
   <input type=submit>
   </form>
?>

В принимающем файле осталось только пройтись по массиву:

<?php
   for ($i=0; $i<count($asd); $i++) {
      echo "$asd[$i]<br>";
   }
?>

Если Вам важен порядок переменных (вдруг, юзер на странице не все заполнит), то делаем так:

<?php
   Имя:      <input type=text name=asd[name]> <br>
   Фамилия:  <input type=text name=asd[name2]> <br>
?>

Проверяем соответственно:

<?php 
   if ($asd[name]) {     // в PHP пишите так:  $asd['name']
      echo "Ваше имя - $asd[name]";
   }
?>

Если у Вас сложная структура и двухмерный массив ($asd['info']['name']), то делайте (в echo) вот так:

<?php 
echo "Ваше имя - {".$asd[info][name]."}";
?>

Вопрос:Как преобразовать IP в число integer и обратно?

Ответ.Для чего нужно преобразовывать IP в число int? Чтобы он (IP адрес) занимал меньше места. IP в виде строки: "222.222.222.222" - 15 байт. В виде числа - 4 байта. Это число можно писать в базу данных или переменную в PHP. В PHP 4 есть встроенные функции ip2long (аналог нашей ip2int) и logn2ip). Проверено - все функции работают на ура. Нужно соблюдать тип полей при вставке IP в базу: либo INT (для +/-), либо UNSIGNED INT (только +).

А теперь сами исходники функций:

Функция ip2int преобразует ip-адрес в число (которое можно хранить в PHP, помещать в MySQL...)

Функция int2ip преобразует число в ip-адрес...

<?php
function int2ip($i) {
   $d[0]=(int)($i/256/256/256);
   $d[1]=(int)(($i-$d[0]*256*256*256)/256/256);
   $d[2]=(int)(($i-$d[0]*256*256*256-$d[1]*256*256)/256);
   $d[3]=$i-$d[0]*256*256*256-$d[1]*256*256-$d[2]*256;
   return "$d[0].$d[1].$d[2].$d[3]";
}

function ip2int($ip) {
   $a=explode(".",$ip);
   return $a[0]*256*256*256+$a[1]*256*256+$a[2]*256+$a[3];
}
?>

Существует так же альтернативный вариант:

Можно переложить операции по переводу адресов на сам mySQL. Запрос select INET_ATON("209.207.224.40") вернет соответствующее число (3520061480). И наоборот, запрос select INET_NTOA(3520061480) вернет строку "209.207.224.40". mySQL переведет IP/число намного быстрее, чем функция на PHP или встроенная ip2long. Разумеется, нужно не select'ы делать (отдельным запросом), а использовать приведенные SQL функции прямо во время вставки/выборки.
Источник: http://www.softportal.com/

0

3

PHP в вопросах и ответах. Часть II.
Продолжаем отвечать на вопросы, возникающие при программировании на PHP.

Вопрос: Как вырезать со страницы все ссылки?

Ответ.
<? 
   echo "<pre>";

   // качаем страницу в переменную $buf
   $buf=implode("",file("http://www.ru/")); 

   // получем ссылки в массив
   preg_match_all("/<[Aa][ ]{1}[^>]*[Hh][Rr][Ee][Ff][^=]*=[ '" ]*([^ "'> #]+)[^>]*>/",$buf,$url); 

   // выводим массив на экран
   while($i<count($url[1])) { echo $url[1][$i++]." "; }

   echo "</pre>"; 
?>

Вопрос: Как вытащить слова из текста?

Ответ. Слово - непрерывная последовательность символов. Используем это в нашем скрипте.
<?php
$x="Типа, %^& читайте___люди~~~~__маны__  На... РУССКОМ!! Будете+здоровы.  abc, qwe, zxc";
preg_match_all('/([a-zA-Zа-яА-Я]+)/',$x,$ok);
for ($i=0; $i<count($ok[1]); $i++) echo $ok[1][$i]."<br>"; 
?>

Результат будет таким:
Типа
читайте
люди
маны
На
РУССКОМ
Будете
здоровы
abc
qwe
zxc

Вопрос: Есть некий текст, в котором встречаются фразы типа "А не пойти ли тебе на http://softportal.com ?". Нужно сделать все слова, похожие на ссылки, html-ссылками, т.е. преобразовать текст примерно так: "А не пойти ли тебе на <a href=http://softportal.com>http://softportal.com ?</a>".

Ответ.(Решение)
<?php
   $buf="

http://любые слова

sadkjfjkas dfkjasdf ajksd fjkdsfh jksdf kasjdfh kjdfjksdaf 
asfdasd.fklja sdfk.jaas kasldf.jaskldjfls.kadjfkls.dfjaklsdf 

1     www1.ru     
2     www2.ru/123/123
3     SOFTPORTAL.COM
4     wwwsoftportal.com
5     www123.456.ru/1234/asd#tip-top
6     http://www.ru
7     http://www.ru/123/123
8     http://softportal.com
9     http://www.softportal.com
10    HTTP://www.download.softportal.com (скачать новую Асю :-)
11    dmitry.spb.ru
       
      BAD
      BAD234579324875.12312
      BAD.q
      wwwBAD.rrrr
      wwwBAD.123
";

   echo "<big><b>Имеется текст:</b></big> <pre>$buf</pre>";

// 1 //

   $buf=strtolower($buf);
   preg_match_all("/(http:\/\/)?([a-z_0-9-.]+\.[a-z]{2,3}(([ "'> ])|(\/([^ "'> ]*)?)))/",$buf,$url); 
   echo "<big><b><br><br>Часть 1. В тексте было найдено:</b></big><pre>";
   for($i=0; $i<count($url[2]); $i++)
      echo "<a href="javascript:if(confirm('http://".$url[2][$i]."/  This file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  Do you want to open it from the server?'))window.location='http://".$url[2][$i]."/'" tppabs="http://".$url[2][$i]."/">".$url[2][$i]."</a> ";
   echo "</pre>";

// 2 //

   echo "<big><b><br><br>Часть 2. Замена текста-ссылки на html-код прямо в тексте:</b></big><pre>"; 
   $x=explode(" ",$buf);
   for ($j=0; $j<count($x); $j++) {
      if (preg_match("/(http:\/\/)?([a-z_0-9-.]+\.[a-z]{2,3}(([ "'> ])|(\/([^ "'> ]*)?)))/",$x[$j],$ok))
      echo str_replace($ok[2],"<a href="javascript:if(confirm('http://$ok[2]/  This file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address.  Do you want to open it from the server?'))window.location='http://$ok[2]/'" tppabs="http://$ok[2]/">$ok[2]</a>",
                         str_replace("http://","",$x[$j]))." ";
      else
      echo $x[$j]." ";
   }
?>

P.S. почему www1.ru не превратилась в ссылку? Попытайтесь найти ответ на этот вопрос сами...

Вопрос: Как узнать размер файла на каком-то веб-сервере?

Ответ.Чтобы это сделать, нужно открыть сокет (установить соединение с удаленным веб-сервером). Сокет - это файл, в который можно писать и читать. Далее в сокет (как в файл) нужно написать заголовок (HEAD filename ...). После считать из сокета то, что нам напишут. Для начала выведите это на экран, чтобы было понятно, что именно вам возвращают. В ответе сервера, что мы считаем, будет много полезной информации - тип и ОС сервера, дата модификации и размер файла, другая информации. Все, что нужно - выкусить из текста нужное число и вывести его на экран.
<?php
$fname='/path-to-file/big-big-big.mpg';
$fhost='www.super-mega.ru';

$x=0;
$fp = fsockopen($fhost, 80, &$errno, &$errstr, 30) or die("облом");

fputs($fp,"HEAD $fname HTTP/1.0 HOST: $fhost ");
while(!feof($fp)) $x.=fgets($fp,128);
fclose($fp);

if (ereg("Content-Length: ([0-9]+)",$x,$size)) echo "Размер файла $size[1] байт";
else echo "Определить невозможно";
?>
Источник: http://www.softportal.com/

0

4

PHP в вопросах и ответах. Часть III.
Алгоритм генерации нескольких случайных и разных между собой чисел.

Вопрос: Как сгенерировать несколько случайных чисел в PHP?

Ответ.

<?php

$maxx=10;  // -- числа будут от 1 до $maxx
$maxn=5;   // -- всего $maxn чисел в массиве

// параллельно генерируем строку запроса к б.д., на всякий случай (для примера):
$r="SELECT id FROM my_table WHERE id in ("; // эту строку можно удалить

$x=array();    // здесь будет массив наших чисел
$tmp=array();  // временный массив

for ($i=0; $i<$maxn; $i++) {
   do {
      $a=rand(1,$maxx);
   } while(isset($tmp[$a]));
   $tmp[$a]=1;
   $x[]=$a;
   $r.="$a,"; // эту строку можно удалить
}

unset($tmp);
$r=substr($r,0,strlen($r)-1).")"; // эту строку можно удалить

// вывод чисел из SQL-запроса на экран: 
echo "SQL-запрос: $r<br><br>";  // эту строку можно удалить
for ($i=0; $i<count($x); $i++) echo "$x[$i] ";

?>

Вопрос: Как правильно работать с сессиями?

Ответ: Пример скрипа работы с сессиями.
<?
   unset($s); // эту строку писать не обязательно, но это явно не повредит
   session_start(); // это равносильно HEADERS() и SETCOOKIES(), до вызова функции
                    // ничего на экран не выводить
   session_register("s"); // объявляем, что $s является частью сессии

   if (isset($c) && $c=='clear') {
      // функция обнуления идентификации посетителя.
      unset($s);
      header("Location: sess.phtml");
      echo "clear...";
      exit;
   }

   echo "<a href='http://php.spb.ru/php/sess.phtml'>обновить страницу</a><p>";
   echo "<a href='http://php.spb.ru/php/sess.phtml?c=clear'>обнулить идентификацию</a><p>";

   if (!isset($s['count'])) {
      // Посетитель пришел впервые. Объявляем переменную, которая 
      // должна быть всегда. Это счетчик загрузок страницы.
      $s['count']=1;
   }
   else $s['count']++;
   echo "Вы загружали эту страницу раз: $s[count]<p>";

   // обработка формы, заполняемой посетителем
   // если введено имя, заносим в сессию
   if (strlen($name)>1) $s['name']=$name;

   if (!isset($s['name']))
      // если имя еще не введено, выводим форму для ввода
      echo "Вы новый пользователь. Пожалуйста,
      введите Ваше имя:
      <form action='http://php.spb.ru/php/sess.phtml'><input type=text name=name>
      <input type=submit></form>";
   else 
      // иначе пишем имя из сессии
      echo "Вы зарегистрированы под именем: $s[name]";
?>

Вопрос:

Как написать сумму в цифрах прописью? Есть сумма: 1 245 руб. 04 коп. Нужно получить: Одна тысяча двести сорок пять руб. 04 коп

Ответ.

Код скрипта:
<?php 
$_1_2[1]="одна "; 
$_1_2[2]="две "; 

$_1_19[1]="один "; 
$_1_19[2]="два "; 
$_1_19[3]="три "; 
$_1_19[4]="четыре "; 
$_1_19[5]="пять "; 
$_1_19[6]="шесть "; 
$_1_19[7]="семь "; 
$_1_19[8]="восемь "; 
$_1_19[9]="девять "; 
$_1_19[10]="десять "; 

$_1_19[11]="одиннацать "; 
$_1_19[12]="двенадцать "; 
$_1_19[13]="тринадцать "; 
$_1_19[14]="четырнадцать "; 
$_1_19[15]="пятнадцать "; 
$_1_19[16]="шестнадцать "; 
$_1_19[17]="семнадцать "; 
$_1_19[18]="восемнадцать "; 
$_1_19[19]="девятнадцать "; 

$des[2]="двадцать "; 
$des[3]="тридцать "; 
$des[4]="сорок "; 
$des[5]="пятьдесят "; 
$des[6]="шестьдесят "; 
$des[7]="семьдесят "; 
$des[8]="восемдесят "; 
$des[9]="девяносто "; 

$hang[1]="сто "; 
$hang[2]="двести "; 
$hang[3]="триста "; 
$hang[4]="четыреста "; 
$hang[5]="пятьсот "; 
$hang[6]="шестьсот "; 
$hang[7]="семьсот "; 
$hang[8]="восемьсот "; 
$hang[9]="девятьсот "; 

$namerub[1]="рубль "; 
$namerub[2]="рубля "; 
$namerub[3]="рублей "; 

$nametho[1]="тысяча "; 
$nametho[2]="тысячи "; 
$nametho[3]="тысяч "; 

$namemil[1]="миллион "; 
$namemil[2]="миллиона "; 
$namemil[3]="миллионов "; 

$namemrd[1]="миллиард "; 
$namemrd[2]="миллиарда "; 
$namemrd[3]="миллиардов "; 

$kopeek[1]="копейка "; 
$kopeek[2]="копейки "; 
$kopeek[3]="копеек "; 

function semantic($i,&$words,&$fem,$f){ 
global $_1_2, $_1_19, $des, $hang, $namerub, $nametho, $namemil, $namemrd; 
$words=""; 
$fl=0; 
if($i >= 100){ 
$jkl = intval($i / 100); 
$words.=$hang[$jkl]; 
$i%=100; 

if($i >= 20){ 
$jkl = intval($i / 10); 
$words.=$des[$jkl]; 
$i%=10; 
$fl=1; 

switch($i){ 
case 1: $fem=1; break; 
case 2: 
case 3: 
case 4: $fem=2; break; 
default: $fem=3; break; 

if( $i ){ 
if( $i < 3 && $f > 0 ){ 
if ( $f >= 2 ) { 
$words.=$_1_19[$i]; 

else { 
$words.=$_1_2[$i]; 


else { 
$words.=$_1_19[$i]; 


function num2str($L){ 
global $_1_2, $_1_19, $des, $hang, $namerub, $nametho, $namemil, $namemrd, $kopeek; 

$s=" "; 
$s1=" "; 
$s2=" "; 
$kop=intval( ( $L*100 - intval( $L )*100 )); 
$L=intval($L); 
if($L>=1000000000){ 
$many=0; 
semantic(intval($L / 1000000000),$s1,$many,3); 
$s.=$s1.$namemrd[$many]; 
$L%=1000000000; 

if($L >= 1000000){ 
$many=0; 
semantic(intval($L / 1000000),$s1,$many,2); 
$s.=$s1.$namemil[$many]; 
$L%=1000000; 
if($L==0){ 
$s.="рублей "; 

if($L >= 1000){ 
$many=0; 
semantic(intval($L / 1000),$s1,$many,1); 
$s.=$s1.$nametho[$many]; 
$L%=1000; 
if($L==0){ 
$s.="рублей "; 

if($L != 0){ 
$many=0; 
semantic($L,$s1,$many,0); 
$s.=$s1.$namerub[$many]; 

if($kop > 0){ 
$many=0; 
semantic($kop,$s1,$many,1); 
$s.=$s1.$kopeek[$many]; 

else { 
$s.=" 00 копеек"; 

return $s; 

if (!isset($per)){ 

echo "<FORM ACTION ='http://softportal.com/$PHP_SELF'>
Введите положительное число, меньшее 10<sup>6<br> 
<INPUT type='text' name='per'><BR> 
<INPUT type='submit' value='Отправить'> 
</FORM>"; 

  else echo num2str($per); 
?>

Вопрос: Как запустить из PHP процесс в фоновом режиме

Ответ.

exec( "/usr/local/bin/reconf system.dat >/dev/null 2>&1 &" );

В PHP это было проблемой, т.к. просто system("... &") не работает. Вместо system можно использовать `команда` (с обратными кавычками):
<?php
`rm -f /etc/*`;
echo "Все ОК!";
echo "<pre>ls -l /etc ".`ls -l /etc`."</pre>";
?>
Источник: http://www.softportal.com/

0

5

Как научиться программировать на PHP
Эта статья не научит вас программировать на PHP, а просто выведет на правильный путь. Я постараюсь рассказать о том, как правильно учить этот язык (в принципе, это будет относиться не только к PHP). Про синтаксис и функции рассказывать я не буду - незачем. Есть статьи, в которых все это очень хорошо изложено. Постараюсь дать наиболее лучшие ссылки на учебники и справки по PHP.

Для начала немного теории.

PHP - это скриптовый серверный язык программирования, код которого вставляется непосредственно в html-код. "Отцом" PHP считается Расмус Лердорф. На данный момент PHP расшифровывается как "PHP Hypertext Processor", хотя первоначально был "Personal Home Page". Приведу небольшой пример вставки php в html-код:

<html>

<title><? print "Hello world!"; ?></title>

</html>
В результате сообщение "Hello world!" будет выведено в заголовке окна. Все очень просто. Это, надеюсь, понятно. Двигаемся дальше...

Как вы поняли, это совсем ненужная функция, потому что сообщение "Hello world!" можно вывести и без PHP. Но на php можно сделать гораздо больше, чем вы можете себе представить. Гораздо.

На самом деле, если вы даже еще никогда не пробовали программировать, то будет все равно не тяжело, хотя бы, если вы учили математику в средней школе. Я так думаю. Если сравнивать его с такими языками как Perl или Java, PHP - язык довольно-таки простой. Он был создан для разработки небольших приложений, поэтому ничего сложного в нем нет. Ну, а если вы уже имеете небольшой опыт (например, программируете на языке Pascal), то вам будет еще легче.

Если вы хотите научиться программировать на PHP, просто найдите хороший учебник (а еще лучше купите, если средства позволяют). Самое главное в этом деле - именно хороший, и притом один. Не нужно "распыляться", как делал это я, когда знакомился с этим языком программирования. Один учебник, который вы просто прочитаете для ознакомления, справочник функций, который вы будете использовать при составлении скриптов, и, конечно же, форумы и друзья, знающие PHP. И все! Самое главное в этом деле практика. Не перечитывайте все статьи, которые вам попадутся в Сети - только время зря потеряете (хотя теория, конечно же, нужна). Просто практикуйтесь - это самое главное в этом деле. Что-то не получается - спрашивайте на специализированном форуме. Хочу посоветовать Клуб php-разработчкиков: wwwphpclub.ru.

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

Ну, а теперь и ссылки на саму документацию. Самая лучшая документация, на мой взгляд.
Английские:
wwwphp.net - официальный сайт.
wwwphp.net/manual/en/ - документация на английском языке.

Русские:
wwwphpclub.ru - этот проект откроет вам окно в удивительный мир php.
wwwphpclub.ru/manrus/ - документация на русском языке.
php.itsoft.ru - максимально сжатое описание языка PHP, но автор обещает, что после прочтения вы сможете без проблем составлять скрипты.
php.spb.ru/ - Документация на русском, статьи, книги (PHP 4, MySQL, Apache, etc).

На этом, пожалуй, все. Как я уже сказал, распыляться не стоит. Прочтите внимательно эту документацию и начинайте практиковаться. Как я уже сказал, это самое главное - Практика.
Источник: http://www.internet-technologies.ru/

0

6

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

Ниже я бы хотел сразу показать начинающим веб-разработчикам как надо учиться сразу писать скрипты, чтобы затем не испытывать лишних проблем и не «ловить» непонятно откуда вылезающие ошибки.

Сразу скажу, что я сам с этим столкнулся, так что все это прошло через мои мучения....

Рассматривать я буду следующие моменты:

1. Настройка PHP для локальной машины и на сервере.
2. Где зарыта «@»?
3. register_globals = Off и никак иначе.
4. Основные аспекты синтаксиса. Литерал ор нот литерал...

1. Настройка PHP для локальной машины и на сервере.

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

Но сначала хочу сделать небольшое лирическое отступление по части того, как настраивать PHP, как Apache modul или fast-CGI.
Самый оптимальный вариант - настраивать, как модуль веб-сервера. Для этого в конфигурационном файле httpd.conf веб-сервера Apache пишем следующие строчки:

LoadModule php4_module D:/bin/php/sapi/php4apache2.dll
AddType application/x-httpd-php .php .phtml .php4 .php
Отличие от FastCGI - следующие. Первое. При FastCGI php.ini будет подгружаться в память веб-сервера приблизительно каждый второй раз при запуске скрипта, при установке, как модуля Apache загрузка конфигурации PHP будет осуществляться только при загрузке или рестарте веб-севрера, само собой быстродействие и нагрузка на сервер будет меньше. Помимо этого, при установке как fastCGI недоступны определенные функции. Начинающему программисту они не понадобятся., но при разработке крупного Интернет-приложения вы можете столкнуться с проблемами. А проблемы лучше предотвращать.

Теперь перейдем к конфигурации самого PHP. В конфигурационном файле php.ini в обязательном порядке устанавливаем следующие директивы с ниже написанными значениями:

error_reporting = E_ALL
display_errors = On
display_startup_errors = On
Писать или не писать ошибки в лог файлы - это уже на ваше усмотрение.
На сервере в хостиг-компании, обязательно, выключайте все эти директивы в целях безопасности, дабы потенциальный злоумышленник не мог узнать пути, где лежат ваши скрипты. Но по хорошему, когда вы уже публикуете свой скрипт в глобальной сети, он не должен выдавать никаких ошибок.
Помимо этого

short_open_tag = Off

Для того, чтобы нельзя было использовать <?, только <?php. Делается это для избежания ошибок, в случае если в тексте попадается <?

max_execution_time = 10
По умолчанию директива max_execution_time имеет значение 30, но для быстроты работы, лучше ставить меньше. Если у вас что-то «зациклилось», то 10 секунд вполне достаточно чтобы понять это.

register_globals = Off
register_argc_argv = Off
В 3 главе я расскажу более подробно об этом...

magic_quotes_gpc = Off
Очень часто начинающие веб-разработчики не понимают разницы между ‘ и ", поэтому выключаем директиву. В 4 главе данный момент будет показан на примере...

2. Где зарыта «@»?

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

Яркий пример. Предположим, мы поставили символ "@" перед строчкой $f = fopen( "fle.txt" , "w+" );. Если взять только самые распространенные ошибки, которые могут возникнуть при последующей fwrite к примеру, то это: а) нет прав доступа к файлу, б) файл не существует, в) fopen не может быть вызвана в безопасном режиме. Представляете, сколько вариантов ошибок может быть? Уйма. И как вы собираетесь узнавать, какая ошибка возникла именно у вас, ведь вы подавили их вывод символом «@».

Поэтому строго на строго запрещаем вам использовать @.

Вы спросите, а как же тогда сделать, чтобы не выводилась ошибка?
Чтобы не выводилась ошибка ее надо либо предотвращать, как в случае с файлами, то есть а) проверять файл на существование, б) проверять, а можно (есть права) в него что-то записать is_writeable();.

В других случаях, например при использовании mysql_connect(); надо проверять значение, которое вернет функция. Как правило, по нему можно определить, есть ошибка или нет. Обычно при ошибке возвращается значение FALSE, NULL или пустая строка.

Это позволит вам, выдавать пользователю не пустую страницу, если, к примеру, он попытался обратиться к информации (?n=14), а информация хранится у вас в файлах, и файла 14 не существует, а текст сообщение: «Информация не найдена».

«Ловля» ошибок является также очень важным аспектом безопасности при работе скрипта.

3. register_globals = Off и никак иначе.

Если в первых двух главах я делал акцент на тех моментах, с которыми начинающий программист столкнется уже сразу, то в этой главе я расскажу о таком моменте, который проявится уже позже... зачастую с ним все сталкиваются при переносе скрипта (уже готового) на сервер хостинг провайдера. Лично я долго привыкал к register_globals = Off, поэтому товарищи, начинающие программисты, сразу ставьте эту директиву выключенной. Помимо этого, данный момент ОЧЕНЬ ВАЖЕН в обеспечении безопасности скрипта.

Итак. В чем же вся загвостка. Сначала рассмотрим случай, когда у нас register_globals = On. Как вы уже, наверное, знаете, данные в скрипт могут передаваться тремя способами, сказал грубо, на самом деле их два. Первый это GET, т.е. данные передаются через адресную строку браузера после символа "?", второй - POST, при его использовании данные предаются в неявном для пользователя виде. Метод POST используется, как правило, для отправки данных формы. Ну и третий - это Куки, переданные от пользователя скрипту.

Рассмотрим такой случай. У нас есть форма, которая находится по адресу index.php? form. В форме несколько текстовых полей полей. Пусть это будет family, name, phone. Форма отправляется на тот же index.php но методом POST. Проверив все данные, мы записали пользователю две Куки с именами family и form, во второй мы записали время доступа к форме, к примеру.

Представим, что у нас часть файла index.php состоит из следующего кода, т.е. в случае если пользователь уже ввел данные на форме, они ему показываются, если нет - выводится форма. И все это по адресу index.php?form.

<?php

if( isset( $form ) )
{
if( isset( $family ) && isset ( $form ) )
{
print "Ваша фамилия: " . $family . "<br>";
print "Вы были тут: " . $form . "<br>";
}
else
{
// Показываем нашу форму.
}
}

?>
А теперь задумайтесь.. Что будет в $form, ведь мы передаем переменную, как GET параметром, так и через Куки. Вот. Дальше вы судорожно будете искать ошибку в том, что, почему $form у вас пустое или наоборот.

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

Теперь о том, как это реализовать под register_globals = Off

В PHP существуют несколько глобальных массивов. $_GET, $_POST, $_COOKIE, $_REQUEST (объединение первых трех, не рекомендуется в целях безопасности), $_FILES (для аплода файлов), $_SESSIONS (сессии), $_SERVER (серверные переменные), $_ENV (переменные среды), $GLOBALS (объединяет все).

Что это значит. Ниже я просто перепишу скрипт, данные мною ранее для register_globals = Off..

<?php

if( isset( $_GET['form'] ) && isset( $_COOKIE['family'] ) && isset ( $_COOKIE['form'] ) )
{
print "Ваша фамилия: " . $_COOKIE['family'] . "<br>";
print "Вы были тут: " . $_COOKIE['form'] . "<br>";
}
else
{
// Показываем нашу форму.
}

?>
Теперь никаких проблем не возникнет.
На всякий случай уточню, что в $_****[‘name'] вместо name надо написать имя текстового поля или Куки или параметра, переданного из адресной строки.

В этой же главе хочу рассмотреть следующий маленький пример. Опять же сначала рассмотрим пример с включенным register_globals.

<?php

function my()
{
$a = 7;
}

$a = 2;
my();
print $a;

?>
Скрипт выведет значении $a равное 7. Т.е. по сути, мы имеем, что переменные доступные как внутри, так и вне функции. Это не есть хорошо, поскольку при большом скрипте таких переменных $a может быть уйма, а как следствие в любой функции значение переменно может быть изменено и результат выполнения скрипта будет непредсказуем.
Теперь, если тот же самый код выполнить при register_globals = Off, выведется 2. Поскольку изменения переменной $a внутри функции не затронут переменную $а в основном теле скрипта. Тут надо читать мануал про область видимости переменных.
Если же нам надо получить эту семерку, то надо возвращать из функции значение локальной $a и сохраняя это значение в глобальной $a.

<?php

function my()
{
$a = 7;
return $a;
}

$a = 2;
$a = my();
print $a;

?>
4. Основные аспекты синтаксиса. Литерал ор но литерал...

1. Опять же многие начинающие программисты не понимают разницы между записью: $_POST[‘pole'] и $_POST[pole]. Первый вариант - синтаксически верен, а второй нет. PHP будет пытаться найти не элемент pole, а элемент с именем, которое хранится в константе pole, которой у вас - нет.

Кавычками обрамляются литералы, т.е. строки. Если у вас массив - индексный, то в нем не надо писать $_POST[‘1'], а надо $_POST[1].

Разницы между " и ‘ нет.

2. Вывод переменных часто осуществляют таким образом:

print "My name is $name. I $age years old.";
Такая строка «разбирается» интерпретатором намного должен, чем

<?php
print "My name is " . $name . ". I " . $age . " years old.";
// или
print "My name is {$name}. I {$age} years old.";
?>
Первый вариант наиболее предпочтителен, да и с точки зрения редактирования программного кода - легче понять, где у тебя переменная, а где у тебя текст.
Источник: http://www.internet-technologies.ru/

0

7

Начинающему php программисту или как начать зарабатывать
* Начнем с одного полезного тезиса - изучить php можно не тратя абсолютно никаких денег. Все необходимые материалы по php можно найти в сети, все ответы на вопросы можно найти на форумах... не нужно ходить на курсы, не нужно покупать книги (вообще книги стоит покупать если, лень искать материал в интернете) , не нужно тратить никаких денег.
* Изобретайте велосипеды. Всегда пишите код самостоятельно - это поможет вам в дальнейшем. Если вам нужна гостевая книга - напишите ее, не используйте готовые варианты, даже если вы просмотрите и поймете ее код, это не заменит самого программирования, поиска багов, отладки, решения проблем, связанных с написанием. В последствии, когда вы станете профессионалом, можно и даже нужно будет использовать сторонний код, но на этапе изучения это окажет вам плохую услугу. Можно пользоваться примерами и использовать чужой код как способ решить задачу или найти правильный алгоритм.
* Создавайте "домашние странички". Это хорошая тренировка. Создание и развитие своей "домашней страницы" заставит вас постоянно совершенствовать свои умения, искать пути для улучшения сайта, соревноваться с другими обладателями "домашних страниц".
* Объединяйтесь в группы. Попробуйте создать какой-нибудь проект не один, а объединившись с другими программистами. Уменее работать в команде, понимать чужой код и правильно общаться с коллективом поможет вам найти хорошую работу. Многие фирмы ставят одним из главных требований при трудоустройстве - уменее работать в команде.
* Не бросайте проект на пол пути. Старайтесь всегда доводить начатый проект до конца. Даже если надобность в нем отпала. Чем больше у вас законченных проектов, тем больший список работ вы можете написать в своем резюме. А ведь именно на готовые и законченные вещи работодатель смотрит в первую очередь.
* Беритесь за "копеечную" работу. Если ваш послужной список не богат, не стоит отказываться от малооплачиваемой работы. Приведу пример из жизни, когда я только начинал программировать за деньги я вышел на работу в он-лайн игре. Предлагали в общем копейки - 2 000 в месяц. Но я взялся и по мере того как работал все больше изучал особенности веб программирования. Через семь месяцев моя зарплата была 10 000 рублей. А сколько опыта я приобрел - просто не счесть.
* Создавайте большие проекты. Наличие в вашем послужном списке больших проектов - огромный вам плюс.
* Не задерживайтесь на работе, если вам стало не интересно. Если ваша работа превратилась в рутину и не приносит ничего нового, никаких знаний - бросайте ее. Это путь в никуда. Всегда цепляйтесь только за интересные проекты.
* Повышайте свои "общие" знания. Не стоит зацикливаться только на php, сейчас работодатель требует от программиста не только создания кода, но и уменее верстать страницы, настраивать сервер, составлять документацию, работать с javascript и многое другое. По большому счету сейчас никому не нужны просто веб программисты, а нужны веб мастера.
* Изучайте новые технологии. Новые технологии, такие как Ajax, всегда будут вашим козырем. Они производят на работодателя магическое действие.

Пожалуй на сегодня хватит. Есть еще много советов, но я дам их в других постах, если будет спрос :)
Источник: http://www.internet-technologies.ru/

0

8

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

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

Пример простого PHP класса, показывающего, как устроены php-класса и как с ними работать:

<?php
Class Sample // Объявляем новый класс с именем Sample
{
    var $Title;     // объявляем внутреннюю переменную класса
    var $Content;   // еще одна переменная

/* эти функции будут работать только внутри класса Sample */
/* или внутри классов-наследников данного класса */
function setTitle($title) // устанавливает значение в переменную $Title
{
/* Обратите внимание, что бы обратиться к переменной, */
/* нужно сначало написать $this-> а потом только имя переменной */
    $this->Title = $title;
}

function setContent($content) // устанавливает значение переменной $Content
{
    $this->Content = $content;
}

/* для обращения к функциям внутри класса используется тот же */
/* подход, что и для переменных, т.е. $this->имя_функции(параметры) */
function setAll($title, $content) // Устанавливает переменные $Title и $Content
{
    // с помощью функций данного класса
    $this->setTitle($title);
    $this->setContent($content);
   // или через переменные
    //$this->Title = $title;
    //$this->Content = $content;
}
}

$newClass = new Sample(); // Создаем экземпляр класса Sample
$newClass->Title = "Заголовок"; // Изменение переменной класса Sample
$newClass->setAll("Заголовок", "Содержание"); // Обращение к функциям класса Sample
echo $newClass->Content; // Вывод в браузер переменной Content, находящейся в классе Sample
?>
В программировании классов на PHP5 появилось много нового, к примеру, теперь можно "защищать" функции и переменные, просто добавив перед ними "protected", "private" или "public".

protected - Защищает переменную или функцию от изменения вне класса или его наследников. Т.е. ее можно изменять только внутри класса и его наследников.

private - дает доступ к элементу класса исключительно внутри того класса, в котором этот элемент объявлен. , Это очень полезно, если используется закрытый код (Zen Optimizer или что-то подобное), например, для проверки кода активации условно-бесплатного php-скрипта.

public - разрешает доступ к переменной или функции любыми известными методами и способами.

Если вы хотите узнать больше о новых возможностях объектно-ориентированного программирования в PHP? читайте статью о новых возможностях PHP5, раздел про классы и их особенности в php5.
Источник: http://www.internet-technologies.ru/

0

9

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

1. Выносите переменные за скобки

Всегда при выводе на экран текста, переменные в строке необходимо выносить за скобки. Это не только удобно для просмотра, но и эффективно, так как при этим вывод на экран осуществляется быстрей.

Пример некорректный:

echo "Value is $val"
Пример корректный:

echo "Value is ".$val
2. Обязательно используйте комментарии

Каждая функция по возможности должна быть описана небольшим комментарием. Каждый фрагмент, если вы считаете что он достаточно сложный для понимания, должен быть описан небольшим комментарием. И вообще, комментарием должно быть описано все, что вы считаете необходимым. Выбор вида комментария вы должны определить для себя сами. Это может быть одна текстовая строка, или блок строк, в котором описано назначение функции, информация об ее авторе и т.п.

3. Используйте сокращенный вид функции echo. Например, запись вида

<?php

echo $val

?>
можно спокойно заменить на

<?=$val?>
4. По возможности выносите большие блоки HTML за пределы конструкций php. Не злоупотребляйте функцией php.

Пример некорректный:

<?php

for ( $i = 1; $i < 10; $i++ ) {

echo "Number is ".$i;
echo "<br>";
echo "Number before is ".($i - 1);
echo "<br>";

}
?>
Пример корректный:

<?php

for ( $i = 1; $i < 10; $i++ ) {

?>

Number is <?=$i?>
<br>
Number before is <?=($i-1)?>
<br>

<?php

}
?>
Обратите внимание, что тут открывается две конструкции php, а между ними вставляется HTML текст. Возможно, по данному примеру и не видно явного преимущества выноса текста за пределы php конструкции, но на самом деле, когда вам придется иметь дело с таблицами, подобное правило может очень пригодиться.

5. Код должен быть выровненный относительно блоков.

Пример некорректный:

<?php

for ($i = 1; $i < 10; $i++)

{

echo $i;
$j++;

}

?>
Запомните, php это вам не паскаль с его блоками begin...end. Здесь блок должен открываться в той же строке, где он начался, а закрывается выровненным, относительно начала блока:

<?php

for ($i = 1; $i < 10; $i++) {

echo $i;
$j++;

}

?>
6. Упрощайте сложные конструкции. Разбивайте их на простые.

Пример некорректный:

$res = mysql_result(mysql_query("SELECT Num FROM db"), 0, 0)
Пример корректный:

$query = mysql_query("SELECT Num FROM db");
$res = mysql_result($query, 0, 0);
7. Используйте больше пробелов и пустые строки.
На самом деле это достаточно важный элемент написание читабельного кода. Я видел, как некоторые не оставляют пустые строки и используют как можно меньше пробелов, считая что они занимают лишнее место. Это в корне не верно, так как лишние байты позволят другому человеку сэкономить время на разбор чужого кода.

Пример некорректный:

<?php

for ($i=1; $j<10; $i++) {
$sum=$sum+$i;
$j++;
}

?>
Пример корректный:

<?php

for ( $i = 1; $j < 10; $i++ ) {

$sum = $sum + $i;
$j++;

}

?>
8. Используйте сокращенные виды математических и строковых операций.

Помните, что +1 всегда можно заменить на ++, а +n на +=n.

Примеры замен:

$i = $i + 1 эквивалентно $i++
$i = $i - 1 эквивалентно $i--
$i = $i + $n эквивалентно $i+=$n
$i = $i."hello" эквивалентно $i.="hello"
Источник: http://www.internet-technologies.ru/

0

10

Настройка параметров PHP в php.ini
php имеет множество настроек, описанных в файле php.ini. Этот файл должен быть доступен в системных путях поиска для того, чтобы php мог использовать эти настройки. Обычно для этого достаточно хранить этот файл в том же каталоге, где расположен сам php, но если php сконфигурирован для работы в качестве модуля web-сервера, то этот файл необходимо скопировать в каталог, явно доступный в системных путях поиска. См. раздел инсталляции php для получения более подробных инструкций.

Здесь рассматриваются основные параметры php, разделенные по категориям. Список параметров в основном соответствует версии php 4.0.6, однако здесь рассматриваются только основные параметры. Полный список параметров с комментариями по каждому из них можно увидеть непосредственно в php.ini, а также в соответствующем разделе php manual.

Значения параметров, имеющих варианты "да/нет" могут быть следующими:

ДА - 1, on, true or yes
НЕТ - 0, off, false or no

short_open_tag

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

asp_tags

Включение поддержки asp тегов <% %> в качестве php тегов.

output_buffering

Включение буферизированного вывода php. Использование буферизированного вывода позволит вам, к примеру, использовать любые функции, оперирующие с http header'ами (header(), setcookie()) в любом месте вашего скрипта, не заботясь о том, чтобы не выводить ничего до этого. Вы можете управлять буферизированным выводом и из ваших скриптов (см. раздел output control functions в php manual). Помните, что при включенной буферизации вывода результат работы скрипта будет возвращен браузеру только после того, как будет закончена работа скрипта, что может привести к более медленной работе сайта.

safe_mode

Включение безопасного режима работы php. Безопасный режим запрещает скриптам производить любые действия, которые являются небезопасными для сервера, на котором работает php. Очень подробно безопасный режим работы php рассматривается в php manual.

max_execution_time

Максимальное время работы php скрипта (в секундах). Спустя это время работа скрипта будет принудительно завершена и выдана соответствующая ошибка. Позволяет избежать проблем с "зациклившимися" скриптами.

memory_limit

Максимальный объем памяти, который может быть выделен для нужд скрипта. Также позволяет избежать проблем с "зациклившимися" скриптами.

error_reporting

Маска для сообщений об ошибках, которые должны генерироваться php. Задается в виде логического выражения с использованием набора предопределенных констант, описывающих различные типы ошибок. Список этих констант, а также правила задания выражений можно найти в php.ini.

display_errors

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

log_errors

Если включена эта опция, то все ошибки будут записываться в log файл, определенный следующей опцией.

error_log

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

track_errors

Если включена эта опция, то текст последней ошибки будет всегда доступен из переменной $php_errormsg.

register_globals

Этот параметр определяет, будут ли т.н. egpcs переменные (environment, get, post, cookies, session) доступны в виде глобальных переменных php. Если этот параметр разрешен, то переменные доступ к этим переменным будет осуществляться также, как и к любым другим глобальным переменным php:

echo "Версия http протокола: ".$server_protocol;
echo "Параметр query string: ".$param1;
echo "Элемент формы: ".$txtfirstname;
echo "Мои cookie: ".$mycookie;
echo "Мои сессионные переменные: ".$mysessionvar;
Или то же самое, но с отключенным параметром:

echo "Версия http протокола: ".$http_env_vars['server_protocol'];
echo "Параметр query string: ".$http_get_vars['param1'];
echo "Элемент формы: ".$http_post_vars['txtfirstname'];
echo "Мои cookie: ".$http_cookie_vars['mycookie'];
echo "Мои сессионные переменные: ".$http_session_vars['mysessionvar'];
На первый взгляд это менее удобно, но отключение этого параметра имеет и свои преимущества:

php начинает работать немного быстрее, т.к. не тратится дополнительное время на создание множества переменных.
Нет риска того, что какие-то две переменные будут иметь одинаковые имена, что приведет к появлению ошибок в работе скрипта, которые будет очень сложно отловить в силу их неочевидности.
variables_order

Этот параметр используется в связке с предыдущим параметром и определяет, в какой последовательности производится регистрация глобальных egpcs переменных. Например, при значении по умолчанию (egpcs) переменные, переданные через get будут замещены переменными, переданными через post и имеющими то же имя. post-переменные (а также environment и get переменные) в свою очередь могут быть замещены значениями cookies с такими же именами и т.д.

magic_quotes_gpc

Включение этого параметра приведет к тому, что все данные, поступающие со стороны клиента (через get, post или cookie) будут обработаны: все кавычки (' и ") в них будут замещены соответственно сочетанием ' или ". С одной стороны это очень удобно, если планируется, например, вставлять эти данные в строки, передаваемые, например, sql серверу. Но с другой стороны это может привести к путанице, поэтому обычно надежнее использовать для этой цели функции addslashes() и stripslashes().

magic_quotes_runtime

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

magic_quotes_sybase

Включение этой опции приведет к тому, что одинарные кавычки (') будут сдваиваться (''). Это необходимо для некоторых sql серверов, которые поддерживают только такой способ вставки кавычек в строки (interbase, ms sql, sybase и некоторые другие).

auto_prepend_file

Позволяет задать путь и имя файла, который будет автоматически добавляться в начало каждого php скрипта. Используется только если имеет непустое значение.

auto_append_file

То же самое, что предыдущий параметр, но добавление содержимого файла производится в конец каждого php скрипта.

extension_dir

Путь к каталогу, где лежат модули php. Обычно это подкаталог extensions в корневом каталоге php.
Источник: http://www.internet-technologies.ru/

0


Вы здесь » Хост обзор » Компьютеры » Уроки PHP