Ответы пользователя по тегу PHP
  • Почему PHP7 работает медленнее?

    latteo
    @latteo
    Попробуйте запустить 100 раз для прогрева, а потом промерять минимум 10 раз и взять среднее.
    Это исключит погрешности.
    Ответ написан
    Комментировать
  • Запись в файл PHP?

    latteo
    @latteo
    Лучший класс, который видел: https://github.com/yiisoft/yii2/blob/master/framew...
    Плюс максимально подробное описание в phpDoc
    Ответ написан
  • Управление буфером вывода?

    latteo
    @latteo
    В шаблонизаторах активно используют. Исполняют php код в шаблоне (echo), потом отдают контролеру и он может сделать дополнительную обёртку. Так же при нескольких слоях в шаблоне.
    Ответ написан
    Комментировать
  • Минификация php?

    latteo
    @latteo
    На митапе по magento 2, core разработчик фреймворка говорил, что медленная скорость исполнения это плата за гибкость и кучу абстрактных слоев. А самый лучший подход по ускорению - это full page cache и Varnish.

    Пол года назад, когда мне довелось поработать с этим фреймворком, я собрал самые замечательные глюки с производительностью. К примеру mega menu, который пихают во многие темы, увеличивал FTTB в 2 раза даже если он не используется, но прописан в di. Индус, который работал с апи mega menu, замедлил еще почти в 2 раза.
    Вкл какого-то вида минификации в глубинах админки, тоже давало почти двойное замедление. Но вроде бы уже пофиксили.
    Вкл/выкл настроек в админке через раз приводило сайт в нерабочий вид, с необходимостью сделать rm файлов кеша через консоль и запуск еще нескольких консольных команд magento.

    Так же у фреймворка довольно навороченная di и система подмены загружаемых классов. Что с высокой вероятностью не даст вам сделать конкатенацию файлов.

    В общем, ваш вопрос интересен с точки зрения исследователя, но бесполезен в контексте реального ускорения сайта.
    Ответ написан
    1 комментарий
  • Как организовать много параллельных запросов к разным серверам/API?

    latteo
    @latteo
    https://www.youtube.com/watch?v=uO268voCGwA - ситуация похожая, правда им приходилось слать несколько запросов к одному API серверу.
    Ответ написан
    Комментировать
  • Фреймворк, макро-Фреймворк для разработки портала?

    latteo
    @latteo
    Попробуй почитать руководство фреймворка Yii2 https://www.yiiframework.com/doc/guide/2.0/ru вплоть до и включая раздел "ОБРАБОТКА ЗАПРОСОВ". В своё время мне это помогло гораздо больше чем куча статей и попыток слепить свой mvc.
    Ответ написан
    Комментировать
  • Заявки с сайты приходят на почту с задержкой?

    latteo
    @latteo
    А отправка как происходит?
    Если через mail() то это скорее всего хостер.
    Если smtp смотрите заголовки писем, может оно само по себе долго идёт. Ну опять таки смотря чей смтп.
    Ответ написан
    Комментировать
  • Как не попасть в блэк-лист при многопоточном парсинге?

    latteo
    @latteo
    Один из вариантов бана получается, когда много сайтов висят на одном сервере.
    Самый простой способ обхода - определить ip сайтов и делать паузы при запросах на одинаковые ip.
    В теории, механизм таких пауз в курле должен быть встроен и есть вероятность, что этим можно управлять из php. Для подробностей читайте маны ;)

    Более сложный и более редкий вариант - на один сервер несколько ip или несколько серверов за одним фаерволом, который воспринимает множественные запросы как DDOS. Здесь уже необходимо вычислять подсеть или даже все подсети ДЦ для установки пауз.
    Ответ написан
  • Зачем нужен ioncube, если его легко вскрыть?

    latteo
    @latteo
    У вас старая версия.
    Код после вскрытия чаще всего нерабочий и требует допила, иногда всё плохо настолько, что логику скрипта можно лишь угадывать.
    Между выходом свежей версии и появлением декодеров проходит некоторое время.
    Включение дополнительных опций сильно затрудняет декод - деобфускация будет не полная (по отзывам автора одного из декодеров).
    Ответ написан
    Комментировать
  • Yii2 Обновить/Добавить записи в базу?

    latteo
    @latteo
    $this->db = Yii::$app->db; 
        $sql = $this->db
          ->QueryBuilder
          ->batchInsert('table_name', ['test', 'val'], $arr);
        //У меня уникальность по первому полю и я хочу избежать ошибок, которые прервут вставку:
        $sql = 'INSERT IGNORE' . mb_substr($sql, strlen('INSERT'));
        $inserted = $this->db->createCommand($sql)->execute();
    Ответ написан
    Комментировать
  • Чем шифровать PHP для продажи и лицензирования?

    latteo
    @latteo
    Он то вскрыт, но мало кто умеет и за дорого.
    А если еще и вот это активировать blog.ioncube.com/2015/09/02/ioncube-encoder-versio... то шансы на деобфускацию еще ниже. Там примерно половина кода доступна, остальное надо додумывать.

    А вот то что предлагают массово, так это продление лицензии по домену за 30% от стоимости продукта на тот же срок.

    Альтернатив ioncube по энкоду нет. Zend давно слился. PHP LockIt и клоны сильно тормозят и руками снимаются любым грамотным php`шником.

    Поэтому всё больше набирает популярность облачная инфраструктура с апи и высокой абонплатой + бесплатный или недорогой тонкий клиент для пользователя. Но это уже у энкоду не относится...
    Ответ написан
    Комментировать
  • Почему вместо +1 добавляет +2?

    latteo
    @latteo
    Не нашел у вас unit-тестов, возможно всё дело в этом ;)

    После выполнения такого кода

    А как выполняете?
    Через браузер? Да еще и на главной? Тогда есть частая ошибка с favicon, которого нет и вместо которого второй раз грузится главная, наращивая счётчики.
    Попробуйте через консоль или рядом лежащим файлом через file_get_contents($url);
    Ответ написан
    3 комментария
  • Какая best practice защиты от записи в файл в несколько потоков?

    latteo
    @latteo
    Записать в файл с уникальным именем потом собирать в один.
    Я microtime(true) при запуске скрипта запоминаю и формирую из него имя файла. Есть нативная uniqid(). При записи проверка, что файл не существует, пересечения на 100 потоков бывают очень редко. Но у вас может быть и иначе, в зависимости от времени работы каждого потока и их количества.
    По сути это медленный аналог очереди в памяти, но зато могу быть уверенным, что на диске информация точно осталась.
    Ответ написан
    Комментировать
  • Скрипт, выполняемый на JavaScript за секунду, на PHP за 30 секунд проходит только 20%. В чём причина?

    latteo
    @latteo
    php можно ускорить в 2-3 раза, если сделать выход из циклов в последнем условии:
    if( 100*$d+10*$g+$j + 100*$j+10*$a+$e + 100*$b+10*$h+$f == 1000*$d+100*$d+10*$a+$b && $f*$c/$j == 10*$g+$a) {
                echo " a=",$a, " b=",$b, " c=",$c, " d=",$d, " e=",$e, " f=",$f, " g=",$g, " h=",$h, " j=",$j;
                break 9;
              }


    Ради фана переписал 2й алгоритм на Go
    package main
    
    import "fmt"
    import "time"
    
    func main() {
        st :=  time.Now().UnixNano()
        top:
        for a := 1; a<10; a++ {
          for b := 1; b<10; b++ {
            if b == a { continue; } else {
              for c := 1; c<10; c++ {
                if c==b || c==a { continue; } else {
                  for d := 1; d<10; d++ {
                    if  d==c || d==b || d==a { continue; } else {
                      for e := 1; e<10; e++ {
                        if e==d || e==c || e==b || e==a { continue; } else {
                          for f := 1; f<10; f++ {
                            if f==e || f==d || f==c || f==b || f==a { continue; } else {
                              for g := 1; g<10; g++ {
                                if g==f || g==e || g==d || g==c || g==b || g==a { continue; } else {
                                  for h := 1; h<10; h++ {
                                    if h==g || h==f || h==e || h==d || h==c || h==b || h==a { continue; } else {
                                      for j := 1; j<10; j++ {
                                        if j==h || j==g || j==f || j==e || j==d || j==c || j==b || j==a { continue; } else {
                                          if 100*d+10*g+j + 100*j+10*a+e + 100*b+10*h+f == 1000*d+100*d+10*a+b && f*c/j == 10*g+a {
                                            fmt.Println(" a=", a, " b=", b, " c=", c, " d=", d, " e=", e, " f=", f, " g=", g, " h=", h, " j=", j)
                                            break top
                                          }}}}}}}}}}}}}}}}}}
                    
        elapsed := time.Now().UnixNano()
        delta := ( float64(elapsed) - float64(st) )/ 1e6
        fmt.Println("Время выполнения (ms): ", delta)
    }


    Ну и JS тоже разжился break`ом и профилированием
    var time = performance.now();
    // некий код
    time = performance.now() - time;
    console.log('Время выполнения (ms): ', time);

    по времени в 2 раза медленне GO

    Лучшие результаты на моей машине:
    php - 600мс
    js - 40мс
    go - 20мс
    Ответ написан
    3 комментария
  • Как сделать умный фильтр текста по смыслу?

    latteo
    @latteo
    Его и по телефону не всегда отличишь, если агент косит под собственника.

    Для ручной фильтрации использую:
    - анализ телефона, как правило у агенств множество квартир. А у собственника 90% одна объява, 10% могут быть объявления 2-3 квартир + могут попадаться объявы по продаже мелких вещей.
    - анализ картинки: агенствам лень заморачиваться и картинки могут идти на несколько объяв, но увы парсить гугл это долго.
    - общий фон текста + интуиция. Вот тут машина пока бессильна, хотя можете попробовать анализом нескольких тысяч текстов выявить закономерности через сервисы типа https://habrahabr.ru/post/243705/

    PS: в современном мире агенства - это зло в виде лишнего посредника с огромными запросами и минимальной функцией свести 2х людей без малейших проверок кто эти люди.
    Ответ написан
    1 комментарий
  • Ошибка "слишком много переадресаций". Как отключить лимит переадресаций браузера?

    latteo
    @latteo
    Используйте редирект в браузере:
    meta тег в head
    <meta http-equiv="refresh" content="seconds;URL-to-redirect">

    https://www.w3.org/TR/WCAG20-TECHS/H76.html

    или js
    www.w3schools.com/js/js_window_location.asp

    А лучше всего запустите php скрипт через консоль, у меня так парсеры неделями работают и стопаются только из-за необходимости ОС перезагружать
    Ответ написан
    Комментировать
  • Как найти в массиве переменную только с цифрами?

    latteo
    @latteo
    foreach для перебора
    is_numeric для определения - php.net/manual/ru/function.is-numeric.php
    Если формат is_numeric не подходит, то используем регулярки:
    if(preg_match('/^\d+$/', "10100111001")){}
    Ответ написан
    Комментировать
  • Оффлайн справочник по php и mysql?

    latteo
    @latteo
    dev.mysql.com/doc -> MySQL Server -> MySQL 5.x Reference Manual (GA)
    Можно скачать в html, pdf, epub, и еще нескольких более спецефичных
    Ответ написан
    Комментировать
  • Как совершить очистку консоли средствами PHP?

    latteo
    @latteo
    system('whoami');

    Запускает отдельную скрытую консоль, выполняет в ней команду whoami, результат выполнения возвращает php.
    C "cls" - тоже самое... он успешно отрабатывает, вы просто не видите результата.

    Потому возникает вопрос, а что собственно пытаетесь сделать?
    Ответ написан
    Комментировать