Задать вопрос
  • Почему Nginx выдаёт 302 ответ вместо 404?

    alekciy
    @alekciy
    Вёбных дел мастер
    Какой-то из rewrite правил в конфиге создает зацикленный редирект.
    Если отдает 302 значит так настроено (либо 302 отдает бэкэнд). Поэтому внимательно смотрите конфиг.
    Ответ написан
    1 комментарий
  • Две версии PHP на одном сервере. Как установить модули для одной из них?

    alekciy
    @alekciy
    Вёбных дел мастер
    Дистрибутив и список установленных пакетов в студию.
    Узнать дистриб можно из консоли:
    cat /etc/os-release
    список пакетов:
    sudo dpkg --list | grep php

    Пример вывода у меня:
    alex@SUNDUKOV:~$ cat /etc/os-release 
    NAME="Ubuntu"
    VERSION="12.04.5 LTS, Precise Pangolin"
    ID=ubuntu
    ID_LIKE=debian
    PRETTY_NAME="Ubuntu precise (12.04.5 LTS)"
    VERSION_ID="12.04"
    alex@SUNDUKOV:~$ sudo dpkg --list | grep php
    ii  dh-php                                      0.23+deb.sury.org~precise+1                             debhelper add-on to handle PHP PECL extensions
    ii  dh-php5                                     0.2+deb.sury.org~precise+1                              debhelper add-on to handle PHP PECL extensions
    ii  php-common                                  1:45+deb.sury.org~precise+1                             Common files for PHP packages
    ii  php-gearman                                 2.0.2+1.1.2-1+deb.sury.org~precise+1                    PHP wrapper to libgearman
    ii  php-pear                                    1:1.10.1+submodules+notgz-8+donate.sury.org~precise+2   PEAR Base System
    ii  php-xdebug                                  2.5.0-1+deb.sury.org~precise+1                          Xdebug Module for PHP
    ii  php-xml                                     1:7.0+45+deb.sury.org~precise+1                         DOM, SimpleXML, WDDX, XML, and XSL module for PHP [default]
    ii  php5-cli                                    5.5.37+dfsg-1+deprecated+dontuse+deb.sury.org~precise+1 command-line interpreter for the php5 scripting language
    ii  php5-common                                 5.5.37+dfsg-1+deprecated+dontuse+deb.sury.org~precise+1 Common files for packages built from the php5 source
    ii  php5-curl                                   5.5.37+dfsg-1+deprecated+dontuse+deb.sury.org~precise+1 CURL module for php5
    ii  php5-dev                                    5.5.37+dfsg-1+deprecated+dontuse+deb.sury.org~precise+1 Files for PHP5 module development
    ii  php5-fpm                                    5.5.37+dfsg-1+deprecated+dontuse+deb.sury.org~precise+1 server-side, HTML-embedded scripting language (FPM-CGI binary)
    ii  php5-json                                   1.3.9-1+deb.sury.org~precise+3                          JSON module for php5
    ii  php5-memcache                               3.0.8-5+deb.sury.org~precise+1                          memcache extension module for PHP5
    ii  php5-memcached                              2.2.0-2+deb.sury.org~precise+1                          memcached extension module for PHP5, uses libmemcached
    ii  php5-mysql                                  5.5.37+dfsg-1+deprecated+dontuse+deb.sury.org~precise+1 MySQL module for php5
    ii  php5-readline                               5.5.37+dfsg-1+deprecated+dontuse+deb.sury.org~precise+1 Readline module for php5
    ii  php5-redis                                  2.2.7-1+deb.sury.org~precise+1                          PHP extension for interfacing with Redis
    ii  php5-xdebug                                 2.3.2-1+deb.sury.org~precise+1                          Xdebug Module for PHP 5
    ii  php5.5                                      5.5.38-4+deb.sury.org~precise+1                         server-side, HTML-embedded scripting language (metapackage)
    ii  php5.5-cli                                  5.5.38-4+deb.sury.org~precise+1                         command-line interpreter for the PHP scripting language
    ii  php5.5-common                               5.5.38-4+deb.sury.org~precise+1                         documentation, examples and common module for PHP
    ii  php5.5-dev                                  5.5.38-4+deb.sury.org~precise+1                         Files for PHP5.5 module development
    ii  php5.5-fpm                                  5.5.38-4+deb.sury.org~precise+1                         server-side, HTML-embedded scripting language (FPM-CGI binary)
    ii  php5.5-json                                 5.5.38-4+deb.sury.org~precise+1                         JSON module for PHP
    ii  php5.5-mbstring                             5.5.38-4+deb.sury.org~precise+1                         MBSTRING module for PHP
    ii  php5.5-mysql                                5.5.38-4+deb.sury.org~precise+1                         MySQL module for PHP
    ii  php5.5-opcache                              5.5.38-4+deb.sury.org~precise+1                         Zend OpCache module for PHP
    ii  php5.5-readline                             5.5.38-4+deb.sury.org~precise+1                         readline module for PHP
    ii  php7.0-cli                                  7.0.13-1+deb.sury.org~precise+1                         command-line interpreter for the PHP scripting language
    ii  php7.0-common                               7.0.13-1+deb.sury.org~precise+1                         documentation, examples and common module for PHP
    ii  php7.0-curl                                 7.0.13-1+deb.sury.org~precise+1                         CURL module for PHP
    ii  php7.0-dev                                  7.0.13-1+deb.sury.org~precise+1                         Files for PHP7.0 module development
    ii  php7.0-fpm                                  7.0.13-1+deb.sury.org~precise+1                         server-side, HTML-embedded scripting language (FPM-CGI binary)
    ii  php7.0-intl                                 7.0.13-1+deb.sury.org~precise+1                         Internationalisation module for PHP
    ii  php7.0-json                                 7.0.13-1+deb.sury.org~precise+1                         JSON module for PHP
    ii  php7.0-mbstring                             7.0.13-1+deb.sury.org~precise+1                         MBSTRING module for PHP
    ii  php7.0-mcrypt                               7.0.13-1+deb.sury.org~precise+1                         libmcrypt module for PHP
    ii  php7.0-mysql                                7.0.13-1+deb.sury.org~precise+1                         MySQL module for PHP
    ii  php7.0-opcache                              7.0.13-1+deb.sury.org~precise+1                         Zend OpCache module for PHP
    ii  php7.0-pgsql                                7.0.13-1+deb.sury.org~precise+1                         PostgreSQL module for PHP
    ii  php7.0-readline                             7.0.13-1+deb.sury.org~precise+1                         readline module for PHP
    ii  php7.0-xml                                  7.0.13-1+deb.sury.org~precise+1                         DOM, SimpleXML, WDDX, XML, and XSL module for PHP
    ii  pkg-php-tools                               1.21+deb.sury.org~precise+1                             various packaging tools and scripts for PHP packages

    соотвественно под версию 7 я ставил так:
    #apt-get install php7.0-mbstring
    Ответ написан
    4 комментария
  • Как сделать словарь на PHP?

    alekciy
    @alekciy
    Вёбных дел мастер
    Правильный вариант это Gettext. Стандарт которого уже много десяток лет. Под него огромная куча готово софта.
    Ответ написан
    Комментировать
  • Где и каким образом лучше всего хранить тестовые данные для проекта Selenium (Java)?

    alekciy
    @alekciy
    Вёбных дел мастер
    А как это соотноситься с Selenium?
    Варианты хранения: файлы, база, память.
    Ответ написан
    Комментировать
  • Как авторизоваться в gmail через SeleniumWebDriver?

    alekciy
    @alekciy
    Вёбных дел мастер
    Открыли страницу - сделали скрин. Ввели логин - сделали скрин. Ввели пароль - сделали скрин. Отправили форму - сделали скрин. Т.е. скриним каждый шаг. Потом смотрим пачку получившихся скринов и думаем, на каком шаге возникла проблема.
    Ответ написан
  • Как загрузить сайт на вп, на сервер с ос Ubuntu 14.04 64-bit?

    alekciy
    @alekciy
    Вёбных дел мастер
    ssh
    Ответ написан
    Комментировать
  • Почему твит загружает оперативную память?

    alekciy
    @alekciy
    Вёбных дел мастер
    Чем смотриться расход ОЗУ? Как работает PHP (через php-fpm? как модуль apache? из командной строки?). 20МБ ОЗУ уходит на сам PHP интерпретатор. Это нормально.
    Ответ написан
    9 комментариев
  • Как использовать контроль версий для сайта на обычном хостинге?

    alekciy
    @alekciy
    Вёбных дел мастер
    git не поддерживает работу по ftp протоколу. Поэтому в изложенном контексте работа должна строиться так:

    1) Заводим пустой репозиторий в битбакете или гитхабе (напоминаю, что в гитхабе приватные репозитории платные).
    2) Клонируем его себе локально в папку Х.
    3) Настраиваем ftp клиент (например FileZilla) на эту папку Х и папку на хостинге.
    4) Заливаем в хостинга файлы сайты.
    5) Добавляем в git появившиеся файлы (git add).
    6) Коммитим из (git commit -a).
    7) Отправляем изменения на удаленный репозиторий (битбакет/гитхаб, git push).

    Периодически по ftp сливаем файлы в локальную папку, через git diff смотрим изменения. Если они легитимные, то делаем git commit. Если нет, откатываем нужные (git checkout имя_файла). Снова фиксируем (git commit), отправляем в удаленные репозиторий (git push), перезаливаем из локальной папки.
    Ответ написан
    3 комментария
  • Дальнейшее развитие для новичка при отсутствии вакансий в городе?

    alekciy
    @alekciy
    Вёбных дел мастер
    Фриланс тупик для новычка. Проекты сверх примитивные и опыта не дадут. Удаленка не вариант, что бы нормально так работать нужен опыт причём хороший (зачастую даже лучше чем офисный). Требуется высокая самоорганизация. Вариант один. Поиск вакансий в ближайшем областном центре. Искать нужно место где минимум есть ещё один разработчик.
    Ответ написан
    Комментировать
  • Как исправить ошибку с ssl у chromedriver?

    alekciy
    @alekciy
    Вёбных дел мастер
    Возможных причины 2. Браузер не смог договориться с сервером о применяемых схемах и хэндшейк фейлиться. Вероятнее всего сервер к которую обращаемся достаточно новый, а браузер достаточно старый. Быстро решается обновлением браузера.

    Второй вариант - на сервере самоподписанный сертификат. Тогда копать куда-то сюда: stackoverflow.com/questions/5933871/handling-untru...

    Вообще рекомендовал бы привести все 10 узлов к одиному системного окружению. Если это конечно возможно. Если это разные ОС/версии_браузера, то возможна ситуация, что они слишком старые и в принципе не смогут договориться с сервером. Если сервер вам подконтролен, можно поиграться с настройками SSL на самом сервере. Если нет и эти 2 ноды обновить нельзя, то решения могут быть только костыльные в духе хитрых проксей и танцев с бубнами. Но я бы десять раз подумал, прежде чем прибегать к таким методам.
    Ответ написан
    Комментировать
  • В каком виде хранить данные о посещаемости товаров?

    alekciy
    @alekciy
    Вёбных дел мастер
    Пишите сразу md5 хэш в базу. По нему ставим индекс который и используем при поиске. Справиться ли сервер зависит от посещаемости, характеристик самого сервера, количестве данных в базе. Заполните базу фейковыми данными и посмотрите, сразу станет понятно.

    Вторая таблица не нужна потому что не понятно, для чего она вообще нужна. А вот сделать механизм ротации этой таблицы однозначно стоит. Более чем достаточно, если в ней будут данные максимум за сутки.
    Ответ написан
    5 комментариев
  • Как PHP скрипт может расходовать 20Гб памяти?

    alekciy
    @alekciy
    Вёбных дел мастер
    Через htop смотрю сколько он ЖРЕТ памяти, один раз застал его за поеданием 20ГБ ОЗУ

    Какой конкретно? Как минимум в htop видно 3 "вида" памяти: VIRT, RES, SHR. VIRT может быть 20ГБ. Но это не означает использование 20ГБ физической памяти.

    memory_get_usage покажет текущий расход памяти. Лучше посмотреть на memory_get_peak_usage(true). И в конце скрипта.
    Ответ написан
    Комментировать
  • Реально сделать многопоточный запуск PhantomJS через Selenium Webdriver?

    alekciy
    @alekciy
    Вёбных дел мастер
    Многопоточность PhantomJS это вопрос к исходникам. Одна нода PhantomJS-а способна принимать по Webdriver запросы по загрузке разных страниц. Т.е. работать с несколькими сайтами одновременно в рамках одного запущенного PhantomJS возможно. С одним сайтом под одним аккаунтом проблематично. Поэтому если нужно работать с одним сайтом под одним аккаутом параллельно, то проще всего запускать несколько экземпляров PhantomJS, а потом из приложения разруливать запросы на разные ноды.

    Лично сам делаю так из PHP. В приложении пишется запускалка нод, а так же роутер запросов. В принципе что-то готовое на Java есть, нужно смотреть в сторону Selenium Grid (вариант от Яндекса). Но сам не использовал, у меня нет смысла размывать стек явой.
    Ответ написан
    Комментировать
  • Yii2 Nginx 502 Bad Gateway?

    alekciy
    @alekciy
    Вёбных дел мастер
    Настройки location-ов отвечающих за php совершенно же разные. На основном сайте ни чего кроме fastcgi_pass нет, а что находится в fastcgi.conf (и подлючился ли он вообще) еще большой вопрос. include /etc/nginx/fastcgi_params нужно писать самой первой строко (по этой причине).
    Ответ написан
    Комментировать
  • Как создать онлайн карту для сайта недвижимости?

    alekciy
    @alekciy
    Вёбных дел мастер
    Используйте геокодер https://tech.yandex.ru/maps/geocoder/
    Ответ написан
    Комментировать
  • Многопроцессорный парсер теряет ссылки при паринге (selenium+PhantomJS+ProcessPoolExecutor)?

    alekciy
    @alekciy
    Вёбных дел мастер
    Наверное уже не очень актуально, но оставлю ремарку для истории. Потеря страниц на парсенге - ситуация штатная. Обилие JS, падения кода при работе с DOM, сетевые проблемы, все может привести к генерации исключения и фейлу получения данных. Так что при разработке стоит сразу заклываться на штатность такой ситуации и просто отлавливать неразобранные страницы и отправлять на повторный парсинг.

    1000 страниц за 1 час более чем реальная задача. Сам получал скорость в 1000 за 15 минут. Достигается просто поднятием кластера. Требует много ресурсов (у меня выходило что-то около 10 узлов на каждый до 5Гб ОЗУ).
    Ответ написан
    Комментировать
  • PhantomJS - плохой выбор?

    alekciy
    @alekciy
    Вёбных дел мастер
    PhantonJS не идеален конечно, но как скришотница вполне себе нормально работает. 3 минуты это конечно перебор, проблема явно где-то в написанном JS коде. Сделал 3 скрина (1200*1000, 800*1000, 500*1000)приведенной страницы, получилось где-то за ~7 секунд на каждый (при этом PhantomJS стоит на удаленной машине и сам ходит через прокси). Сама страница да, немного поплыла. Но это возможно, ведь базируется он на старом вебките. Если нужны скрины из самых последних версий браузеров, то тут конечно он может не подойти.
    Ответ написан
  • Аналоги selenium для python?

    alekciy
    @alekciy
    Вёбных дел мастер
    Внесу небольшую ремарку все же. Нужно различать 1) скорость отработки одной страницы 2) скорость отработки Х страниц в секунду. Обычно под "более быстрый" понимают второе, т.к. на практике у нас много страниц и мы хотим от как можно быстрее пропарсить. Так, вот, если задача поднять именно п. 2, то делать это можно и на selenium, просто придется запустить целый кластер из нод. Что обычно выливается в большие требования по ресурсам. И если selenium все устраивает и есть такие ресурсы, то есть смысл оставаться в его рамках.
    Ответ написан
  • PhantomJS - как запретить загрузку ненужных файлов (скриптов, картинок)?

    alekciy
    @alekciy
    Вёбных дел мастер
    Отключить на странице JavaScript и при этом нормально работать со страницей из JS не получится. Но если так хочется отключить JS (а можно и картинки), то задается настройками модуля WebPage: phantomjs.org/api/webpage/property/settings.html

    Если работа идет через WebDriver, то отключается через javascript.enabled=false. Реализация зависит от выбранного языка.
    Ответ написан
    Комментировать
  • Где найти хороший help на phantomjs?

    alekciy
    @alekciy
    Вёбных дел мастер
    Посыл изначально неправильный. Справочника по PhantomJS не может быть по определению. Это тупо браузер. Учитывая, что его юзают обычно для ботов, то наиболее актуально это как минимум на парсинге. Так что предположу, что вопрос больше "нужен мануал по написание парсеров". Такого найти в виде одного нормального труда не получиться. Поэтому придется курить в сторону либо написания парсеров на JavaScript и подключении их к PhantomJS (и тут да, нужно курить именно JS), либо делать это через Selenium WebDriver. Рекомендую последнее. Тогда нужно курить спецификацию www.seleniumhq.org/docs/03_webdriver.jsp но при этом все равно хорошо понимать HTML, DOM API.
    Ответ написан
    2 комментария