Задать вопрос
  • В чем идея и как работают шаблоны?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Идея шаблонов – держать HTML разметку отдельно и удобно.

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

    Простейший пример Twig мало чем отличается от обычного PHP:
    Шаблон hello.html.twig:
    Привет, {{ name }}!,
    и вывод в него типа
    echo $twig->render('hello.html.twig', ['name' => 'Хабр']);
    передаются имя темплейта и данные, которые там нужно подставить.
    В шаблоне обычно никаких вычислений, максимум простые циклы или условия.

    Шаблоны могут наследовать друг от друга. Например, у сайта один главный темплейт от которого наследют шаблоны страниц - в них только содержание. И далее шаблоны для разделов, секций, фрагментов.
    Ответ написан
    Комментировать
  • Сложно ли подделать IP апдрес при запросе $_SERVER['REMOTE_ADDR']?

    Aetae
    @Aetae
    Тлен
    Во-первых: ip для этого не стоит использовать вообще, это вещь перементивая.
    Во-вторых: в теории REMOTE_ADDR не подделать, но то в теории, потому что всякая кака на твоей стороне любит его подменять для удобства. Например нередко можно встретить глубоко в чужом коде подобную дыру:
    if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { 
    $xffaddrs = explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']); 
    $_SERVER['REMOTE_ADDR'] = $xffaddrs[0]; 
    }
    Ответ написан
    8 комментариев
  • Как реализовать в MySQL топики форума, которые участвуют сразу в нескольких разделах?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Мне почему-то кажется, что 'поиск Fulltext' должен подойти для такой задачи,
    Вам кажется. Кроме того что фуллтекст вообще не для этого, он еще и работать будет относительно медленно, так как вариативность значений будет низкая. Про "удобство" работы со строкой вместо нормального индекса вообще молчу.

    Нужно, чтобы можно было быстро находить все темы (топики) для одного заданного раздела (искать тему, которая относится сразу к двум и более разделам не нужно).
    м2м, это надежно и быстро, достаточно знать индекс раздела.

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

    @mkone112
    Начинающий питонист.
    Если 80% предложений не включает работу по тк - возможно ты делаешь что-то не так. Судя по твоим вопросам - ты мечешься из стороны в сторону с нулевым выхлопом. То php, то node.js, потом вордпресс, потом vue, сисадмин, девопс. Просто выбери уже направление, освой его и получай нормальные предложения без вот этого вот.
    Ответ написан
    3 комментария
  • Не получается динамически создать объект через $name = 'ClassName' и потом new $name() - что делать?

    @romicohen Автор вопроса
    Системный Архитектор
    Решение таки нашел:

    $name = 'My\\Name\\Space\\'.'ClassName';
    new $name();


    так работает.

    Но все равно, не очень понятно, почему

    new ClassName();

    без полного имени работает, а это - не работает.

    это что-то связанное с очередностью интерпретации да? кто-нибудь если понимает в подобном - расскажите в двух словах пожалуйста :)
    Ответ написан
    3 комментария
  • Как в foreach вывести от дешёвых к дорогим?

    Stalker_RED
    @Stalker_RED
    Если ваши $products были перед этим выбраны из БД, то проще всего добавить в запрос order by price desc и они сразу будут отсортированы.
    Ответ написан
    Комментировать
  • Как в foreach вывести от дешёвых к дорогим?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Предварительно отсортировать через usort.
    Ответ написан
    Комментировать
  • Почему number_format возвращает string?

    Как правильно сделать ?

    Float отдельно, удобочитаемый вид отдельно.
    Ответ написан
    Комментировать
  • Как сделать бэкап базы данных mysql с помощью php?

    rozhnev
    @rozhnev Куратор тега PHP
    Fullstack programmer, DBA, медленно, дорого
    Для следует указать путь к исполняемому файлу:
    $path = 'C:\path\to\mysqldump\';
    exec("{$path}mysqldump --user={$user} --password={$pass} --host={$host} {$database} --result-file={$dir} 2>&1", $output);
    Ответ написан
    Комментировать
  • Как можно ускорить работу Exception?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    на расходы конкретно на исключения для 15 000 вызовов (на каждую строку по 1 исключению) будут около 0.01 секунды (сотая секунды крч) для моего локального компа (много, но и данных много)
    Пруф

    618e769ee759d433078044.png


    $error = $this->handle($json);
    if ($error === '') {
    // логируем что все ок
    } else {
    // логируем ошибку
    }

    Тут заменено не только это, а заменено что-то внутри в handle(), тк не летит исключение

    возможно в описании задачи вы не указали, что валидируете возможно через что-то симфовое, не отключив finger cross, который собирает весь стек-трейс или еще что-то... кажется, не хватает контекста для понимания проблемы

    в 15 тыс новых объектов проблемы может не быть. Такие задержки по времени выглядят как проблема на уровне логирования исключений, тк I/O операции над файлом долгие, а сбор трейса исключений и его запись — долгие потенциально.
    Уйдя от исключений вы возможно ушли и от логирования исключений.
    Ответ написан
  • Что такое MVC и как его использовать?

    @matios
    Technical Team Lead
    Советую почитать данную статью на хабре Реализация MVC паттерна на примере создания сайта-.... Там очень хорошо описано с примерами кода. Но следует понимать, что это совсем сырая версия которая описывает сами принципы. Современные фреймворки куда сложнее и универсальнее.
    Ответ написан
    Комментировать
  • Как улучшить код?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    Для начала можно удалить весь DocBlock. Во-первых, он не добавляет ровным счётом никакой информации, а во-вторых, ещё и не все параметры содержит.

    Название returnFullOrderInfo можно переименовать в makeFullOrderInfoResponse - в названиях функций слово return не несёт ценности.

    Метод fullInfo тоже можно переименовать в (to|make|get)FullInfo для того, чтобы по названию было понятно, что метод делает.

    Метод responseSuccess тоже криво назван.

    Почему у параметра $warning не указан тип?

    Если $warning связан непосредственно с заказом, то его имеет смысл передавать в качестве аргумента в fullInfo, чтобы инкапсулировать и не менять объект снаружи. Если же не связан, то формат ответа лучше поменять на ['data' => $orderInfo, 'warning' => $warning].
    Ответ написан
    Комментировать
  • Возможно ли win10 сделать приоритет Wi-Fi вместо Ethernet?

    @Akina
    Сетевой и системный админ, SQL-программист.
    при подключении провода подключение Wi-Fi автоматически гаснет.

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

    Железка имеет DHCP, сразу выдаёт адрес

    Не только адрес, но и ещё горсть параметров, включая шлюз по умолчанию. При этом уже имеющийся немедленно получает увеличение метрики и перестаёт использоваться.

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

    Windows 10 игнорирует метрики, в зарубежных гайдах говорят "Перестала уважать метрики". Т.е. нет никакой разницы, если поставить "999" метрику на Ethernet и "1" на Wi-Fi

    Явная и откровенная глупость. Абсолютное непонимание того, что есть метрика интерфейса и как она влияет на маршрутизацию.
    Ответ написан
    5 комментариев
  • Поставить индексы на каждое поле?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Если я на каждый столбец, который используется в WHERE добавлю одиночные индексы, не ухудшит ли это производительность?

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

    пока не понятно, какие индексы нужны, а какие нет.

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

    Adamos
    @Adamos
    Дурь это все. Максимум, что вы можете контролировать - это пребывание пользователя на сайте.
    А когда айфон спит, но вкладка открыта, или когда юзер просто сбросил браузер (например, зависший от нехватки памяти) - ни хрена вы не зафиксируете.
    Ответ написан
    Комментировать
  • Как правильно организовать получение списка данных с дополнительным полем - количество?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    А что мешает после получения всех элементов просто взять размер полученного массива?
    Ответ написан
    6 комментариев
  • Какая разница между пакетами, зависимостями, extensions, модулями?

    glaphire
    @glaphire Куратор тега PHP
    PHP developer
    Обычно это одно и то же в контексте дополнений к php или библиотек в ОС, от которых зависят эти дополнения.
    Тут на реддите был интересный топик, который раскрывает нюансы
    What's a difference between PHP extension and PHP ...
    Ответ написан
    Комментировать
  • Как получить список из массива без дублей?

    rozhnev
    @rozhnev Куратор тега PHP
    Fullstack programmer, DBA, медленно, дорого
    CREATE TABLE categories (
    	id int auto_increment primary key,
      	name varchar(64)
    );


    <?php
    function getRightCategories($db)
    {
    	$result = $db->query('SELECT id, name FROM categories');
    	return $result->fetchAll(PDO::FETCH_KEY_PAIR);
    }
    
    $categories = getRightCategories($pdo);
    
    print_r($categories);


    Test PDO fetch online
    Ответ написан
    Комментировать