Задать вопрос
Ответы пользователя по тегу PHP
  • MemcacheD: как хранятся ключи "под капотом" у него?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Понятное дело что ни к посетителям, ни к сессиям мемкеш никакого отношения не имеет, как и РНР. HTTP - это stateless протокол, и все клиенты в РНР на одно лицо.
    Мемкеш - это демон, который обслуживает входящие соединения, которые для него тоже все на одно лицо. Причём это лицо - РНР, а не какой-то там НТТР клиент.
    РНР конечно может создать ключ в мемкеше на основе куки, полученной от пользователя, но для мемкеша это будет совершенно обычный ключ, не привязанный ни к какому "клиенту". А всё привязка - это чисто интерпретации на уровне пользовательского РНР кода.

    А вот почему тормоза и дубли - тут я ответить не могу, потому что с мемкешем сталкивался лет 10 назад по касательной. Это к вопросу о том, что искать часы надо там, где потерял, а не не под фонарём потому что светлее. И задавать вопрос надо про исходную проблему, а не про свои догадки по её поводу.

    По идее никаких дублей в мемкеше быть не должно - это key-value хранилище и ключи должны быть уникальными.
    Возможно, выгрузка показывает уже просраченные ключи.
    А тормоза, возможно, из-за того, что ключи постоянно перезаписываются, вместо того, чтобы записываться только тогда, когда надо обновить данные.

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

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Почему не нужно заранее объявлять массив?


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

    Значит то что пишут $result = [] Это я удобства?


    Не для "удобства", а для того, чтобы волосы на голове сохранились подольше.
    В данном случае нужды в явном присвоении нет.
    Но любой код со временем изменяется. И функция tower_builder() может разрастись. Там появится ещё один цикл, который работает с массивом $result. Который получит какое-то значение до начала нашего цикла, и в итоге конечный результат будет неправильным. Поэтому $result = [] перед началом работы с массивом - это не каприз или удобство, а необходимость
    Ответ написан
    Комментировать
  • Почему не подгружаются стили?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Потому что ./css/style.min.css - это бессмыслица и карго культ.
    Ссылки на локальные ресурсы должны быть абсолютными путями от корня сайта. А не вот это вот.
    То есть в данном случае надо убрать точечку.

    Ну ведь всё просто же.
    В отличие от файловой системы, где никогда заранее не знаешь, где у неё корень, с веб сайтом всё просто и понятно, корень всегда один - /
    / - корень сайта
    /css - папочка css в корне сайта
    /css/style.min.css - файл style.min.css в папочке css которая лежит в корне сайта
    Всё просто, понятно, очевидно

    Зачем вообще было писать эти точечки?
    Они начинаются, когда ты только учишься склыдывать а и б в HTML. И нет у тебя никакого веб-сервера, а есть файлик на диске. В этом случае да - без относительных путей никак не обойтись
    Но как только начинается РНР, который без веб сервера уже не работает, про все точечки в локальных ресурсах надо забыть, и писать всегда абсолютные пути от корня сайта.
    Ответ написан
    2 комментария
  • Как с помощью while вывести подсчет количества строк в одной таблице по совпадению с данными из другой?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Во-первых, зачем тут первый запрос?
    Во-вторых, кроме количества совпадений надо наверное запрашивать и сам id? Ну по логике? если мы хотим вывести id, то надо наверное это поле указать в SELECT?
    В-третьих, надо добавить группировку, GROUP BY
    В-четвёртых, если надо вывести любые значения из первой, а не только те, у которых есть записи во второй, то нужен LEFT JOIN
    Ответ написан
    Комментировать
  • Как правильно составить структуру массива?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    1. зачем getBoxData возвращает вложенный массив?
    2. зачем все последующие элементы $boxData добавляются в первый элемент, вместо того чтобы добавлять все элементы в исходно пустой массив?
    Ответ написан
  • Почему слетают стили и картинки при изменении роутера?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Ну как обычно, относительные пути в картинках.
    Пути к локальным ресурсам всегда должны представлять собой абсолютный путь от корня сайта.
    Ответ написан
    1 комментарий
  • Как правильно отправить в базу данных сразу несколько ссылок на картинки?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    То есть весь вопрос сводится к "при записи я кодирую данные c помощью json_encode, а при выводе не раскодирую, но виноваты создатели этого сайта".

    Но главные проблемы этого кода конечно не в json.
    Во-первых, этот код позволяет заливать РНР файлы, и первый же малолетний придурок этим воспользуется.
    Во-вторых, этот код пропускает SQL инъекцию, и первый же малолетний придурок этим воспользуется.
    Остальное уже мелочи.

    Но если отвечать на вопрос в целом, то да - вставлять все ссылки в одно поле это действительно неправильно.
    Плюс, в БД всегда должны храниться только сырые данные, а любое форматирование добавляться только при выводе. То есть сохранять надо только сами имена файлов.

    Но в данном случае вообще непонятно, зачем сохранять ссылки в БД.
    При заливке берётся id созданного пользователя, создаётся папка с таким именем, и в неё заливаются файлы.
    При выводе файлы читаются из этой папки и выводятся.
    Ответ написан
  • Как данный код будет выглядеть на php?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    скорее так
    foreach ($this->tests as $key => $value) {
       $this->tests[$key] = Test::clearLines($test);
    }
    Ответ написан
  • Как открыть php файл из html файла?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    так же, как и на любой другой
    Ответ написан
  • Есть ли listIterator в php?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Обычно итераторы в РНР не нужны - всё делается простейшими средствами типа foreach.
    Я так понимаю, что в данном случае нужен обычный оператор присвоения
    $this->test[] = ...
    Ответ написан
  • Почему не срабатывает php файл?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Ответ написан
    Комментировать
  • Нужно ли использовать interface?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Нет, ничего указывать не надо.
    Тут и без интерфейсов получатся отличные самолёты из соломы и палок.
    Ответ написан
  • В PHP 5.6 и MySQL Emoji отображаются как ????

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    mysql_query - это какой-то бред и анахронизм. Этой функции давно нет в языке.
    Кодировка соединения задаётся либо через mysqli_set_charset либо через DSN, в зависимости от выбранного API

    В целом,при использовании utf8mb4 всё должно работать
    Ответ написан
    Комментировать
  • Повторно присвоить новое значение в массиве?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Автора губит то, что вместо нормального кода он всё время пишет какие-то каракули.
    И можно только догадываться, по его невнятному бормотанию, что там у него на самом деле.

    Скорее всего, $all[$name] = //получение данных для name.
    И разумеется, элемент массива здесь перезаписывается.
    И надо ему что-то вроде $all[] =

    Но в целом, конечно, этот вопрос надо отправить в музей, с табличкой "как не надо задавать вопросы. "
    Ответ написан
    Комментировать
  • Как проверить строку на наличие пароля?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Мне бы хотелось получать все возможные варианты строк, ограниченных длинной пароля

    Отличная идея.
    Для пароля длиной 8 символов это будет всего лишь 208827064576 вариантов.
    Для 9 символов будет 5429503678976, но поскольку 208827064576 мы уже перебрали, то останется совсем смехота, всего 5220676614400 комбинаций.
    Можешь приступать.
    Ответ написан
    Комментировать
  • POST работает как GET, почему?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Надо проснуться, попить кофию, собраться с мыслями, и задать свой вопрос.

    Хотя нет. Всё перечисленное проделать, а потом вернуть file_get_contents() как было.
    И не воображать себе, будто curl - это просто такой оригинальный способ вызвать file_get_contents(), а все настройки волшебным образом останутся те же.
    Ответ написан
  • Как сделать разные шапки на php?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Так же, как "делаются" любые другие динамические элементы страницы на РНР: определяется, какой элемент должен быть выведен (получается из БД, вычисляется на месте, берется из списка, и т.д.) - и выводится.
    В данном случае путь к картинке с фоном берется из базы данных и выводится в соответствующем теге, как-то так
    <section  style="background-image: url(<?= htmlspecialchars($bgimage, ENT_QUOTES) ?>);">
    Ответ написан
    Комментировать
  • Как получить несколько значений из базы данных по id в одном запросе?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    $sql = $link->query('SELECT sum(quantity) FROM oc_product WHERE product_id in (8908,8909)');
    $row = $sql->fetch_row($sql);
    echo $row[0];
    Ответ написан
    4 комментария
  • Как вывести общее количество записей из базы данных?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    select count(*) as cnt from tbl_file
    Выводить обычным порядком, судя по предыдущим вопросам, работать с mysql из PHP вы умеете.
    Ответ написан
    Комментировать
  • Как менять Title у сайта каждые 30 минут?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    $titles = [
        '7:00' =>  "Название сайта one",
        '7:30' =>  "Название сайта two",
    ];
    $half_hour = date('G:i', floor(time()/1800)*1800);
    echo $titles[$half_hour] ?? "Default title";
    Ответ написан
    2 комментария