• Как ускорить apache в связке nginx?

    @hell
    В общем случае таких тормозов быть не должно на вашем железе.
    Попробуйте собрать статистику запросов и попрогонять их по одному через siedge с конкуренцией 2000.
    И врядли fpm даст значительную прибавку - на реальных приложениях обе связки работают примерно одинаково, разумеется, если апач настроен правильно.
    Правильно, в данном случае, без лишних модулей, без .htaccess, AllowOverride None и т.д.
    Посмотрите, что творится с пользовательскими сессиями - они могут чрезмерно плодиться.
    Ну и коннекты к БД - возможно там стоит какое-то ограничение.

    То есть в принципе, вам надо проделать примерно следующее:
    1) Почистить апач от всего лишнего.
    2) Сделать тестовую страничку, перекинув данные из БД в масссив и попробовать прогнать ее через siedge (ab в данном случае не катит)
    3) Если страничка будет отрабатывать без тормозов, пустить ее же, но уже в динамике с данными из СУБД. Сравнить результаты
    4) Если и тут все пойдет без тормозов, собрать в логах нгинкс реальные запросы и попробовать попрогонять их по отдельности через siedge - возможно удастся найти конкретные страницы, на которых все ломается.
    5) Смотреть и профилировать код
    Ответ написан
  • Как исправить 500 ошибку Internal Server Error при заходе в админку битрикса после переноса с тестового на боевой?

    @hell
    Вы бы логи показали апачевские.
    НУ и есть подозрение, что не стоит одновременно подключать и php5 и php7
    Ответ написан
    Комментировать
  • Нормальная ли сборка ПК?

    @hell
    Если речь идет о требовательных играх

    1) Смотрим видеокарту, ищем ее в яндекс-маркете и смотрим обзоры. В обзорах внимательно читаем что там написано и смотрим на результаты. Понимаем, что уже сейчас эта карта не способна нормально потянуть игры в FullHD. ТО есть нужно минимум 8 ГБ памяти на борту.
    С прицелом на настоящее замените ее на 580 радеон, с расчетом на ее замену года через два, когда появится или внятный флагман от АМД (да, я уже тоже не очень в это верю, но исключать вероятность нельзя), или nVidia выпустит следующее поколение карт с трассировкой
    2) Процессор я бы тоже поменял на более производительный - 9400 может не раскрыть нормальную видеокарту.
    3) Мозгов на борту минимум 16 Гб
    4) Вы ничего не пишете про материнку. Там тоже могут быть подводные камни.

    5) Резюмируя - попробуйте почитать вот эту статью - https://3dnews.ru/993326/kompyuter-mesyatsa-sentya...
    будет понятнее, чего вам ждать и на что ориентироваться
    Ответ написан
  • Почему при выводе через echo переменная выводится не там?

    @hell
    Кавычку после восклицательного знака поставьте, и будет вам великая радость
    Ответ написан
    2 комментария
  • Может ли БП не додать мощности на видеокарту и что делать?

    @hell
    1)может
    2)Поменять БП
    Посмотрите эту статью https://3dnews.ru/992184/psu-for-gaming-pc - там довольно подробно все разложено
    Ответ написан
    Комментировать
  • Как мне передать переменную из дочернего класса в родительский?

    @hell
    вам не нужно ничего передавать в родительский класс. Просто вызовите метод родительского класса из дочернего, и будет вам великая радость.
    Ответ написан
    4 комментария
  • Nginx проблема с длинным запросами GET?

    @hell
    какой у вас конфиг своеобразный

    значит так

    Ставим в секкции http (она скорее в nginx.conf)

    proxy_buffer_size 64k;
    proxy_buffers 4 64k;
    proxy_busy_buffers_size 64k;

    Если у вас нету доступа к nginx.conf, ставьте в текущем - сразу после чарсета
    Ответ написан
  • Хорошая ли практика проверять домен через HTTP_HOST?

    @hell
    Если у вас стоит (или появится) reverse proxy, результаты работы вашего кода вас удивят.
    Корректнее будет использовать $_SERVER['SERVER_NAME'];
    Ответ написан
  • Что не правильно в запросе PostgreSQL?

    @hell
    "В его личном деле было написано - ОСОБЫЕ ПРИМЕТЫ - все" (Dellamorte Dellamore)
    1) Мне кажется, что вам стоит серьезно переработать структуру БД
    2) Перефразируем ваш запрос:
    SELECT *
    FROM products p
    WHERE p.id IN
         (SELECT DISTINCT pc.product_id
          FROM product_characteristic pc
          WHERE pc.product_id = p.id
            AND pc.characteristic_id= ANY   (2,     19,        20)
            AND pc.selected_option_id=ANY (129,   2001569,   2001570, 2001571)
         )

    Или, "совсем по русски"
    SELECT *
    FROM products p
    WHERE p.id IN
         (SELECT DISTINCT pc.product_id
          FROM product_characteristic pc
          WHERE pc.product_id = p.id
            AND (pc.characteristic_id =2 OR  pc.characteristic_id =19 or pc.characteristic_id =20)
            AND (pc.selected_option=129 OR pc.selected_option=2001569 OR pc.selected_option=2001570 or pc.selected_option=2001571)
         )


    То есть вместо пересечения характеристик, вы выбираете их объединение
    Ну и, поскольку подзапрос вообще говоря самостоятелен, и независим от внешнего запроса, я не очень понимаю, что у вас в нем делает p.id и как оно вообще будет работать.
    3) Если попробовать написать то, что вы хотели, получится примерно следующее
    SELECT *
    FROM products p
    WHERE p.id IN
         (SELECT pc.product_id
          FROM product_characteristic pc,  product_characteristic pc1,product_characteristic pc2,  
          WHERE pc.product_id=pc1.product_id and pc.product_id=pc2.product_id
            AND pc.characteristic=2 AND pc.selected_option_id=129
            AND pc1.characteristic=19  AND pc1.selected_option_id=2001569
            AND pc2.characteristic=20  AND pc2.selected_option_id in  (2001570, 2001571)
         )

    Во-первых - убираем DISTINCT из подзапроса - он даст нам перечень product_id, и даже если они будут повторяться, основной запрос выберет только уникальные строки

    Во вторых - добавляем еще два псевдонима к таблице product_characteristic
    для каждого псевдонима ставим свое условие по id характеристики и id выбранной опции

    Ну и сообщаем, что искомый product_id для всех таблиц product_characteristic у вас одинаковый.

    Если у вас selected_option_id уникален для каждой опции, можно исключить из запроса поле selected_option_id
    тогда получится примерно так:
    SELECT *
    FROM products p
    WHERE p.id IN
         (SELECT pc.product_id
          FROM product_characteristic pc,  product_characteristic pc1,product_characteristic pc2,  
          WHERE pc.product_id=pc1.product_id and  pc.product_id=pc2.product_id
            AND pc.selected_option_id=129
            AND pc1.selected_option_id=2001569
            AND pc2.selected_option_id in  (2001570, 2001571)
         )
    Ответ написан
    5 комментариев
  • Как составить SQL запрос?

    @hell
    Попробуйте так:
    select b.* from b, a where a.id in (1,2,3,4,5) and position (a.short_name in b.full_name)>0;

    (за скорость не ручаюсь, ну и скорее всего придется приглядываться к результатам
    Ответ написан
    Комментировать
  • Найти все вхождения для регулярного выражения /(.*)/?

    @hell
    Попробуйте без регулярок - возможно будет проще.
    $string = "<math>var:a[actions]</math> килограмм яблок стоит <math>anything[]</math> руб. Сколько будет будет стоить <math>anything</math> килограмм(а, ов) яблок?";
    $res=array();
    $maths=explode('</math>',$string);
    foreach ($maths as $math){
    $mis=explode ('<math>',$math);
    if(isset($mis[1]))$res[]=$mis[1];
    }

    Работать на коротких строках будет чуть медленнее, но оверхед врядли будет очень велик
    Ответ написан
    1 комментарий
  • Как правильно сделать функцию которая бы проверяла является ли первый элемент детём второго?

    @hell
    function isParent(parent,child)
    {
    if(child.parentNode===parent) return true;
    else return false;
    }
    Ответ написан
    Комментировать
  • Почему перестал выключаться компьютер?

    @hell
    Была (и периодически продолжает всплывать) похожая проблема на MSI Z97-7A

    В моем случае проявились два варианта

    Вариант попроще - если на плате ничего не погорело, подглюкивает биос, После глюка Device manager показывает слетевший Intel Management Engine Interface.

    Лечение - переключение на резервный биос, перепрошивка биосов на последнюю версию с сайта производителя (даже если последняя версия уже стоит). Затем, возможно, но не обязательно, переустановка драйверов чипсета и IMEI

    Второй вариант - аппаратный сбой микросхемы биоса и/или переключателя между биосами. Мне повезло - я словил оба, причем переключатель сдох в "среднем положении" - благополучно включив оба биоса одновременно, а случилось это все во время перепрошивки биоса. Эта штука лечится уже только ремонтом - заменой микросхемы и переключателя. Стоимость такого ремонта не маленькая и скорее всего экономически не очень выгодна.

    P.S. Если разгоняли комп - сбросьте все настройки разгона памяти. Тоже помогает.
    Ответ написан
    Комментировать
  • Как обезопасить сайт от комментария пользователя с XSS, но при этом сохранить нужные теги (htmlspecialchars делает теги обычным текстом)?

    @hell
    Вообще говоря, strip_tags позволяет оставить некоторые теги. Собственно оставляем набор типа "p", "a", "strong", "em", "br", а для пущей чистоты грузим сухой остаток как DOMDocument, пробегаемся по нодам и чистим атрибуты.
    Ну или просто пробегаемся грузим как DOMDocument, пробегаемся по нодам и чистим лишние атрибуты, а лишние ноды удаляем. Работать должно побыстрее preg-replace.
    Ответ написан
    Комментировать
  • Как написать условие?

    @hell
    if(e.parentNode.tagName.toLowerCase()==='p'&&(e.nextSibling||e.previousSibling)){}
    или альтернатива
    if(e.parentNode.tagName.toLowerCase()==='p'&&e.parentNode.childNodes.length>1){}
    а чтобы не учитывать текстовые узлы
    if(e.parentNode.tagName.toLowerCase()==='p'&&e.parentNode.children.length>1){} (в старых ие будет включать комментарии)
    Ответ написан
    Комментировать
  • Почта попадает в спам, как изменить?

    @hell
    Для начала попробуйте добавить корректный заголовок 'Return-Path' (который как раз адрес возврата), возможно продублировав сам адрес возврата через доп-параметр -f (то есть как-то типа mail($to, $subject, $message, $headers, '-fregistration@MYDOMAIN.ru');) и посмотрите на то, что получится.
    Ну и если вы указываете content-type text/html корректнее было бы отформатировать сообщение в html (с тегами html, head и body)
    Ответ написан
    Комментировать
  • Почему так дико нагружается диск на Windows 10(home)?

    @hell
    Посмотрите в сторону заполнения свапа работой Windows Network Data Usage Monitoring Driver. В некоторых случаях (чаще всего - за счет некорректной работы сторонних программ - у меня попеременно firefox и royal revolt 2 пошаливают), NDU забивает память, после чего принимается за винчестер.
    У меня такая штука случалась регулярно (пробовал все вышеперечисленное), пока я не нашел https://www.youtube.com/watch?v=t0XEl-q4OSM вот это видео. Там все вроде понятно.
    Вкратце - отрубаем NDU нафиг (и не забываем отрубать его после каждого апдейта - оно восстанавливается) и наслаждаемся нормальной работой
    Ответ написан
  • Как считать цену на проектирование интерфейса?

    @hell
    Если не получается в часах - то у вас остается 2 варианта:
    1) Сдельщина. Определяете стоимость прототипа и по окончании работ умножаете эту стоимость на количество. Можно предварительно оценить это само количество, исходя из оценки запросить предоплату, и уточнить общую стоимость по окончании работ
    2) Оцениваете примерно количество прототипов и определяете общую стоимость. Опять же можно уточнить, что по окончании работ стоимость также может быть уточнена в зависимости от реального количества прототипов
    Ответ написан
    Комментировать
  • Nginx + php5-fpm VS Nginx + Apache; Что выбрать?

    @hell
    По первому пункту:
    Правильнее будет протестировать на актуальном железе и в актуальной конфигурации. Кроме того, ответ на ваш вопрос будет зависеть еще и от вашей возможности корректировать параметры ядра. На виртуалках у вас такой возможности может и не оказаться.

    Полтора года назад я делал такие тесты для своего сервера.
    Тестировались три варианта - nginx+php-fpm, nginx+apache+mod_php, nginx+nginx+php-fpm. результаты тестов на боевых сайтах показали:

    при правильной настройке apache - nginx+php-fpm - наименее производительное решение
    nginx+apache+mod_php и nginx+nginx+php-fpm выдерживают примерно одинаковую нагрузку, но второе решение чуть менее надежное (то есть именно чуть - в среднем, на 1000 натравливаний siege на боевой сервер, php-fpm слетел раз 7, а апач - раза 2)

    Софт с тех пор поменялся, железка у вас заведомо другая (та, на которой я тестировал, погорела), у меня был debian без виртуалок, у вас - Centos, посему актуальные результаты тестов в вашем случае могут оказаться другими.

    По второму - позволю процитировать себя же - "при правильной настройке apache". Правильная настройка апача на производительность включает полный отказ от .htaccess. Часть переносится в nginx, часть - напрямую в конфиги конкретного веб-сервера. Ну и из апача вообще выбрасываетс много-много-много всего. Нужно помнить, что правила рерайта в нгинксе огтличаются от апачевских - на хабре была пара правильных (особенно с учетом комментов) статей, ну и на самом сайте нгинкса примеров хороших более чем достаточно.

    По третьему - если вы проведете тесты и убедителсь, что с надежностью у связки nginx+nginx+php-fpm все нормально на ваших сайтах, я бы перешел.
    Поясню суть такой связки:
    внешний nginx отдает статику, зипует на лету, частично рерайтит запросы, а также проксирует запросы к php на внутренний нгинкс. Кроме того, по необходимости и возможности, он может кешировать часть запросов. У внешнего нгинкса keepalive_timeout установлен в достаточно большое значение (то есть тоже стоит подбирать).
    Внутренний нгинкс стоит с keepalive_timeout=0, и работает с php-fpm.

    Прекрасной плюшкой такой связки является возможность кеширования страниц с одновременным, простым и наитивным отключением кеширования интерактивной части (то есть, к примеру, вы кешируете весь сайт кроме блока комментариев и блока каких-нить прикольных фишечек, которые выводятся по рандому).

    Минусом - принципиальные отличия в логике рерайтов на nginx и в apache. Врочем, если потратить разок 2-3 рабочих дня на то, чтобы в этих разлиичях разобраться, дальше все будет проще.
    Ответ написан
    3 комментария
  • Как оптимизировать производительность большой базы в postgresql?

    @hell
    Собственно, вам нужно поднять значение shared_buffers до величины, чтобы в них влезала ваша максимальная выборка ( общий объем всех таблиц самого большого джойна), установить work_mem так, чтобы все сортировки оказывались в оперативной памяти (смотрится explain analyzeом), а потом (или, скорее - в процессе) заставить вашу машину со всем этим работать, донастроив ядро.
    Ответ написан
    1 комментарий