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

Все о PHP и даже больше

  Все выпуски  

Все о PHP и даже больше #14


Информационный Канал Subscribe.Ru

Все о PHP и даже больше...

.:: Путь от начинающего до эксперта ::.

# 14
10/2003

23 июня 2003г.

Проект сайта GreatWeb.RU

Ведущий рассылки: Бабушкин Евгений

Архив рассылки


    В этом выпуске:

  • Наши проекты
  • Советы и трюки по PHP
  • Перекодировщик translita в кириллицу и обратно на PHP
  •   Полезные ссылки:

  • Лучший хостинг
  • Раскрутка
  • Советы Web-мастеру
  • Книги по программировании
  • WEB-браузеры
  • Миры PhotoShop
  • Скрипты
  • Лучшие Рассылки
  • Партнерская программа
  • Взлом и Защита

  • Привет программер!

    :.:: Наши проекты:

     

    GreatWeb.RU - Портал продвинутых юзеров. Только здесь все о веб-дизайне, раскрутке, выбору хостинга и не только...
    Читайте здесь последние новости интернета!

    Форум продвинутых юзеров. Отличный форум! Задавайте абсолютно любые вопросы, вам обязательно ответят и помогут решить Ваши проблемы.
    Самым активным пользователям будет выделен красивый почтовый ящик на 5 mb. Ваше_имя@greatweb.ru


    :.:: Новости GreatWeb.Ru:


    Добавлен обещанный нами раздел - Взлом и Защита. Читайте и учитесь :)
    А также, очередное пополнение в "Советы Веб-мастеру”.

    1. Еще один способ убрать баннеры с h1.ru - я совершенно случайно обнаружил более элегантный способ избавления от баннеров h1...

    2. Что такое юзабилити? - как часто начинающий пользователь, путешествуя по Интернету, встречает незнакомые слова! И вот еще одно - "юзабилити"...

    3. Какой вид дизайна выбрать? - итак, уважаемые сайтостроители, скажите мне, сколько видов дизайна вы знаете? А? Так, слышу справа кричат - жесткий... Верно! А еще? Резиновый... Так! А какой лучше? Ой! Не надо так кричать... Давайте разбираться...

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

    А так же добавлено новое голосование: "Переустановить ли нам форум на IPB?". Участвуй!

     
    :.:: Реклама

     

    WebTalk.Ru - форум веб-мастеров, где Вы найдете ответы на любой вопрос. PHP, Perl, MySQL, раскрутка сайта, верстка
    и дизайн, обсуждение и критика Ваших сайтов. А также новости интернета, программы и редакторы для вебмастера,
    обсуждение Windows, Linux, вопросов хостинга и многое другое!


    Если Вы хотите опубликовать свою рекламу в этой рассылке, пишите на admin@greatweb.ru с
    темой: "Реклама в рассылке Все о PHP и даже больше".


    .:: Советы и трюки по PHP

     

    Небольшое вступление
    Началом написания серии статей "Советы и трюки" послужил отчет "Tips and Tricks" Расмуса Лирдофа (Rasmus Lerdorf) с конференции PHPCon2002, которая состоялясь 24 октября 2002 года в городе Milbrae, Калифорния, США. Изначально планировалось просто перевести отчет по просьбам членов Клуба разработчиков PHP, но по мере чтения статей возникло много спорных вопросов и разногласий с автором, поэтому я постарался как можно более четко определить и разъяснить преимущества и недостатки того, или иного подхода оптимизации решений.

    Часть 1. Оптимизация

    1. Без необходимости не используйте регулярные выражения.

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

    Неправильно: <? $new = ereg_replace("-","_",$str); ?>
    Правильно: <? $new = str_replace("-","_",$str); ?>
    Неправильно: <? preg_match("/(\..*?)$/",$str,$reg); ?>
    Правильно: <? substr($str,strrpos($str,)); ?>

    2. Используйте ссылки при обработке больших массивов данных для экономии памяти сервера.

    Работа со ссылками (references) является более приемлемой при обработке больших объемов информации, хотя и немного медленней, чем работа с копией, но использует меньший объем памяти. Поэтому Вы должны самостоятельно определить, запасы каких ресурсов на сервере более рационально использовать - процессора или памяти.

    3. Постоянные (persistent) соединения с БД

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

    Учтите, в PHP реализована функция отключения постоянных соединений, поэтому если у провайдера в конфигурации PHP установлена директива mysql.allow_persistent = Off, то соединения вызываемые функцией mysql_pconnect() будут обрабатываться как mysql_connect().

    Очень часто встречаются советы не использовать постоянные соединения с БД. Это связано в первую очередь с тем, что многопоточные веб-сервера, к которым относится и Apache, не могут разделить со своими потомками соединение с БД. Таким образом если следующий запрос приходит на другого потомка, то он создает новое постоянное соединение, что со временем приводит к появлению большого количества незакрытых соединений с БД и переполнению допустимого лимита max_connections в MySQL. Возможно два решения этой проблемы: первое описано выше заключается в запрете использования постоянных соединений, второе - использовать малое значение времени жизни постоянного соединения в директиве wait_timeout конфигурации MySQL. По умолчанию оно составляет 28800 сек. (8 часов), по истечению которых после отсутствия активности соединения будет закрыто.

    Помимо всего этого существуют еще некоторые проблемы постоянных соединений с транзакциями и блокировками таблиц. Так, если таблица блокируется запросом на транзакцию или LOCK TABLE и при этом скрипт заканчивает свое выполнение до завершения транзакции или выполнения разблокировки таблицы UNLOCK TABLE соответственно, то вторичная попытка доступа к таблице через это же постоянное соединение будет отклонена. При использовании непостоянного соединения с БД, при завершении скрипта соединение закрывается автоматически и при этом снимает блокировку со всех таблиц и завершает все транзакции. Решением этой проблемы есть регистрации функции register_shutdown_function() которая бы по завершению скрипта снимала блокировку с таблиц и завершала транзакции.

    Так что можете использовать, а можете и не использовать, все зависит от поставленных задач.

    4. Используешь MySQL? Проверь mysql_unbuffered_query()

    Небуферезированные запросы к БД MySQL применяется так же как и mysql_query(). Разница заключается в том, что вместо того, чтоб ожидать полного окончания запроса сохранить результат в клиентском API, небуферизированный запрос делает доступными результаты своего выполнения как можно скорее, минуя буферизацию в клиентском API. Таким образом Вы получаете боле быстрый доступ к данным с меньшими затратами памяти. Недостатком использования такого типа запросов является невозможность получить доступ к функции mysql_num_rows(),этои запросы медленнее на маленьких выборках SELECT, а также хотелось бы заметить то, что при выполнении любого другого запроса, все данные которые небыли выведены, будут потеряны.

    5. В поисках идеала

    Если решения выглядят для Вас комплексно, то наверняка найдется более простой и очевидный подход к решению задачи.

    Источник: GetInfo.ru


     
    .:: Пишем перекодировщик translita в кириллицу и обратно на PHP

     

    Случалось ли вам переписываться с русскими, которые живут за границей и у которых, соответственно, нет клавиатуры с кириллицей? Эти люди, обычно, пишут языком с интересным названием "translit" (или транслитерация, выражаясь по-русски). Кто в танке, поясняю - это русский текст, набранный латинскими буквами. Его, естественно, очень трудно читать непривыкшему человеку... Но зачем мучаться, если можно написать программу, которая бы перекодировала этот транслит в нашу родную кириллицу. Написанием этой программы мы и займёмся в этой статье.

    Итак, как Вы уже поняли, сегодня мы напишем на PHP программу которая перекодирует translit в кириллицу и обратно. Лично мне это программа очень помогает, т.к. мне часто приходится иметь дело с письмами, написанными на транслите. Это и вынудило меня написать такую программу. Ну что ж, давайте, наконец, приступим к делу.

    Сама по себе программа (скрипт) небольшая и будет состоять всего из одного файла. Предлагаю назвать его perekod.php. Сначала в этом файле создаём форму с полем ввода для текста. Код будет выглядеть так:

    <?
    echo"
    <form method="post">
    <table width=100% align=100%>
    <tr><td align=center bgcolor="#F9F9F9"><input type=radio value=ruslat name=translite> <font
    face=verdana size=2>С русского на латиницу</font> <input type=radio value=latrus name=translite> <font
    face=verdana size=2>С латиницы на русский</font></td></tr>
    <tr><td align=center bgcolor="#F9F9F9">
    <textarea name=body cols=65 rows=10>"p; /* Пока мы создали только форму до поля ввода текста. Всё выполнение функций будет происходить именно в ней */

    /* Теперь задаём сами функции перекодировки translita в кириллицу и обратно. Вот код: */


    function ruslat ($string) # Задаём функцию перекодировки кириллицы в транслит.
    {
    $string = ereg_replace("ж","zh",$string);
    $string = ereg_replace("ё","yo",$string);
    $string = ereg_replace("й","i",$string);
    $string = ereg_replace("ю","yu",$string);
    $string = ereg_replace("ь","'",$string);
    $string = ereg_replace("ч","ch",$string);
    $string = ereg_replace("щ","sh",$string);
    $string = ereg_replace("ц","c",$string);
    $string = ereg_replace("у","u",$string);
    $string = ereg_replace("к","k",$string);
    $string = ereg_replace("е","e",$string);
    $string = ereg_replace("н","n",$string);
    $string = ereg_replace("г","g",$string);
    $string = ereg_replace("ш","sh",$string);
    $string = ereg_replace("з","z",$string);
    $string = ereg_replace("х","h",$string);
    $string = ereg_replace("ъ","''",$string);
    $string = ereg_replace("ф","f",$string);
    $string = ereg_replace("ы","y",$string);
    $string = ereg_replace("в","v",$string);
    $string = ereg_replace("а","a",$string);
    $string = ereg_replace("п","p",$string);
    $string = ereg_replace("р","r",$string);
    $string = ereg_replace("о","o",$string);
    $string = ereg_replace("л","l",$string);
    $string = ereg_replace("д","d",$string);
    $string = ereg_replace("э","yе",$string);
    $string = ereg_replace("я","jа",$string);
    $string = ereg_replace("с","s",$string);
    $string = ereg_replace("м","m",$string);
    $string = ereg_replace("и","i",$string);
    $string = ereg_replace("т","t",$string);
    $string = ereg_replace("б","b",$string);
    $string = ereg_replace("Ё","yo",$string);
    $string = ereg_replace("Й","I",$string);
    $string = ereg_replace("Ю","YU",$string);
    $string = ereg_replace("Ч","CH",$string);
    $string = ereg_replace("Ь","'",$string);
    $string = ereg_replace("Щ","SH'",$string);
    $string = ereg_replace("Ц","C",$string);
    $string = ereg_replace("У","U",$string);
    $string = ereg_replace("К","K",$string);
    $string = ereg_replace("Е","E",$string);
    $string = ereg_replace("Н","N",$string);
    $string = ereg_replace("Г","G",$string);
    $string = ereg_replace("Ш","SH",$string);
    $string = ereg_replace("З","Z",$string);
    $string = ereg_replace("Х","H",$string);
    $string = ereg_replace("Ъ","''",$string);
    $string = ereg_replace("Ф","F",$string);
    $string = ereg_replace("Ы","Y",$string);
    $string = ereg_replace("В","V",$string);
    $string = ereg_replace("А","A",$string);
    $string = ereg_replace("П","P",$string);
    $string = ereg_replace("Р","R",$string);
    $string = ereg_replace("О","O",$string);
    $string = ereg_replace("Л","L",$string);
    $string = ereg_replace("Д","D",$string);
    $string = ereg_replace("Ж","Zh",$string);
    $string = ereg_replace("Э","Ye",$string);
    $string = ereg_replace("Я","Ja",$string);
    $string = ereg_replace("С","S",$string);
    $string = ereg_replace("М","M",$string);
    $string = ereg_replace("И","I",$string);
    $string = ereg_replace("Т","T",$string);
    $string = ereg_replace("Б","B",$string);
    return $string;
    }

    /* Можете, конечно, задать любой другой алфавит. По крайней здесь я использовал тот алфавит, которым сам обычно пишу письма транслитом*/
    function latrus ($string) # Теперь задаём функцию перекодировки транслита в кириллицу.
    {
    $string = ereg_replace("zh","ж",$string);
    $string = ereg_replace("Zh","Ж",$string);
    $string = ereg_replace("yo","ё",$string);
    $string = ereg_replace("Yu","Ю",$string);
    $string = ereg_replace("Ju","Ю",$string);
    $string = ereg_replace("ju","ю",$string);
    $string = ereg_replace("yu","ю",$string);
    $string = ereg_replace("sh","ш",$string);
    $string = ereg_replace("yе","э",$string);
    $string = ereg_replace("jа","я",$string);
    $string = ereg_replace("yа","я",$string);
    $string = ereg_replace("Sh","Ш",$string);
    $string = ereg_replace("Ch","Ч",$string);
    $string = ereg_replace("ch","ч",$string);
    $string = ereg_replace("Yo","Ё",$string);
    $string = ereg_replace("Ya","Я",$string);
    $string = ereg_replace("Ja","Я",$string);
    $string = ereg_replace("Ye","Э",$string);
    $string = ereg_replace("i","и",$string);
    $string = ereg_replace("'","ь",$string);
    $string = ereg_replace("c","ц",$string);
    $string = ereg_replace("u","у",$string);
    $string = ereg_replace("k","к",$string);
    $string = ereg_replace("e","е",$string);
    $string = ereg_replace("n","н",$string);
    $string = ereg_replace("g","г",$string);
    $string = ereg_replace("z","з",$string);
    $string = ereg_replace("h","х",$string);
    $string = ereg_replace("''","ъ",$string);
    $string = ereg_replace("f","ф",$string);
    $string = ereg_replace("y","ы",$string);
    $string = ereg_replace("v","в",$string);
    $string = ereg_replace("a","а",$string);
    $string = ereg_replace("p","п",$string);
    $string = ereg_replace("r","p",$string);
    $string = ereg_replace("o","о",$string);
    $string = ereg_replace("l","л",$string);
    $string = ereg_replace("d","д",$string);
    $string = ereg_replace("s","с",$string);
    $string = ereg_replace("m","м",$string);
    $string = ereg_replace("t","т",$string);
    $string = ereg_replace("b","б",$string);
    $string = ereg_replace("I","Й",$string);
    $string = ereg_replace("'","Ь",$string);
    $string = ereg_replace("C","Ц",$string);
    $string = ereg_replace("U","У",$string);
    $string = ereg_replace("K","К",$string);
    $string = ereg_replace("E","Е",$string);
    $string = ereg_replace("N","Н",$string);
    $string = ereg_replace("G","Г",$string);
    $string = ereg_replace("Z","З",$string);
    $string = ereg_replace("H","Х",$string);
    $string = ereg_replace("''","Ъ",$string);
    $string = ereg_replace("F","Ф",$string);
    $string = ereg_replace("Y","Ы",$string);
    $string = ereg_replace("V","В",$string);
    $string = ereg_replace("A","А",$string);
    $string = ereg_replace("P","П",$string);
    $string = ereg_replace("R","Р",$string);
    $string = ereg_replace("O","О",$string);
    $string = ereg_replace("L","Л",$string);
    $string = ereg_replace("D","Д",$string);
    $string = ereg_replace("S","С",$string);
    $string = ereg_replace("M","М",$string);
    $string = ereg_replace("I","И",$string);
    $string = ereg_replace("T","Т",$string);
    $string = ereg_replace("B","Б",$string);

    return $string;
    }

    /*Код конечно большой, но что ж поделаешь, уж такой у нас алфавит:) Можно конечно было использовать вместо функции ereg_replace функцию eregi_replace, чтобы хоть как-то уменьшить код, но тогда при перекодировке текста регистр символов не сохранялся бы*/

    /*Остался совсем небольшой код с помощью которого и будет происходить перекодировка текста. Итак, вот он:*/

    if ($action == "TRANSLIT") {
    if ($translite == "ruslat") {
    if ($body == "") {
    echo "А текст-то где?"; /* Предупреждаем пользователя на тот случай, если он не введёт текст.*/
    }
    else {
    $body = ruslat($body);
    echo "$body"; /* Иначе выводим пользователю уже перекодированный текст*/
    }
    }
    if ($translite == "latrus"){
    if ($body == ""){
    echo "А текст-то где?"; /* Предупреждаем пользователя на тот случай, если он не введёт текст.*/
    }
    else{
    $body = latrus($body);
    echo "$body"; /* Иначе выводим пользователю уже перекодированный текст*/
    }
    }
    if ($translite == ""){
    echo "А перекодировать-то с чего на что будем?"; /* Предупреждаем пользователя на тот случай, если он не выбирет с чего на что необходимо перекодировать.*/
    }
    }
    echo"
    </textarea></td></tr>
    <tr><td align=center bgcolor="#F9F9F9"><input type=submit name=action value=TRANSLIT></td></tr>
    <table>
    "; /* Выводим нижнюю часть формы с кнопкой, приводящей в действие скрипт*/
    ?>

    Внимание: Если версия PHP-интерпретатора 4.0.3 и выше, или в конфигурации PHP включена директива track_vars, то вначале данного когда вставьте эти две строчки: extract($HTTP_GET_VARS);
    extract($HTTP_POST_VARS);

    Вот вроде бы и всё, как видите сам скрипт очень даже простой и, надеюсь, не вызовет у вас затруднений.

    Источник: ProtoPlex.Ru

     

    Все свои вопросы Вы можете задавать на нашем форуме.

    © 2002-2003 Copyright by GreatWeb Design
    Копирование материалов рассылки возможно только в случае явного указания на сайт "GreatWeb.RU" как на источник информации.



    http://subscribe.ru/
    E-mail: ask@subscribe.ru
    Отписаться
    Убрать рекламу

    В избранное