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

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

    P.S. В интернет-магазине, с которым работал, база доросла до гигабайта + несколько миллионов записей в таблицах товаров и пользователей. Плюс громоздкие запросы с 6-7 джойнами (дело рук первого разработчика) - обычное дело. И ничего, работает довольно-таки шустро.
    Ответ написан
    Комментировать
  • Почему после сохранения виджета в wordpress мой js код перестает работать?

    Wordpress заново загружает html-код виджета после того, как вы его сохраняете, т.е. фактически, виджет, на элементы которого вы вешали ваш JS, удаляется и заменяется новым. Для того, чтобы все работало, вам необходимо вешать "живые" события на все элементы необходимых вам идентификаторов, отталкиваясь от, например, документа.
    Ответ написан
  • Как сбросить класс к начальному состоянию в php?

    Создайте новый инстанс класса, и получите объект, который только что был создан.
    Ответ написан
    Комментировать
  • Как работать с одноразовыми CSRF токенами в ajax запросах?

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

    Это решение позволит работать даже с параллельными ajax-запросами (при условии отсутствия race condition, что маловероятно), т.к. токенов заранее сгенерено несколько, и комбинировать их с корректной работой форм на странице (т.к. токенов как минимум два).
    Ответ написан
    Комментировать
  • Не выводится контент в wordpress после get_posts()?

    но контент (сам текст страницы) после вывода записей пропадает!

    Я так полагаю, что вы перекрываете глобальный цикл (в котором контент страницы) вашим кастомным выводом, да еще и вот так напрямую. Попробуйте использовать wp_reset_query() вместо wp_reset_postdata(). Разница в том, что первый метод вернет глобальный цикл в изначальное состояние.

    Кроме того, нет никакой необходимости юзать глобальную переменную $post (в которой, кстати, у вас уже лежит ваш контент страницы, а вы потом перекрываете ее циклом), где нужно, WP сам ее подтянет. Эту строчку тоже удалите. Должно будет заработать.
    Ответ написан
    9 комментариев
  • Имеются ли в PHP какие-либо побочные эффекты (теоретически) при инициализации переменной в условии if?

    Heian
    @Heian Автор вопроса
    Ашот
    Проблема, описанная в вопросе, была в неверном приоритете операторов.
    Ответ написан
    Комментировать
  • Как сильно пострадает оперативная память?

    Да не парьтесь, юзер докупит еще пару планок и все нормально будет. Все так делают
    Ответ написан
    Комментировать
  • Ссылки в PHP (&$var1), переменные переменых ($$var2) и их практическое применение?

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

    А переменные переменных могут быть весьма хороши, когда необходимо извлечь содержимое массива или объекта более явным образом, чем это делает exports. Например:
    foreach($object as $key => $value) {
        if(...) { // любое условие, можно составить список разрешенных ключей
            $$key = $value;
        }
    }
    Ответ написан
    Комментировать
  • Как задать страницу wordpress?

    Шаблоны желательно менять через template_include. Этот фильтр предназначен специально для таких случаев.
    Ответ написан
    Комментировать
  • Является ли SQL запрос уязвимым к SQL инъекции?

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

    Зависит от ситуации. В вашем примере - второй. Но, в случае с кодом ниже - первый.
    foreach($houses as $house) {
        $current_floor = $house[$floor];
        $rooms_count = count($current_floor['flats']['1-room']); // например, только 1-комнатные
    
        $total_rooms += $rooms_count;
    
        /* вышенаписанное гораздо лучше, чем
        $total_rooms += count($house[$current_floor]['flats']['1-room']);
        */
    }

    В целом, когда чувствуете, что код становится нечитабельным, некрасивым и просто неудобным для сопровождения, предпринимайте адекватные действия для исправления ситуации, в том числе и создавая промежуточные переменные, чтобы визуально разделить код.
    Ответ написан
    3 комментария
  • PHP как проверить с какой страницы пришел запрос?

    $_SERVER['HTTP_REFERER'] // тут адрес страницы, с которой был отправлен запрос

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

    Если нужна 100% гарантия, отправляйте из вашего скрипта дополнительное свойство, например, referer_id (либо id, чтобы на сервере получить из предопределенного массива саму ссылку, если у вас скрипты расположены в четко определенных местах; либо саму ссылку).
    Ответ написан
    Комментировать
  • Чем оправдано использование QueryBuilder и ActiveRecord в одном проекте?

    ActiveRecord в большинстве случаев подходит только для простых запросов. В случае чего-то более-менее заковыристого приходится лезть в модель и городить огород из правил разной степени кривости (если фреймворк поддерживает), или еще хуже - писать все вручную. Два варианта плохи по определению. Поэтому ActiveRecord для простых операций, а QueryBuilder (или какой-нибудь нативный и удобный объект для работы с БД) с блэкджеком и шл PDO и плейсхолдерами - для всего остального.

    Отказываться не стоит, просто нужно использовать молоток для забивания гвоздей, а лопату - для копания. ActiveRecord адски удобен, при простых выборках или рядовых insert \ update он смотрится просто великолепно и делает код более простым и наглядным. В проектах ИМ 80% операций с базой идет через AR, и это очень облегчает жизнь.
    Ответ написан
    4 комментария
  • И все-таки PHP 7 быстрее Python 3?

    Да, быстрее. Он быстрее даже HHVM (пусть и ненамного). Вдумайтесь - интерпретируемый (пусть и из байт-кода) язык быстрее компилируемого! Воистину, PHP Team состоит из гениев чуть менее, чем полностью.

    Язык, за которым будущее всего www.
    Ответ написан
    2 комментария
  • Как выбрать массив из массива?

    $arrays = []; // здесь ваш массив с массивами
    $needles = ['num', 'oper'];
    $output = [];
    foreach($arrays as $key => $array) {
        if(in_array($key, $needles) {
            $output = array_merge($output, $array);
        }
    }
    Ответ написан
  • Статика или функции?

    Если функция атомарна и не имеет зависимостей от других функций \ классов \ внешних переменных, а также может вызываться многократно за один цикл выполнения, то можно использовать ее. Наглядный пример - простая обрезка картинок, либо форматирование текста.

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

    И как по мне, нет ничего страшного в создании объекта, пусть даже и для единоразового действия.
    Ответ написан
    Комментировать
  • Как задать условие отображения div, если существует определенный модуль для страницы (joomla)?

    В index.php темы проверяете существование модулей в определенной позиции при помощи функции $this->countModules('position'). Далее, если модули есть, устанавливаете body определенный класс, на основании которого в css будете скрывать \ показывать этот div.

    Либо, на основании вышеупомянутого условия, прямо в index.php определяйте, выводить div или нет.

    if($this->countModules('position')) :
        // тут выводите нужный html, если модули есть
    endif;
    Ответ написан
    Комментировать
  • Как обойти блокировку баннера (AdBlock)?

    Свяжитесь с автором AdBlock и купите у него разблокировку рекламы. Если помните, AdBlock сейчас - коммерческий продукт. Яндекс, Гугл и прочие уже подсуетились, купили себе показы.
    Ответ написан
  • Можно для тех кто в танке про CSRF?

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

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

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

    Get-запросы токенами защитить невозможно

    Почему? Посылаете в get токен параметром, на сервере проверяете.
    Ответ написан
  • Правильно ли в разные состояния присваивать в переменную разный тип?

    Это абсолютно нормально - для этого и созданы языки с динамической типизацией, но с оговорками. В целом подобного стоит избегать, если преимущества динамической типизации не ущемляются при подобном избегании (чего не происходит в 95% случаев), т.к. это потенциально затрудняет работу с кодом.

    В вашем примере при логауте стоит делать unset($_SESSION['user']), или session_unset.
    Ответ написан
    Комментировать