Функция sqlite_num_rows() для SqLite3. Считаем количество возвращаемых строк

В SqLite второй версии была замечательная функция sqlite_num_rows() (SQLiteResult::numRows()), аналог mysql_num_rows() для MySql.

(PHP 5 < 5.4.0, PECL sqlite >= 1.0.0)
sqlite_num_rows -- SQLiteResult::numRows — Возвращает количество записей в результате запроса

В SqLite3 данную возможность убрали, оставив довольно небольшой набор функций.

Поэтому мы напишем свою простую функцию, подсчитывающую количество возвращенных записей запроса. Читать полностью »

Работа с https/tls. Установка OpenSSL на сервер. Библиотека php_openssl.dll

Для работы с защищенными соединениями в php, нужно установить библиотеку OpenSSL.

Установка довольно проста, нужно скачать необходимые библиотеки и внести изменения в файл конфигурации php.ini Читать полностью »

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

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

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

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

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

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

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

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

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

Как перенести 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 и т. п.). Читать полностью »

Видео с конференции ZFConf 2011

Видео, доступно по адресу http://www.zfconf.ru/2011/video/.

Охватывает доклады:

— Гибкая архитектура Zend Framework приложений с использованием
Dependency Injection
Алексей Качаев (Сogniance, Senior PHP Developer)

— Воюем за ресурсы: Повышение производительности Zend Framework
приложения с помощью phpDaemon, Varnish и ESI
Алексей Качаев (Сogniance, Senior PHP Developer) Читать полностью »

Open Web Platform

Сейчас веб-разработка сталкивается с большой проблемой - сверхнизкое повторное использование кода.

Как происходит, когда разработчик начинает делать свой проект, скажем, на PHP. Сначала он идет, например, на PHP Classes. Там очень много классов. Все разные. Каждый написано по-своему. У некоторых внешний интерфейс через один класс, у других через пять, у третьих через десять и два конфига. В результате требуется изучать архитектуру каждого класса, и, что самое важное, сайт из таких “компонентов” быстро не построишь.

Тогда разработчик идет смотреть готовый фреймворк. Фреймворков на рынке с десяток. Все разные. Все сложные. Все несовместимые друг с другом. Все они, повторяю, сложные, у каждого достаточно запутанная архитектура, своя реализация MVC, разные подходы работы с БД, с шаблонами, с кодогенерацией. Читать полностью »

Удалить дубли из большого файла

C#

Программа берет строки из файла data ( без расширения )
и создает data-unique

для работу нужен .NET

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

namespace unique
{
    class Program
    {
        static void Main(string[] args)
        {
            Encoding cp1251 = Encoding.GetEncoding(1251);
            HashSet<string> hash = new HashSet</string><string>();
            string line;

            Console.Write("Read : ");
            StreamReader file = new StreamReader(@"./data",cp1251);
            while ((line = file.ReadLine()) != null)
            {
                hash.Add(line);
            }
            file.Close();

            Console.Write("OKnWrite: ");

            StreamWriter filew = new StreamWriter(@"./data-unique",false,cp1251);
            foreach (String hval in hash)
            {
                filew.WriteLine(hval);
            }
            Console.Write("OKn");

        }
    }
}
</string>

Еще варианты Читать полностью »