Mr.KTO blog


  • Рубрики

  • Поиск

  •  
      
  • Поиск
  • реклама на mrkto.com





Архив рубрики «PHP»

Мысли вслух

26 октября 2007

PHP 5 мне напоминает Windows Vist'у – следование стандартам, следование моде.
Но ничего принципиально нового (кроме, разве что, новых багов).

Как писать посты о PHP в WordPress

28 сентября 2007

Вот один из случаев... которых не было.
Из их файлов... которых нет.
©MenInBlack2

Об этом не пишут в блогах, не обсуждают на форумах, но если вы не сталкивались с проблемами при написании постов с исходным PHP-кодом, или блоками AdSense, то я чего-то не понимаю (объясните тогда).

1. Для начала, скачайте и установите новую версию WordPress.

В старых версия багов только больше.

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

  1. Скачать из root-ftp-директории блога (из /):
    - wp-config.php
    - .htaccess (если изменяли) и созданные вами файлы (если загружали в /)
  2. /wp-content/ со всеми вложенными папками
  3. Сделать экспорт таблиц БД:
    из phpMyAdmin (не помните логин/пароль - см. wp-config.php)
    Экспорт / Выделить все таблицы, как SQL, Упаковать .zip / OK

2. Улучшаем представление кода php в блоках <pre>

