<rmcreative>

RSS

Все заметки с тегом «PHP»

Можно уточнить:

  1. Импорт больших SQL-дампов через PHP

    27 мая 2011

    Основная проблема при импорте большого SQL-дампа — нехватка памяти при чтении всего дампа. Решение очевидно: грузить в память только то, что нужно в данный момент.

    $f = @fopen("path/to/dump.sql", "r");
    if($f)
    {
        $q = '';
     
        while(!feof($f))
        {
            // читаем построчно в буфер $q      
            $q .= fgets($f);
     
            // пока не упрёмся в ;
            if(substr(rtrim($q), -1) == ';')
            {
                // выполяем запрос
                execute_sql($q);
     
                // обнуляем буфер
                $q = '';
            }
        }
    }
    20 комментариев
  2. Как скомпилить libevent для PHP под Windows

    22 мая 2011

    Компилировать расширения PHP под Windows нет так уж и просто. Но задача вполне выполнимая.

    Читаем

    6 комментариев
  3. PHP, построение URL

    20 мая 2011

    При работе с разными API (и не только) требуется построить URL. На входе имеем массив параметров имя-значение, на выходе получаем URL. Решение очень простое:

    function getUrl($url, $params = array())
    {
        return $url.'&'.http_build_query($params);
    }
     
    // используем так
    echo getUrl('http://open.mapquestapi.com/nominatim/v1/search?format=json', array('q' => 'Olympiaturm, Spiridon-Louis-Ring 7, München 80809'));

    UPD: http_build_url.

    13 комментариев
  4. Короткий echo в PHP 5.4

    19 мая 2011

    Похоже, в 5.4 и последующих версиях PHP собираются включить короткий echo по умолчанию и сделать его независимым от short_tags. Меня лично данное известие радует

    <?=$username?>

    выглядит гораздо приятнее, чем

    <?php echo $username?>

    Единственное, что пока останавливает от повсеместного использования более короткого синтаксиса — необходимость писать продукты под дефолтные конфиги PHP. Хотя, например, в коде этого блога как раз используется короткий echo.

    14 комментариев
  5. PHP PECL под Windows

    7 мая 2011

    Если вы работаете с PHP под Windows или просто разрабатываете в Windows, как я, то наверняка вы знакомы со страничкой http://downloads.php.net/pierre/, которая временно-постоянно заменяет PECL для Windows и на которой можно найти свежие билды различных расширений.

    Конечно, найти там нужное не так просто, если не знать, что именно вам нужно. Если у вас последние версии PHP (начиная с 5.3.6) для Windows и если вы не собирали их самостоятельно, можно смело игнорировать всё что помечено как vc6 или x64. Далее смотрим, thread safe ли у вас версия PHP. Если не уверены, то можно посмотреть, имеется ли у вас php5ts.dll. Если да, версия thread safe и расширения надо выбирать только с пометкой ts. После этого обычно остаётся пара вариантов: стабильная версия и собранные из текущего svn/cvs кода.

    С некоторыми расширениями, конечно, приходится повозиться. Например, APC. После очевидного отбора остаётся прилично вариантов:

    • php_apc-20110109-5.3-vc9-x86.zip
    • apc-igbinary-fastlz-snap20110301-5.3-ts-vc9-x86.zip
    • php_apc-3.1.8-dev-+igbinary-1.1.2-dev-5.3-ts-vc9-x86.zip
    • php_apc-3.1-5.3-svn20101116-vc9-x86.zip
    • php_apc-3.1.5-5.3-vc9-x86.zip

    Мне было некогда разбираться, взял первый попавшийся php_apc-20110109-5.3-vc9-x86.zip и пару дней мучался с тем, что сервер время от времени просто переставал отвечать на запросы. Потом, методом исключения, нашёл виновника и проверил все остальные варианты:

    • php_apc-20110109-5.3-vc9-x86.zip — время от времени вешается.
    • apc-igbinary-fastlz-snap20110301-5.3-ts-vc9-x86.zip — сразу рушит апач.
    • php_apc-3.1.8-dev-+igbinary-1.1.2-dev-5.3-ts-vc9-x86.zip — стабильно.
    • php_apc-3.1-5.3-svn20101116-vc9-x86.zip — стабильно, но есть 3.1.5.
    • php_apc-3.1.5-5.3-vc9-x86.zip — стабильно, но есть 3.1.8.

    т.к. 3.1.8 оказалась вполне стабильной, остановился на ней. Кстати, внутри там:

    20 комментариев
  6. PhpStorm 2.1 EAP build 107.21

    29 апреля 2011

    Уже давно не писал про EAP PhpStorm потому как просто не успевал. Уж очень шустро он развивается. А произошло действительно много всего.

    Во-первых был выпущен апдейт 2.0.1, в котором мне лично понравилось, кроме всего остального, следующее:

    • Добавили рефакторинг «Introduce Constant».
    • Наконец, IDE стала сообщать, что у нас в проекте несколько одноимённых классов и автодополнению плохо. Лучше бы, конечно, дополняло как NetBeans, из всех, но и это уже очень хорошо.

    Через некоторое время возобновилась EAP:

    Ну и свежий EAP тоже порадовал. Особенно:

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

    От практики обновления EAP-билдов автоматически, похоже отказались, поэтому установить придётся самостоятельно.

    16 комментариев
  7. Сообщения об ошибках и хороший код

    17 апреля 2011

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

    В PHP самый строгий уровень ошибок можно получить записав в php.ini:

    error_reporting  =  -1
    

    Это позволяет выявить такие слабые места, как, например, использование переменных без их объявления. Да и банальные описки выявляются сразу, а не после пары часов жёсткого дебага.

    В MySQL тоже есть строгий режим, который не позволяет, например, вставить строку длиной в 200 символов в поле varchar(20). В «умолчательном» режиме MySQL молча вставит первые 20 символов, выкинув остальные. В строгом — получим соответствующую ошибку. Включается этот режим через my.cnf:

    [mysqld]
    sql-mode = "STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE"
    

    Все значения sql-mode можно подсмотреть в официальной документации.

    22 комментария
  8. Какой PHP фреймворк вы используете и почему?

    23 марта 2011

    На хабре появился довольно интересный опрос с обсуждением на горячую тему. Ответы немного удивили:

    • Yii на втором месте после Zend Framework. Думал, там будет Symfony или CodeIgniter.
    • Очень многие выбрали «самописный фреймворк». Дело, конечно, хорошее. Опыт наберётся быстро. Но для работодателя коммерчески невыгодно. Конечно, если задачи очень специфичны, вроде создания игр, то свой фреймворк может быть оправданным решением.
    • Подавляющее большинство «пишет на PHP, но не использует фреймворки». То ли лапшекодеров на хабре много, то ли все делают игры… не ясно.

    Обсуждаем и голосуем

    59 комментариев
  9. PHP RFC: встроенный вебсервер

    3 марта 2011

    В RFC PHP попала новая идея: встроенный вебсервер. Штука определённо замечательная: можно будет разрабатывать не запуская тот же Apache и не занимаясь его настройкой. Пока реакция разработчиков положительная, поэтому можно надеяться, что нововведение будет в ядре.

    Запускать это дело предлагается очень просто:

    php -S localhost:8000 docroot
    

    При этом можно использовать роутинг-скрипт, заменяющий, например mod_rewrite и выглядящий так:

    if (preg_match('/\.(?:png|jpg|jpeg|gif)$/', $_SERVER["REQUEST_URI"]))
        return false; // отдаём как есть
    else
        ...

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

    15 комментариев
  10. Комментарии в разметке

    25 февраля 2011

    Иногда в HTML встречаются комментарии, не особо предназначенные для посторонних глаз или просто лишние. В лучшем случае это:

    <!--news list start-->
    туча кода
    <!--news list end-->

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

    <?php // news list start ?>
    туча кода
    <?php // news list end ?>

    или

    <%-- news list start --%>
    туча кода
    <%-- news list end --%>
    
    13 комментариев