• Как организовать "виртуальные" папки?

    @AndryG
    Типа так: Главная папка -> Вложенная папка -> Вложенная во вложенную и т.д.


    это называется "хлебные крошки" - каждое название папки является ссылкой на страницу с содержанием папки.

    Список родителей добыть серией запросов либо рекурcивным
    Ответ написан
  • Как открыть публичный доступ к git-репозиторию в частной локальной сети?

    @AndryG
    Как открыть публичный доступ к git-репозиторию в частной локальной сети?
    Требуется удаленно обновлять репозиторий во внутренней локальной сети из облачного сервиса.

    Это только я не понимаю, где репозиторий, где облако и где юзер: в облаке или репозитории :)
    Ответ написан
    Комментировать
  • Стоит ли разделять 1 общий запрос на несколько маленьких?

    @AndryG
    А если добавить перечень частей, которые просят вернуть?
    дай мне:
    * автомобиль
    * запчасти
    * сервисные центры
    * утилизация
    * все отделы
    Юзер может выбрать, какие данные запросить в одном запросе: один, два или всё
    Ответ написан
    Комментировать
  • Как вычесть значение в bd через php?

    @AndryG
    Напишите триггер post delete, где запросом изменяйте значение поля в дугой таблице. Без структуры таблиц конкретнее ответ не получить.
    Ответ написан
    Комментировать
  • Браузер не загружает файлы, пишет No 'Access-Control-Allow-Origin. Что делать?

    @AndryG
    Парсер выполняется в браузере? Значит надо вникать в междоменные запросы, а там безопасности вагон и тележка. Конкретно про CORS в вики описано вполне доходчиво, что и как. Заголовка "Access-Control-Allow-Origin" на жертве нет, значит остается JSONP, который вам тоже не поможет.

    Решение для вас - парсер на стороне сервера через CURL, который для жертвы выглядит обычным браузером и отдает ему все ресурсы без вопросов.
    Ответ написан
    4 комментария
  • Как долгий PHP скрипт отправить в фон и одновременно вернуть пользователю сообщение об ожидании его исполнения?

    @AndryG
    Я в коде для таких задач имею скриптик лет 10 назад написанный:
    public static function execAsDeamon($script,$params = null){
        $tmp = '';
        foreach((array)$params as $k=>$v){
          if(empty($k)){
            continue;
          }
          $tmp .= ' -'.$k.'='.$v;
        }
        $tmp = g::options('core.php-cli-starter', 'php').' '.$script.' '.srv::$HOST_TYPE.$tmp.' > /dev/null &';
        exec($tmp);
      }


    Когда запрашивают тяжелую статистику по ресурсу, а она еще не рассчитывалась, то я запускаю этим методом скрипт расчета, он в отдельном потоке выполняет свою работу. а я клиенту отдаю страницу "ой, надо немного подождать" с тегом мета перезагрузки страницы и кнопкой "не могу больше ждать. покажи статистику." для немедленного перегруза страницы.

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

    @AndryG
    Как сделать, чтоб он не добавлял новые результаты после старых результатов, а полностью перезаписывал файл: socks5_valid.txt новыми результатами ?


    file_put_contents ($filename, $s."\r\n", FILE_APPEND);

    Убрать параметр FILE_APPEND
    Ответ написан
    Комментировать
  • Какую выбрать систему приема платежей на сайте, чтобы реализовать вывод средств на расчетный счет СПД в Украине?

    @AndryG
    Оставлю для потомков сообщение из 2020 года :)
    wayforpay.com работаем с ними много лет. Полет отличный.
    Ответ написан
    Комментировать
  • Как правильно составить запрос SQL?

    @AndryG
    SELECT * FROM `brands` WHERE `district` = :district or :district = 'Не выбрано';
    Ответ написан
    Комментировать
  • Как правильно написать запрос к БД?

    @AndryG
    Если я правильно понял вот это все нагромождение id :)

    select 
     a.userId,
     sum(k1.val * k2.val * k3.val) points 
    from aciv a
     join users on u.userId = a.userId  -- эта строка вроде как и не нужна, если нут других ограничений по users
     join kof k1 on a.kof1 = k1.id
     join kof k2 on a.kof2 = k2.id
     join kof k3 on a.kof3 = k3.id
    group by a.userId
    order by 2 desc
    limit 5


    Запрос будет тяжелый, ибо без пересчета всех данных нужные не определить.
    Ответ написан
    1 комментарий
  • Прогресс бар php?

    @AndryG
    str_pad вам в помощь. Не запутайтесь в округлениях.

    str_pad — Дополняет строку другой строкой до заданной длины

    Попробую на пальцах:

    length = 50 штук
    val = 35 %
    первыми выводим звездочек в количестве ceil(50 * 35 / 100)
    str_pad(res, ceil(50 * 35 / 100), '*')
    А потом добавляем точками до 50
    str_pad(res, 50, '.')

    В вопросе стоило упомянуть, что вас интересует консольная версия (или text/plain)
    Ответ написан
    Комментировать
  • Вывод MYSQLI с INNER JOIN и GROUP BY + ORDER. Как?

    @AndryG
    Нужно сделать просто: взять ID из TAB1, сделать JOIN с TAB2, и вывести по порядку ID, LOCAT и DATE, но отсортировав по DATE - интересны только последние даты (свежие)


    Нужно отобрать данные с T2, где для каждого ID выбрать запись с максимальной датой.

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

    Как построить такой запрос очень зависит от масштабов данных. По вашим примерам не ясно, на что именно делать упор, потому приведу чисто школьный пример.

    select 
      t1.id, t1.raw, t2.date, t2.locat
    from ( -- формируем промежуточный набор данных с id+date подходящих записей 
    select a2.id, max(a2.date) date
    from tab2  a2 
      join tab1 a1 on a2.id = a1.id  -- этот джоин ограничивает множество a2, чтобы не группировать лишние записи
    group by a1.id, a1.date
    ) n
    join tab1 t1 on t1.id = n.id
    join tab2 t2 on t2.id = n.id and t2.date = n.date -- теперь в джоине участвует два поля, чтобы точно указать на запись, которая нам нужна


    Можете выполнить внутренний запрос отдельно и увидеть, что он вам выберет.

    Проявите уважение к отвечающим - перечитайте свой вопрос перед публикацией, оцените "доходчивость" и полноту описания + используйте форматирование :)
    Ответ написан
  • Отладка в PhpStorm запуск браузера?

    @AndryG
    shift shift
    edit configurations
    кнопка плюс
    PHP WEB page
    Ответ написан
    Комментировать
  • Как сделать многоуровневый роутинг праивльно?

    @AndryG
    Откройте для себя методы HTTP (get/post/put/delete/patch) - не зря их придумывали.

    Для простоты решения возьмите форму CLASS/param/param/param

    /user/234 - страница пользователя
    /user/234 - аналогично предыдущему
    albums/user/234/ - страница альбомов пользователя 234
    albums/567 - конкретный альбом пользователя (если номер альбомов сквозные)
    albums/234/6 - если нужны два поля user-num

    А вот что делать - пусть указывает HTTP метод (get/put/delete)

    Ну, или CLASS/METHOD/param/param/param
    Ответ написан
  • Почему выводится только 2 элемента вместо 3?

    @AndryG
    Книга The old man and the sea ее написал Ernst Hemingway 1899 (ernsthy@gm.com)
    Книга La Nausée ее написал Jean Paul Sartre 1905 (jps@gm.com)
    Книга The Moonstone ее написал Wilkie Collins 1824 (wilkc@gm.com)

    А у меня три. Код просто скопипастил.
    Ответ написан
    Комментировать
  • Как стать популярным на Гитхабе?

    @AndryG
    "прокачать профиль инстаграммчика" слышал. Прокачать профиль гитхаба ... :)
    Ответ написан
    Комментировать
  • Как запретить кнопку с типом submit реагировать на enter?

    @AndryG
    Вы термины путаете кликаю, нажимаю и фиг поймешь, что вы хотите. Когда же писатели начнут читать ? :)
    Каждое предложение - отрывок мысли. Поди догадайся, что он хочет.
    Проблемы вы описали, не указав, что на самом деле надо. Только отсылки к другим версиям, здесь не представленным.

    У вас проблема именно с enter или проблема с моргающим input? Если так, то какое у него должно быть поведение? Кликнули на кнопку, открылся input, нажали enter .... и что ожидается (input пропал / не пропал)?
    Ответ написан
    63 комментария
  • Вставить url страницы, при Ajax подгрузке части контента, но не переходить по ней?

    @AndryG
    единственная проблема что ссылка не меняется, а хотелось бы что бы ссылка заменялся на ссылку страницы, с который был вытянут контент.


    Если под ссылкой здесь понимается ссылка на текущий документ в строке адреса страницы, то (сразу пишите про это, а не ссылка-ссылка-ссылка) вам в помощь history - примочка браузера, которая меняет ту самую ссылку управляет историей в строке адреса :)
    Ответ написан
    Комментировать
  • Как получить только PHPSESSID?

    @AndryG
    $str = 'mail_info_10999781={"count":4,"lastPostId":"442384768","playerId":"1","playerName":"Система","text":"За участие в Ту..","dateAdded":1586381539,"countNew":"4"}; mail_info_4180878=[]; mail_info_2329300=[]; mail_info_10982672=[]; mail_info_10524789={"count":3,"lastPostId":"444114528","playerId":"1","playerName":"Система","text":"За участие в Ту..","dateAdded":1587504640,"countNew":"3"}; mail_info_9061283={"count":3,"lastPostId":"444114548","playerId":"1","playerName":"Система","text":"За участие в Ту..","dateAdded":1587504666,"countNew":"3"}; mail_info_4767868=[]; mail_info_2307930=[]; mail_info_3713915={"count":4,"lastPostId":"444115078","playerId":"1","playerName":"Система","text":"Вы покинули или..","dateAdded":1587505121,"countNew":"4"}; mail_info_11019215=[]; uidc=75e9f7984b904a; mail_info_7521919={"count":3,"lastPostId":"444119300","playerId":"1","playerName":"Система","text":"За участие в Ту..","dateAdded":1587509668,"countNew":"3"}; mail_info_5249555={"count":3,"lastPostId":"444119305","playerId":"1","playerName":"Система","text":"За участие в Ту..","dateAdded":1587509682,"countNew":"3"}; mail_info_9721044={"count":3,"lastPostId":"444119330","playerId":"1","playerName":"Система","text":"За участие в Ту..","dateAdded":1587509739,"countNew":"3"}; mail_info_9200661={"count":1,"lastPostId":"444119783","playerId":"10978816","playerName":"Букая","text":"Перса верните","dateAdded":1587511049,"countNew":"1"}; mail_info_3775637=[]; mail_info_10950336=[]; mail_info_2728587=[]; mail_info_10799719={"count":4,"lastPostId":"444145953","playerId":"1","playerName":"Система","text":"За участие в Ту..","dateAdded":1587543962,"countNew":"4"}; mail_info_3782473={"count":4,"lastPostId":"444146002","playerId":"1","playerName":"Система","text":"Вы покинули или..","dateAdded":1587543991,"countNew":"4"}; mail_info_8929282={"count":5,"lastPostId":"444146020","playerId":"1","playerName":"Система","text":"Вы покинули или..","dateAdded":1587544010,"countNew":"5"}; mail_info_6872423={"count":4,"lastPostId":"444146071","playerId":"1","playerName":"Система","text":"Вы покинули или..","dateAdded":1587544041,"countNew":"4"}; mail_info_10947584=[]; mail_info_5361529=[]; mail_info_11024570=[]; mail_info_10824306={"count":3,"lastPostId":"444149063","playerId":"1","playerName":"Система","text":"Вы покинули или..","dateAdded":1587546093,"countNew":"3"}; mail_info_9126714=[]; mail_info_9412550=[]; mail_info_8087106=[]; PHPSESSID=720e9a61f3ce5acf34e005ba0811a4e0.1587566959.5217338; mail_info_10209738=[]; lastSyncDate=1587568026488mrush.mobi';
    if(preg_match('/PHPSESSID=(.+?);/', $str, $matches)){
        echo $matches[1];
    }else{
        echo 'Oops';
    }
    Ответ написан
    4 комментария