Справочник функций

Ваш аккаунт

Логин:
Пароль:
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:
Убрать блок ВКонтакте навсегда

Последние темы форума

Показать новые сообщения »

Почтовая рассылка



Подписчиков: 19017
Последний выпуск: 23.04.2012

Часто задаваемые вопросы (FAQ) по PHP

FAQ взят из конференции fido7.ru.php, дополняется и пополняется из той же конференции, а также из других источников. FAQ по PHP разрабатывается.


1. Общие вопросы

1.1 Что такое PHP?

(перевод документации) "PHP, что означает 'PHP: Hypertext Preprocessor' ('PHP: Предварительный Обработчик Гипертекста'), является внедряемым в HTML языком описания скриптов.

Многое из его синтаксиса было позаимствовано из C, Java и Perl с добавлением некоторых уникальных, специфичных для PHP, особенностей.

Целью создания языка является предоставление web-разработчикам возможности быстрого создания динамически генерируемых страниц."

(ответ ivan kovalenko, 2:5057/53)

1.2 Где взять PHP?

Hа сайте производителя: http://www.php.net/downloads.php

(ответ ivan kovalenko, 2:5057/53)

1.3 Как расшифровывается 'PHP'?

'PHP' - это рекурсивный акроним (аналогия с 'Linux' - 'Linux Is Not UniX') словосочетания 'PHP: Hypertext Preprocessor' ('PHP: Предварительный Обработчик Гипертекста'), что успешно отражает общую идеологию его функционирования.

До версии PHP 3.0 название было несколько иным ('PHP/FI') и расшифровывалось как 'Personal Home Page tools / Forms Interpreter' ('Утилиты для Домашней Страницы / Интерпретатор Форм').

(ответ ivan kovalenko, 2:5057/53)


2. Сетевые дела

2.1 Почему с'апложенные jpeg-файлы не отобpажаются? (бьются?) Веб-сервер - русский Апач

Все дело в том, что русский Апач по умолчанию производит перекодировку файлов.
Так, символ с кодом 0х00 он заменяет на пробел (символ с кодом 0х20).
Для борьбы с этим эффектом нужно добавить в конфигурационный файл Апача httpd.conf следующее:

<Location>
    CharsetRecodeMultipartForms Off
</Location>
(ответ Дмиртия Селезнева, 2:5095/6)

2.2 Как опpеделить валидность e-mail?

Функция, предложенная Maxim Matyukhin :

function valid_mail ($email) {
	if (eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-\.]+)\.([a-z]{2,3}$)",
          $email, $check)) {
		if (getmxrr($check[1] . "." . $check[2]) return "Valid";
		else return "No MX for " . $check[1] . "." . $check[2];
	}
	else return "Badly formed address";
}

Есть другой способ, использующий сокеты, предложенный Jon S. Stevens

<?php

/*
By: Jon S. Stevens jon@clearink.com
Copyright 1998-1999 Jon S. Stevens, Clear Ink
This code has all the normal disclaimers.
It is free for any use, just keep the credits intact.
*/

function validateEmail ( $email )
{
    global $SERVER_NAME;
    $return = array ( false, "" );
    list ( $user, $domain )  = split ( "@", $email, 2 );
    $tld = $domain;
    if ( checkdnsrr ( $tld, "MX" ) )
    {
        if ( getmxrr ( $tld, $mxhosts, $weight ) )
        {
            for ( $i = 0; $i  0 ) && ( $out == "" ) )
                        { break; }
                        else
                        { $s++;    }
                        if ( $s == 9999 ) { break; }
                    
                    } while ( $out == "" );
                    set_socket_blocking ( $fp, true );

                    fputs ( $fp, "HELO $SERVER_NAME\n" );
                    $output = fgets ( $fp, 2000 );
                    fputs ( $fp, "MAIL FROM: <info@" . $tld . ">\n" );
                    $output = fgets ( $fp, 2000 );
                    fputs ( $fp, "RCPT TO: <$email>\n" );                
                    $output = fgets ( $fp, 2000 );
                    if ( ereg ( "^250", $output ) )
                    {
                        $return[0] = true;
                    }
                    else
                    {
                        $return[0] = false;
                        $return[1] = $output;
                    }
                    fputs ( $fp, "QUIT\n" );
                    fclose( $fp );

                    if ( $return[0] == true )
                    { break; }
                }
            }
        }
    }
    return $return;
}
?> 

