Ответы пользователя по тегу PHP
  • Каким образом можно реализовать редирект с условием?

    AMar4enko
    @AMar4enko
    В фреймфорках это называется флэш-состояние.
    Смысл простой - перед редиректом вы сохраняете в сессии некую информацию, делаете редирект.
    Код, который обрабатывает url, на которую был осуществлен редирект, проверяет сессию на предмет сохраненной информации, которую мог оставить предыдущий обработчик - если она там есть, то опираясь на нее он чего-то дополнительно делает (например, выводит сообщения об ошибках и.т.д). Флеш - потому что эта информация живет только в течение одного запроса после ее помещения в сессию, этим занимается фреймворк (обычно есть возможность сказать фреймворку продлить жизнь флеш-состояния, но это нюансы).
    Вот, например, Yii - www.yiiframework.com/doc/api/1.1/CWebUser#setFlash...
    Вот Zend - framework.zend.com/manual/2.2/en/modules/zend.mvc....
    Ответ написан
    Комментировать
  • Как с помощью AJAX запроса удалить запись в JSON на сервере?

    AMar4enko
    @AMar4enko
    А гуглить вы пробовали? Ну я так, на всякий случай.
    Ответ написан
  • Как работать с php-файлами в таск-менеджере GULP?

    AMar4enko
    @AMar4enko
    Никак. Он для этого просто не предназначен.
    Ответ написан
    Комментировать
  • Как настройка nginx/apache для работы с долгой загрузкой страниц?

    AMar4enko
    @AMar4enko
    Недавно был похожий вопрос. У вас блокируются файловые сессии PHP, скорей всего.
    Ответ написан
    2 комментария
  • Парсинг - Как получить подкатегории если они подгружаются при помощи js?

    AMar4enko
    @AMar4enko
    Загружаем сайт, открываем девелоперскую панель хрома, идем в Network.
    Щелкаем на пункте меню - видим запрос. Правой кнопкой на него, Сopy as CURL.
    Вставляем в командную строку с установленным CURL. Запускаем. Получаем HTML следующего уровня меню.
    Для разбора используем phpQuery, например.
    Подбираем параметры запроса, пишем простенький парсер, запускаем - вуаля.

    Парсер, написанный на Ruby за 40 минут, которые ушли на то, чтобы подобрать нужные задержки между запросами, чтобы сервер не блокировал: pastebin.com/69yDgMaz
    Резальтат работы парсера: https://dl.dropbox.com/s/xq2wg3h13zns9ph/categorie...
    Для того, чтобы полностью спарсить дерево категорий, понадобилось 997 запросов.
    Ответ написан
    7 комментариев
  • Какие есть и какой лучше Вариант(ы) Web - фронтэнда(клиента) для REST-сервера ?

    AMar4enko
    @AMar4enko
    Все перечисленные вами варианты имеют право на существование:
    - и обращение к RESTful сервису со стороны сервера, дабы получить нужную информацию и сформировать из нее статический html
    - и обращение к RESTful сервису непосредственно из браузерного скрипта, который самостоятельно будет визуализировать полученные данные

    Но важно понять следующее - когда у вас есть RESTful-сервис, к нему могут обращаться серверы, браузерные Single Page Javascript Applications, мобильные приложения, и даже десктопные клиенты, в то время как обычный сайт ориентирован только на доставку HTML-контента, сгенерированного на стороне сервера, и любая интеграция, которая органично выполняется при налиии RESTful-сервиса, выливается в дополнительную головную боль.
    Ответ написан
    Комментировать
  • Как отправить несколько изображений через ajax на почту?

    AMar4enko
    @AMar4enko
    Да у вас тут прям велосипедный парк!
    Ответ написан
    Комментировать
  • Добавлять/выводить схему мест в кинотеатрах, как реализовать?

    AMar4enko
    @AMar4enko
    Можно еще простенький редактор схем набросать с помощью jQuery UI Draggable.
    Задал сколько рядов, сколько в каждом ряду мест. Открыл редактор диаграммы, разместил кресла, экран опять же положил куда нужно. Диваны еще могут быть.
    Ну и не стоит забывать, что человеку нужно понимать, где относительно экрана он будет сидеть.
    Если у вас в рядах будет разное количество мест, то возникает вопрос, а как эти ряды рсположены?
    Например в заднем ряду 10 мест, когда при обычном раскладе их 20. Это просто 10 сидений справа? Или слева? Или это двухместные диваны?
    Ответ написан
    Комментировать
  • Как проигрывать mp3 записи в html5 плеере используя ssh + scp ... ?

    AMar4enko
    @AMar4enko
    wiki.nginx.org/XSendfile

    Настраиваете nginx на отдачу этих файлов из internal локации.
    Чтобы проиграть файл с сервера браузер запрашивает его у серверного скрипта, передавая в параметрах hash, который у вас в табличке.
    Скрипт знает, какой пользователь залогинен, проверяет, есть ли у него права слушать этот файл, с помощью таблички. Если права есть, то скрипт отправляет в ответе заголовок X-Accel-Redirect с указанием файла. Nginx отлавливает этот заголовок в ответе proxy_pass и согласно ему отправляет файл из internal локации.

    Трюк давным-давно известный, поддержка есть во всех мало-мальски адекватных фреймворках. Главное правильно настроить nginx.
    Ответ написан
  • Как объединить 2 запроса в один?

    AMar4enko
    @AMar4enko
    SELECT r.id, r.data, r.work_id, r.sum, r.master, DATE_FORMAT(r.data,'%d.%m.%Y') As data
    FROM remont_tech AS r
    LEFT JOIN tech AS t ON r.tech_id = t.id
    WHERE
    t.user='$uzver[id]' AND t.status != 'delete' AND
    r.status='normal' AND TO_DAYS(NOW()) - TO_DAYS(r.data) <= 7
    ORDER BY DATE(r.data)
    Ответ написан
    Комментировать
  • Как проверить нагрузку на сервер?

    AMar4enko
    @AMar4enko
    Еще JMeter, если хотите нагрузочную ферму делать сами.
    Есть Blitz - облачное решение с наличием бесплатного плана. У них есть свое API, которое позволяет писать сложные планы тестирования.
    Ответ написан
    Комментировать
  • Как сгенерировать массив бинарной структуры используя Nested Set?

    AMar4enko
    @AMar4enko
    У вас будет структура вроде той, что ниже, у которой subitems это массив элементов этой же структуры. В data храните полезную нагрузку для узла (в вашем случае user_id, L, R):
    array(
    'id' => ...,
    'data' => array(...),
    'subitems' => array(...)
    )

    Заводите индексный массив ссылок $node_index = array(); и массив результатов $result = array();
    Сортируете исходный массив по возрастанию level, после чего делаете что-то вроде:
    foreach($node in $source_array) {
       if(!($parent_node = $node_index[$node['previous_id']])) {
           $result[$node['previous_id']] = array(
               'id' => $node['previous_id'],
               'data' => array(...),
               'subitems' => array()
           );
           $node_index = &$result[$node['previous_id']];
           $parent_node = $node_index[$node['previous_id']];
       }
       $parent_node['subitems'][$node['id']] = $node;
       $node_index[$node['id']] = &$parent_node['subitems'][$node['id']];
    }

    Не могу утверждать, что код 100% рабочий, написал по памяти. Суть его в том, что $node_index является хэшем id ноды => ссылка на нее. Без этого массива пришлось бы мудрить рекурсию для того, чтобы распихать элементы по иерархии.

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

    А если совсем по-хорошему, то лучше какое-нибудь готовое дерево использовать. Это так, dirty hack, не более.
    Ответ написан
  • Как сервер реагирует на выполнение жирных скриптов ?

    AMar4enko
    @AMar4enko
    Выделите скрипт начисления бонусов в задачу для Gearman. Исходя из того, что вы написали, никакой nested set (я правильно понимаю, это parent_id в записи пользователя ?) вам не нужен - вставляете в строковую колонку ключи всех вышестоящих пользователей в порядке увеличения вложенности через запятую. Обоснованность такого решения - ключи меняться не будут, иерархия часто меняться не будет, удалять записи вы тоже вряд ли будете, скорее, будете их помечать. При изменении иерархии можно эти колонки перестроить, даже простым SQL-запросом. Это даст вам возможность вытаскивать всех вышестоящих пользователей одним запросом. Ни о каких 20 секундах тут даже речи не идет, это будет занимать доли секунды.
    Как только появилась необходимость начислить бонусы - отправляете задачу в очередь Gearman-а, основной пул веб-воркеров не занимается ненужной ерундой, готов обрабатывать запросы. Gearman в порядке очереди обрабатывает задачи.
    Ответ написан
    5 комментариев
  • Angular как получить всего один документ ajax?

    AMar4enko
    @AMar4enko
    А что будет, если перейти по #/metal/id={{doc.id}}?
    Если при клике на ссылку вам надо отобразить страницу с детальной информацией об объекте, то вам надо смотреть в сторону resolve секции в объявлении $routeProvider.when
    В текущей реализации вы отбираете у angular.js его хлеб.
    Это может выглядеть как-то так
    // Это контроллер, который будет привязан к содержимому ng-view после перехода по соотв. url
    // Внедряемая зависимость document возникает в момент разрешения зависимостей при активации роута
    app.controller('DocumentController', ['$scope','document', function($scope, doc){
         $scope.document = doc;
    }]);
    
    app.config(['$routeProvider',, function($routeProvider) {
        $routeProvider.when('/metal/:type/:id', {
            templateUrl: '/makeup/metal.html',
            controller: 'DocumentController',
            // Данная секция отвечает за разрешение зависимостей роута. Объекты из этой секции внедряются в указанный контроллер с соотв. именами       
            resolve: {
                document: ['doc','$route', function(doc,$route){
                     // Мы вытаскиваем из роута параметры id и type, запрашиваем у фабрики соотв. объект.           
                     // Фабрика в ответ возвращает нам promise, который мы возвращаем как зависимость, которая должна быть разрешена, и инициирует http-запрос. После получения объекта фабрика разрешает promise, инстанцируется контроллер с внедрением полученного объекта и отображается шаблон
                     return doc($route.current.params.id, $route.current.params.type);
                }]
            }
        });
    Ответ написан
    2 комментария
  • Зачем писать свой движок сайта?

    AMar4enko
    @AMar4enko
    Возможно это задание с целью проверить гибкость мышления, системность подхода ну и производительность.
    Постарайтесь выполнить эту задачу настолько полно, насколько это возможно, по вашему, за две недели. Результат покажите работодателю. Если он скажет "Чо это такое? Где движок сайта-то?", то можете смело разворачиваться и пытать счасться в другом месте. Ну а если работодатель адекватный, то он попросит обосновать выбранные инструменты, технические решения, последовательность реализации и.т.д., по результатам этого общения он сделает вывод о целесообразности найма.
    Ответ написан
    Комментировать
  • Объеденить SQL 3 запроса в 1 массив

    AMar4enko
    @AMar4enko
    Интересно, что ваш цикл, в таком случае, будет делать.
    Ответ написан
    Комментировать
  • Как быстрее выбрать изображения из БД (mysql php)?

    AMar4enko
    @AMar4enko
    Отличные советы вам дал человек в очках. Храните изображения в базе, доставайте их оттуда скриптом, из скрипта отдавайте! Зачем нам реверс-прокси, энджиниксы всякие.
    А по поводу вашего вопроса - самое правильное, это взять PostgreSQL, где есть типизированный массив в качестве типа столбца.
    А если без него, то я бы сериализовал массив имен файлов и пихал их в поле типа text, потому что:
    - вероятней всего вы не будете использовать одно изображение в нескольких лотах
    - вы не будете выполнять поиск по названиям файлов изображений
    В этом случае вы избавлены от накладного запроса в БД для получения изображений - получили запись, десериализовали массив имен и все, можете отдавать.
    Ответ написан
    3 комментария
  • Почему не приходят данные методом POST от банка?

    AMar4enko
    @AMar4enko
    А вы по логам не можете посмотреть, когда от них приходит запрос, с какими данными, и что вы в ответ отдаете?
    Ответ написан
  • CKEditor jqury + ajax передача метом POST идет с ошибкой?

    AMar4enko
    @AMar4enko
    Попробуйте вместо
    data: "h1="+h1
                +"&url="+url
                +"&state="+state....

    сделать
    data: {h1: h1, url: url, state: state}
    Есть подозрение, что проблема в urlencode
    Ответ написан