Наверное, вы заметили, что кавычки даже в <pre></pre> (даже если заменить " на &#34;) получаются вот такие: «» (эти я просто скопировал через буфер обмена, можно также: &laquo; &raquo;). То есть, если кто-то решит использовать пример вашего кода - его ожидают обломы.

Здесь без хака файлов вордпреса не обойтись. Редактируем:

/wp-includes/formatting.php - закомментировать следующее так:
    if (isset($curl{0}) && '<' != $curl{0} && $next) { // If it's not a tag
        // static strings
    //    $curl = str_replace($static_characters, $static_replacements, $curl);
        // regular expressions
    //    $curl = preg_replace($dynamic_characters, $dynamic_replacements, $curl);
...
...
function convert_smilies($text) {
...
    //    $content = preg_replace($wp_smiliessearch, $wp_smiliesreplace, $content);

Форматирование блоков <pre> можно настроить, редактируя файл *.css темы.
Для данной темы - из админки: Внешний вид / Редактор Тем / Список стилей - добавляем: (UPDATE: Добавлены строки для переноса текста внутри <pre>. Спасибо T. Longren.)

pre {
    color: #0000CD;
    border-left: 1px solid #0000CD;
    padding-left: 8px;
    font-size: 12px;
    white-space: pre-wrap;       /* css-3 */
    white-space: -moz-pre-wrap;  /* Mozilla, since 1999 */
    white-space: -pre-wrap;      /* Opera 4-6 */
    white-space: -o-pre-wrap;    /* Opera 7 */
    word-wrap: break-word;       /* Internet Explorer 5.5+ */
}

Далее »

Что можно сделать с Mod_Rewrite

27 сентября 2007

Здесь:

  1. HTTP-аутентификация в PHP-CGI (а не только как модуль Apache)
  2. Поддомен на папку (автоматические VirtualHost'ы-субдомены)
  3. Редирект на главный домен (с host.com на www.host.com или наоборот)
  4. (по теме) как создать файл .htaccess в Windows


1. HTTP-аутентификация для PHP-CGI

«HTTP-аутентификация в PHP возможна только при запуске РНР как Apache-модуля» - так написано в документации по PHP.

Итак, если в <apache_dir>/conf/httpd.conf включён модуль Mod_Rewrite (LoadModule...),
то создаём файл .htaccess в папке сайта и добавляем следующие строки:

<IfModule mod_rewrite.c>
  Options +FollowSymLinks
  RewriteEngine On
  RewriteCond %{HTTP:Authorization} !^$
  RewriteRule ^file\.php$ file.php?HTTP_AUTH=%{HTTP:Authorization} [QSA,L]
</IfModule>

Первая строка (Options) может быть не нужна в зависимости от настроек хостинга.
Далее - мы проверяем, что есть непустой хидер Authorization и при запросе к file.php добавляем к нему GET-параметр HTTP_AUTH, при этом сохраняя другие параметры (QSA).

P.S: Также можно установить переменную окружения (environment valiable):

  RewriteEngine on
  RewriteRule .* - [E=HTTP_AUTH:%{HTTP:Authorization},L]

Она будет доступна через $_SERVER['HTTP_AUTH'], но скорее всего $_SERVER['REDIRECT_HTTP_AUTH'] - этот префикс добавляет апач.

Ещё информация об этом способе: http://joseph.randomnetworks.com/archives/...

После этого надо добавить в начало file.php:

if (isset($_GET['HTTP_AUTH'])) {
    preg_match('/^Basic\s+(.*)$/i', $_GET['HTTP_AUTH'], $mHA) or exit("Not supported HTTP_AUTH");
    list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = split(":", base64_decode($mHA[1]));
}

Теперь пример из документации по php будет работать!

2. Поддомен на папку (автоматические VirtualHost'ы-субдомены)

Далее »

Как определить, что сайт использует PHP

17 июня 2007

1. Посмотреть на расширение странички (.php) Это банально. А в документации по PHP советуют менять расширение для безопасности.

2. Давно искал этот способ. Если к любому php-сценарию добавить один параметр, то вы получите забавную картинку:

?=PHPE9568F36-D428-11d2-A769-00AA001ACF42 (пример)

PHP Credits можно посмотреть, используя ?=PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000

?=PHPE9568F35-D428-11d2-A769-00AA001ACF42 и
?=PHPE9568F35-D428-11d2-A769-00AA001ACF42 -
 - это логотипы PHP и Zend из phpinfo()

3. Ну и наконец, самый интересный способ - это посмотреть хидеры, которые отдаёт страничка  на php (а также сервер).

Сделать это можно, например так:

Чтобы не палить версию PHP и то, что он установлен - достаточно в php.ini опцию expose_php изменить на Off

Формат конфигурационных файлов

28 мая 2007

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

Сначала то, о чём все знают, потом – мой способ хранения конфигов!

  1. Использование PHP
    config.inc
    <?php
    define("DB_HOST", "localhost");
    # также здесь возможны комментарии
    $sitehost = "www.site.com";
    $cfg['session_len'] = 30*60*60; // можно использовать результат вычислений
    ?>    
    
    использование:
    require("conf/config.inc");
    echo $sitehost;
    echo $cfg['session_len'];
    echo DB_HOST;
    

    Преимущества:

    • К константам/переменным можно обратится сразу по имени.
    • Быстрота получения данных из конфига (т.к. обрабатывается обычный код PHP)

    Недостатки:

    Далее »

Многопоточность в php

24 апреля 2007

Наконец-то реализовал мультипоточность при работе с сокетами.

Выигрыш примерно в 2 раза с быстрыми серверами, соответственно, если сервер медленный, или контент генерируется на лету (напр. flush()), то грузится будет ещё быстрее.

Последний тест:
Дано: нужно загрузить 500 страниц. Проблема в том, что каждая генерируется на чужом сервере и время загрузки каждой примерно 20 сек. Т.е., если загружать все в цикле, то уйдёт около 3-х часов.

Используя многопоточность при 20 одновременных потоках все странички загрузились за 25 минут (<3сек./страница).
При 40 потоках - за 20 минут. В общем прогресс налицо.

Совместимо с php4, позволяет добавлять задачи на лету, используя callback-функцию (onload)

Пример кода, использующего мой класс multi_qrl:

$multi = new multi_qrl;
$multi->max_threads = 20;
$multi->onload = "req_load";
function req_load(&$multi, &$req, $result)
{
    echo $req->URL." ".(($result!==false)?"ok":"fail")."\r\n"; flush();
}   

$multi->add_request(new qrl, "http://www.yandex.ru/");
$multi->add_request(new qrl, "http://www.rambler.ru/");
$multi->add_request(new qrl, "http://www.google.ru/");
$multi->add_request(new qrl, "http://www.yahoo.com/");
$multi->add_request(new qrl, "http://www.sellme.ru/");
$multi->add_request(new qrl, "http://www.habr.ru/");
$multi->add_request(new qrl, "http://www.moneynews.ru/");   

$multi->run();

Класс распостраняется только с моими разработками. Стоимость проектов от $50.

_________________

Для тех, кто не подписался по RSS:

Когда переходить на ООП? I. Зачем использовать классы вместо функций.

Синонимайзер на PHP – достаточно одной строчки

Лучший редактор для PHP

2 марта 2007

В интернете много споров по поводу того, где лучше редактировать PHP-скрипты.
У меня есть отличное предложение.

В стиле linux, можно даже использовать на удалённой windows-машине через консоль.
В любом случае, гораздо лучше notepad.exe

Скрин:
Лучший редактор PHP

(Win+R / cmd / edit file.php)

__________________

Шутки шутками (правда в комментариях).

Интересно – как определить, что сайт использует PHP.

Или как писать посты о PHP в WordPress.

Знаете что такое RSS-подписка? Чего же Вы тогда ждёте: feeds.feedburner.com/mrkto.

Страница 2 из 2«12