2.3 Как опpеделить валидность URL?

Лично я использую следующую функцию:

<?php

function check_url($url) {
 if (eregi( '^http://', $url)) {
    $urlArray = parse_url($url);
       if (!$urlArray[port]) $urlArray[port] =  '80';
       if (!$urlArray[path]) $urlArray[path] =  '/';
       $sock = fsockopen($urlArray[host], $urlArray[port], &$errnum, &$errstr);
       if (!$sock) $res =  'DNS';
       else {
          $dump .=  "GET $urlArray[path] HTTP/1.1\r\n";
          $dump .=  "Host: $urlArray[host]\r\nConnection: close\r\n";
          $dump .=  "Connection: close\r\n\r\n";
          fputs($sock, $dump);
          while ($str = fgets($sock, 1024)) {
             if (eregi("^http/[0-9]+.[0-9]+ ([0-9]{3}) [a-z ]*", $str))
               $res[code] = trim(eregi_replace('^http/[0-9]+.[0-9]+
([0-9]{3})
[a-z ]*',  "\\1", $str));
             if (eregi("^Content-Type: ", $str))
               $res[contentType] = trim(eregi_replace("^Content-Type: ",
"",
$str));
          }
          fclose($sock);
          flush();
          return $res[code];
       }
 } else $res = "N/A";
 return $res;
}
?>
(ответ Дмиртия Селезнева, 2:5095/6)


3. PHP и БД

3.1 Имеем MySQL. Добавляем запись с автоинкрементным уникальным индексом. Как узнать значение последнего индекса?

Есть замечательная функция mysql_insert_id ([идент. соединения]). Возвращает целое значение, которое и есть необходимый идентификатор, сгенерированный полем AUTO_INCREMENT в последем операторе INSERT.

Подробно см. в доках по функциям PHP.

(ответ Дмиртия Селезнева, 2:5095/6)

4. PHP на Win32

4.1 Скрещивание PHP/Win32 и Apache/Win32

Предполагается, что вы уже установили PHP и Apache. Для внесения пущей ясности положим, что PHP установлен в каталоге 'C:\HTTP\php', а Apache в 'C:\HTTP\apache', причем Apache уже настроен и без лишней ругани отзывается на имя localhost, а необходимые изменения внесены в php.ini. Теперь определимся, каким образом PHP будет функционировать: в виде CGI-приложения [1] или как SAPI-модуль Apache [2] (разбор полетов на предмет различий см.)

1. Hастройка PHP в качестве CGI-приложения.

Откройте Notepad'ом (FAR'ом, NC, WinCmd, и т.п.) файл C:\HTTP\apache\conf\httpd.conf и найдите в нем и раскомментируйте (уберите значок # в начале строки) следующие строчки:

      #AddType application/x-httpd-php .php
      #AddType application/x-httpd-php-source .phps

,затем вставьте после них это:

      ScriptAlias "/__php_dir__/" "C:/HTTP/php/"
      Action application/x-httpd-php "/__php_dir__/php.exe"

2. Hастройка PHP в качестве модуля Apache.

Добавьте в файл C:\HTTP\apache\conf\httpd.conf строчки:

      LoadModule php4_module c:/HTTP/php/sapi/php4apache.dll
      AddType application/x-httpd-php .php

Тестирование

Теперь перезапустите Apache. Создайте в каталоге C:\HTTP\apache\htdocs файл test.php следующего содержания:

<?php phpinfo(); ?>

Запустите браузер и перейдите на http://localhost/test.php. Если ваш браузер отобразил нечто табличное с большим количеством непонятной информации, примите поздравления. Если вместо этого ваши старания увенчались 'Error 500 - Internal Server Error', попробуйте прочитать эту статью немного более внимательно.

(ответ ivan kovalenko, 2:5057/53)

Оставить комментарий

Оставлять комментарии могут только зарегистрированные пользователи.

Если вы не являетесь зарегистрированным пользователем, то вам необходимо зарегистрироваться. Регистрация бесплатна. Если вы уже зарегистрированы на CodeNet, то вам необходимо ввести логин и пароль в верхней (Alt-U) части страницы.

Комментарии

1. hlomzik / 15 апреля 2005, 22:04:37
Мне нравитсяМне не нравится

В последнее время появляется много сайтов на 4-хбуквенных доменах (.info, .name etc), поэтому в регулярном выражении необходимо изменить длину домена (т.е. "{2,4}")
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог