• Как вы организовываете модульность в ваших PHP-проектах?

    konst20
    @konst20
    Программист, преподаватель, немного электронщик
    Вместо всей этой пачки инклудов вставьте куда-нибудь вот такое
    function class_loader($className){
          include_once $className.'.php';
    }
    
    spl_autoload_register('class_loader');

    Файлы будут инклудится по мере создания объектов.
    Имя файла должно совпадать с именем класса.
    Конструкция не конфликтует с другими автолоадерами, проверено.
    Ответ написан
    Комментировать
  • Как средствами php сравнить два больших массива?

    konst20
    @konst20
    Программист, преподаватель, немного электронщик
    Я обращу внимание на то, что предлагавшиеся выше решения в духе "бегите по строкам" и "построчно сранивайте" в данном случае имеют сложность до О(n*n), то есть придется сделать 100000*100000 = примерно 10 миллардов операций.
    боюсь, это может затянуться на несколько часов.
    Ответ написан
  • Как средствами php сравнить два больших массива?

    konst20
    @konst20
    Программист, преподаватель, немного электронщик
    1. Формируем массив array1 - имена файлов в папке - ф-я scandir

    2. Формируем массив array2 - названия в БД, выборка наподобие
    SELECT image_name FROM my_db
    выбираем только имена image_name, то есть названия.

    Форматы названий должны совпадать, то есть одинаковые картинки и в БД, и в папке должны иметь абсолютно одинаковые имена, с учетом того, что файлы в папке имеют еще и расширения. Если что - приводим строковыми ф-ями к одинаковому формату (отрезаем расширение файла например)

    3. Ф-я array_diff(array1, array2) даст те элементы, которые есть в массиве array1, но нет в массиве array2.
    Ответ написан
    Комментировать
  • Какую cms лучше осваивать новичку?

    konst20
    @konst20
    Программист, преподаватель, немного электронщик
    Wordpress без вариантов
    А в сторону Джумлы даже смотреть не нужно
    Ответ написан
    Комментировать
  • Как реализовать парсер товаров из интернет магазина средствами PHP?

    konst20
    @konst20
    Программист, преподаватель, немного электронщик
    Я активно использовал Zend_Dom_Query (работает без самого ZendFW, несколько файлов от фреймворка нужно подключить будет к проекту). Просто, понятно и быстро
    http://framework.zend.com/manual/1.12/ru/zend.dom.query.html

    Вот структура нужных файлов/папок от Zend
    4fdb361154d7f5590882c8f78a54e8dd.png

    и пример кода (кусок парсера хорошей погоды)
    /**
         * Получение погодных "значений"
         * @return array
         */
        protected function parse_weather_page(){
    
            $page = $this->get_page_with_weather();
    
            $weather = array();
            $zDom = new Zend_Dom_Query($page);
            $elements = $zDom->query($this->weather_css);
            foreach($elements as $dom_element){
                $weather[] = $dom_element->getAttribute('title');
            }
    
            return $weather;
        }
    Ответ написан
    Комментировать
  • Динамическое создание классов (PHP)?

    konst20
    @konst20
    Программист, преподаватель, немного электронщик
    Присоединяюсь к мнениям о том, что:
    - обязательно проверку class_exists()
    - затея спорная и из контекста/кода никак не следует ее оправданность.

    Приведу пару примеров оправданности динамического создания классов и eval()
    1) есть пачка клиентов (в смысле заказчиков). Для каждого в коде - свой класс, причем унификация невозможна: методы этих классов называются одинаково, смысл, входные и выходные параметры одинаковые, но реализованы для всех весьма по-разному в силу индивидуальных особенностей.
    есть обработчики на сервере очередей, они универсальные. Обработчику передается имя класса, он создает объект и работает так, как нужно для данного заказчика.

    2) есть псевдокод с однозначной логикой, заведомо безопасный. Для выполнения его в PHP заменяем просто через str_replace все согласно синтаксису PHP, и выполняем через eval()

    Для того, чтобы указанное выше веселье можно было спокойно дорабатывать, сделаны доп. методы тестирования и обработки ошибок.
    Ответ написан
    4 комментария
  • PHP и Gearman, что и как?

    konst20
    @konst20
    Программист, преподаватель, немного электронщик
    Пользуясь случаем, хочу еще узнать: если вы имели дело с этой темой, какое из решений вы выбрали для организации выполнения отложенных задач? Я в настоящее время выбираю между RabbitMQ, Gearman и php-resque.

    Gearman — великолепен. Я свой выбор сделал
    Ответ написан
    Комментировать
  • PHP и Gearman, что и как?

    konst20
    @konst20
    Программист, преподаватель, немного электронщик
    Есть ли стандартный способ из клиентского скрипта посмотреть, что сейчас происходит с данной задачей, не запуская ее на выполнение вновь. если она выполнена?

    Еще момент: воркер может в процессе выполнения передавать клиенту промежуточные данные.
    Посмотрите, в моей публикации есть пример с кодом и видео
    Ответ написан
  • PHP и Gearman, что и как?

    konst20
    @konst20
    Программист, преподаватель, немного электронщик
    — этот вопрос вытекает из предыдущего: понятно дело, когда клиент — демон, он поставил задание и просто ждет результата, или регулярно опрашивает Gearman на предмет результата…

    Я делаю «в лоб» — как только задачи определенной группы начали выполняться, я делаю инкремент одной переменной в БД, как только задача завершается — делаю декремент. В итоге, когда хоть какие-то задачи выпоняются — переменная отлична от 0, как готовы все — там 0. Из веб-приложения аяксом просто опрашиваю БД
    Ответ написан
    Комментировать
  • PHP и Gearman, что и как?

    konst20
    @konst20
    Программист, преподаватель, немного электронщик
    их можно запускать из консоли или скриптом.
    кстати, я готовлю новую публикацию — веб-интерфейс для сервера очередей. Он давно готов, сыроват, но рабочий, я его юзаю, руки не доходят
    Вот код
    code.google.com/p/gearman-monitor-and-control/
    Ответ написан
    Комментировать
  • PHP и Gearman, что и как?

    konst20
    @konst20
    Программист, преподаватель, немного электронщик
    у меня демоны — только воркеры
    Ответ написан
    1 комментарий
  • PHP и Gearman, что и как?

    konst20
    @konst20
    Программист, преподаватель, немного электронщик
    Доброго :)
    Отвечаю на вопросы

    — чем концептуально отличается GearmanJob от GearmanTask и какой из них следует использовать для оформления отложенного задания?

    Job — это то, что поступает воркеру.
    Task — это то, что передает клиент

    То есть клиент кидает Task на сервер очередей, там два агрумента — имя ф-и и сериализованные данные (в виде строки).
    Если у воркера есть ф-я, указанная в Task, то есть он готов ее обработать, то он принимает задачу, а данные получает в виде Job.
    Извлекаются данные вот так (кусок реального кода):

    function create_campaign(GearmanJob $job){

    $rawData = $job->workload();
    $data = unserialize($rawData);


    А передаются на сервер вот так (я использую не Task, а чуть проще — просто doBackground)

    $gclient = new GearmanClient();
    $gclient->addServer('localhost');

    $new_offers = $client_db->select_new_offers();

    if(is_array($new_offers) AND count($new_offers) > 0){
    foreach($new_offers as $item){
    $data_for_gearman = array(
    'item' => $item,
    'client_class_name' => 'axxa',
    );
    $gclient->doBackground('new_offer', serialize($data_for_gearman));
    }
    }

    echo «Для добавления товаров на сервер очередей добавлено ».count($new_offers)." задач \n";
    Ответ написан
    1 комментарий
  • Chrome: BSOD после обновления - в чем причина?

    konst20
    @konst20 Автор вопроса
    Программист, преподаватель, немного электронщик
    Вопрос закрыт, всем спасибо.
    Помогло отключение встроенных флеш-плагинов Хрома.
    Какой-то конфликт с железом у этих плагинов видимо.
    Ответ написан
    Комментировать