Возможное будущее PHP

Согласно последней статистике, ownClowd – один из крупнейших опенсорсных проектов, написанных на PHP. Как многие из вас знают, PHP использован для серверной части ownCloud. Мы использовали другие технологии, такие как C++ и Qt для десктопных клиентов, Java для андроид-приложений и Objective-C для iOS-приложений, JS для веб-интерфейсов и т.д. Но сердце ownCloud – серверная компонента, использующая PHP 5.3 и выше.

Было несколько причин для выбора PHP:

Миссия ownCloud – сделать возможным для каждого хостить его личный облачный сервер. PHP – технология, доступная на большинстве вебсерверов, операционных систем и платформ. То есть, мы сделали хостинг сервера ownCloud суперлёгким, потому что он написан на PHP.
PHP – скриптовый язык, что означает, что один один серверный tar-файл будет работать на всех платформах без необходимости сложной кросс-компиляции и требования пакетов. Читать полностью »

Список всех доменных зон

Кириллические домены + .москва

.москва
.moscow
.дети
.онлайн
.орг
.сайт

Домены на букву A

.academy
.accountants
.actor
.agency
.associates

Домены на букву B Читать полностью »

Утечка ресурсов в генераторах PHP

Очень интересный и полезный момент сегодня всплыл в комментариях на Хабре. В PHP 5.5, как известно, сделали поддержку функций-генераторов, по типу питоновских. Там раньше были итераторы, но с адовым синтаксисом (как всё в SPL), а теперь ввели оператор 'yield' и всё волшебным образом упростилось.

Например, можно написать такой генератор, читающий построчно файл:

function getLines($file) {
    f = fopen($file, 'r');
    while ($line = fgets($f)) {
        yield $line;
    }
    fclose($f);
}

'yield' означает «вернуть значение и продолжить с этого места при следующем вызове функции». Имея такой генератор, можно сделать вот такую печать файла: Читать полностью »

Основы jQuery. Видео уроки: 5 уроков

Остальные уроки Читать полностью »

Backup базы данных в Dropbox

Устанавливаем DropBox на свой сервер и сохраняем приведенный ниже скрипт, например, в /root/dumper.sh. Даем права на исполнение chmod +x /root/dumper.sh. И ставим выполнятся в cron раз в сутки.
Не забудьте изменить пароли для mysql в скрипте. Читать полностью »

Оптимизириуем Wordpress

Начнем с хардкорной оптимизации.

Вся работа, а именно вставка кода, будет проходить с файлом wp-config.php перед

require_once(ABSPATH . 'wp-settings.php');

поехали...

1. В WP есть крон, который при каждом обращении к сайту создает запрос к БД. Это пинги, генерация xml карты, отложенная публикация и тому подобная шушера.

Решение:

Отключаем путём вставки кода

define('DISABLE_WP_CRON', true);

и добавляем в cron 'время раз в час /usr/bin/php /путь к сайту/wp-cron.php' Читать полностью »

Работаем с MySQL в командной строке

Даже если Вы используете GUI-инструменты для работы с MySQL, однажды Вам предстоит столкнуться с командной строкой. Поэтому полезно знать некоторые трюки, которые облегчают работу.

Примечание: эти команды работают только для Unix/Linux.

Постраничный вывод

Большинство GUI-утилит выводят результат постранично, что очень удобно. Но в командной строке mysql Вам высыпет весь результат полностью. Это легко решаемо при помощи команды pager:

mysql> pager more
PAGER set to 'more'
mysql> select title from sakila.film;
+-----------------------------+
| title                       |
+-----------------------------+
| ACADEMY DINOSAUR            |
| ACE GOLDFINGER              |
| ADAPTATION HOLES            |
| AFFAIR PREJUDICE            |
| AFRICAN EGG                 |
| AGENT TRUMAN                |
| AIRPLANE SIERRA             |
| AIRPORT POLLOCK             |
| ALABAMA DEVIL               |
| ALADDIN CALENDAR            |
| ALAMO VIDEOTAPE             |
| ALASKA PHANTOM              |
| ALI FOREVER                 |
| ALICE FANTASIA              |
| ALIEN CENTER                |
| ALLEY EVOLUTION             |
| ALONE TRIP                  |
| ALTER VICTORY               |
| AMADEUS HOLY                |
--Plus--

Читать полностью »

Как перенести WordPress блог на новый домен

Сделать это очень просто.
Нужно поменять все старые url (ссылки) на новые. Для этого нужно зайти в phpMyAdmin на вкладку «SQL» и в поле ввода ввести запросы:

UPDATE wp_options SET option_value = replace(option_value, 'http://исходныйдомен.ru', 'http://новыйдомен.ru') WHERE option_name = 'home' OR option_name = 'siteurl';

UPDATE wp_posts SET guid = replace(guid, 'http://исходныйдомен.ru', 'http://новыйдомен.ru');

UPDATE wp_posts SET post_content = replace(post_content, 'http://исходныйдомен.ru', 'http://новыйдомен.ru');

Готово!

Перегрузка конструктора в PHP

Перегрузка методов есть частный случай полиморфизма. С помощью перегрузки одно и то же имя может обозначать различные методы, причем методы могут различаться количеством и типом параметров. Наиболее актуально это для конструкторов. Ho PHP не позволяет иметь несколько методов __construct() в классе. Как же быть?

Предположим у нас есть класс Студент, и мы хотим создавать студентов на основе их студенческого номера или имени. А может быть номера мобильного телефона или емейл. Или еще как-нибудь.
Можно конечно напихать уродливых IF-ов в конструктор для определения аргументов.
Но есть более изящное решение. Это статические фабрики-помошники с разными аргументами, создающие объект. Собственно конструктор можно даже сделать недоступным, а можно оставить как один из возможных вариантов создания объекта. Читать полностью »

Трейты для PHP 5.x. Начало

В PHP 5.4 планируются так называемые трейты (traits) - возможность создавать классы как комбинацию методов и полей других классов. По сути, это реализация множественного наследования в PHP.

Однако, проблема в том, что это будет только в PHP 5.4, а даже 5.3 не везде установлен. А система является потенциально очень удобной. И хочется использовать уже сейчас. Я решил сделать эмуляцию трейтов, работающую в 5.х. И это получилось! Я расскажу как.

(Система находится в разработке. Это только первая, предварительная версия).

Итак, давайте посмотрим, что мы хотим от трейтов и чего можем добиться в PHP 5. Для этого рассмотрим наиболее вероятный случай их использования. Случай следующий: мы берем класс-наследник (Н) и хотим в нем использовать методы из нескольких заранее готовых кусочков (К1, К2 и т. п.). Читать полностью »