• Как оформить данный CURL запрос на PHP?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Комментировать
  • Какой стек технологий лучше использовать для корпоративного сайта и с чего начинать разработку?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    У нас есть дизайн сайта в фигме. Это корпоративный сайт.
    Так все таки сайт или дизайн в фигме?

    Помимо самого сайта, у нас будет также самописная cms — для того, чтобы добавлять статьи, проекты и редактировать некоторый контент на сайте.
    А кто будет самописать? И почему готовые системы не подходят?

    Дизайн cms тоже готов.
    Серьезный подход.

    сделали даже визуализацию БД через mind map.
    Оу, у вас нет разработчика, но зато нашелся датабэйс архитект, прикольно...

    Соответственно, у нас почти весь контент на сайте создается через cms (под контентом мы имеем в виду фотографии/обложки кейсов и статей).
    Из текста создается впечатление что ваш проект уже что-то делает, кроме как рисует фигмовые формочки... Это вводит в заблуждение.

    1. С чего нам начинать разработку сайта, если большая часть контента создается через cms? С бэкенда или фронтенда?
    Хинт: 99% сайтов создают практически весь контент из админки. Любой готовый цмс движок (вордпресс, октобер, да даже друпал) скорее всего полностью покроет ваши требования, кроме разве что дизайна админки (я хз можно ли там что-то кастомизировать малой кровью).

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

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

    Если у вас есть ОЧЕНЬ специфичные штуки, которые вы не перечислили в вопросе - пишите, возможно под них действительно нужно писать самостоятельный продукт.
    Ответ написан
    Комментировать
  • Зависит ли скорость записи в БД от количества в ней записей?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    1) Да, при условии наличия индексов помимо примари кей.
    2) Примерно то же самое - при наличии внешних ключей в эти таблицы запись будет идти медленнее с ростом количества записей и соответственно перестройки индексов.
    3) См. п. 2.
    Ответ написан
    4 комментария
  • Корректно ли составлен запрос?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Мне необходимо только узнать есть ли такой заказчик с такими данными.

    1) Оформляйте запрос строками, так будет гораздо проще и вам, и другим разработчикам понять что вы пишете и как оно работает:
    SELECT * 
    FROM `orders2022` 
    WHERE LOWER(`surname`) LIKE CONCAT('%', ?, '%') 
    AND LOWER(`name`) LIKE CONCAT('%', ?, '%') 
    AND LOWER(`fathername`) LIKE CONCAT('%', ?, '%')

    2) Синтаксис верный, но если вам важно найти "хоть одно совпадение", лучше использовать LIMIT 1, это остановит базу в поиске всех вхождений, то есть перебора ВСЕЙ таблицы вместо выхода по первому вхождению. Кроме того, CONCAT('%', ?, '%') можно использовать если вместо ? будет SQL выражение (например каой-то селект), в данном случае это просто трата ресурса процессора. Просто добавьте % в начале и конце подставляемой переменной.
    3) Неплохо давать более четкое описание проблемы, чтобы другим не пришлось гадать о чем код, так как никто кроме вас в контекст задачи не погружен.
    Ответ написан
    Комментировать
  • Почему браузер вместо того, чтобы скачать файл PDF, патается его отобразить?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    cajka-d, 1)
    Вывода перед заголовками тоже нет, если такое есть, то laravel сразу бы ошибку выдал.
    Это варнинг, а не ошибка, так что вполне может игнорироваться, в зависимости от настроек.

    2) Вроде в ларе респонс должен указывать заголовки отдельно:
    return response($content, 200)
                ->withHeaders([
                    'Content-Type' => $type,
                    'X-Header-One' => 'Header Value',
                    'X-Header-Two' => 'Header Value',
                ]);


    3) Попробуйте завести вручную:
    В контроллере вместо return $pdf->download($filename); сделайте руками вывод заголовков и ечо содержимого пдф, затем ексит. Если сработает - значит респонс дополнительно обрабатывается после ретурна из контроллера...
    Ответ написан
    Комментировать
  • Как спроектировать базу данных для мультиязычного сайта?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    1) Перевести проект на какой-то адекватный движок по типу лары,
    2) использовать готовые пакеты мультиязычности, протестированные, с прозрачной логикой и качественной реализацией.

    Как вариант - посмотреть в коде готовых мультиланг пакетов как сделать нормально.
    Ответ написан
  • Fatal error: Uncaught TypeError: Cannot access offset of type string on string in /home/m/mcphoenix/mcphoenix.beget.tech/public_html/engine/inc/inclu?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    Очевидно $config содержит строку. Так как это DLE, неудивительно что код вообще не айс...
    Ответ написан
    Комментировать
  • Как правильно сделать отправку с проверкой условий?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Код ничего не делает, чего вы от него ждете? Либо форму добавьте, либо какой-то код, отправляющий чекбоксы на бэкенд аяксом, например...
    Ответ написан
    Комментировать
  • Как избавляться от ненужных записей в бд?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    В дальнейшем это повысит нагрузку на бд при поиске записей.
    Когда записей будет под миллион, запустите 1 раз удаление старых неактивированных аккаунтов и выиграете еще аж 500 (а может даже 5тыщь!) записей, это сильно поможет...
    Ответ написан
    Комментировать
  • Как вывести нужную запись по id из бд?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    <!--ССЫЛКА ПЕРЕХОДА НА ЭТОТ ФАЙЛ -->
    <a href="?content=single_city.php&city=<?=$myrow["id"];?>">
    где тут ссылка на файл? у вас ссылка на текущую страницу, в ваше случае - корень сайта/проекта (читай index.php), куда передаются GET параметры. Ничего удивительного что выводится та же страница.
    Ответ написан
  • Оптимизация сайта под высокие нагрузки (php,nginx, mysql). Какие критерии доработок? Что необходимо сделать в первую очередь?

    ThunderCat
    @ThunderCat Куратор тега Веб-разработка
    {PHP, MySql, HTML, JS, CSS} developer
    Как уже заметили коллеги - первое что нужно выяснить - что тормозит.

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

    Что конкретно надо делать:
    1) Взять за шкирку самого разбирающегося в коде (если таковой существует в проекте), и дать задание описать базовый стек вызовов, если это какой-то самопис, или сразу расставить код замера времени с метками в случае понятной архитектуры. Что то типа такого(класс - древний костыль, но работает, так что матом не ругаться):
    Class Timer.php:
    class Timer {
    
        static $start;
        static $end;
        static $marks = [];
        static $formats = [1=>''];
    
        static function init(){
            if(empty(self::$start)) self::$start = microtime(true);
        }
    
        static function setMark($markName = ''){
            $time = microtime(true);
            if($markName == '')$markName = $time;
            $data['name'] = $markName;
            $data['time'] = $time;
            $res['time'] = $time;
            if(count(self::$marks) > 1)$res['diff'] = $time - self::$marks[count(self::$marks)-2]['time'];
            else $res['diff'] = 0;
            $data['diff'] = $res['diff'];
            self::$marks[] = $data;
            return $res;
        }
    
        static function timeFormat($number,$format = ''){
            if(empty($format)) $format = 3;
            return number_format ($number,$format,'.','');
        }
    
        static function report(){
            self::$end = microtime(true);
            self::$marks['start'] = self::$start;
            self::$marks['end'] = self::$end;
            self::$marks['all_time'] =  self::$end - self::$start;
            if(!empty(self::$marks)) return self::$marks;
        }
    }


    In code:
    \Timer::init()
    //some code block 1
    \Timer::setMark('after block 1');
    //some code block 2
    \Timer::setMark('after block 2');
    ...
    //some code block n
    \Timer::setMark('after block n');
    //near end of code 
    \Timer::setMark('end');
    var_dump(\Timer::report());
    exit;

    2) Смотрите на блоки жрущие время, делите их до атомарных операций путем деления блоков пополам таймерами.
    3) Смотрите что там происходит - оптимизируете*. И так по кругу.
    4) Профит.

    * Оптимизация
    Запросы:
    1) Смотреть план запроса (use explain, Luke!).
    2) Расставить индексы которых явно не хватает
    3) Смотреть не вызывается ли 50 запросов в цикле? Если да - выписать пенделя писавшему, затем переписать в 1 запрос с нормальным джоином.

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

    Что нужно сделать обязательно кроме тестов и как тогда лучше спрашивать с разработчиков, если они предлагают размытые предложения? Хочется понять в какую сторону копать
    Бить палкой не вариант? Тогда берите других, эти испортились. Если разработчик не знает как выявить узкие места кода - нахрена он нужен? Код написать сегодня любой чат может... Ну, на крайняк дайте им вышеприведенный вариант решения проблемы...

    PS: Кстати, сервер может банально не выдерживать наплыв сетевых соединений, пните адимна, пусть глянет логи.

    PPS:
    достаточно 2000-4000 человек, заходящих в течение 20 минут на сайт
    это равномерные 3-4 рпс, ну или пусть в пике 50 рпс, должно держать даже на несложной конфигурации... Копайте код.
    Ответ написан
    Комментировать
  • Для чего Laravel-разработчики стремятся создать избыточные API ресурсы?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    Ведь если нет никакой дополнительной обработки, то ведь можно просто сделать $model->toArray(), не?
    Во первых - в 90% случаев модель не достается "голой", а тянет с собой связанные объекты, например роли или аватарки или еще что-то. Они явно лишние в выдаче.
    Во вторых - не все поля одинаково полезны, скорее всего часть полей не должны попадать в выдачу, например хеш пароля или ключ авторизации...
    Ответ написан
    Комментировать
  • Если ли PHP-библиотека для конвертации HTML c CSS Grid в PDF?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Принципиально у этой проблемы всего 2 варианта решения:
    1) как уже написали - хедлесс хром на бэкенде - максимально красиво и точно, единственный минус - собсно сам софт, который кроме того что сам по себе жрет проц и память, так еще и не везде есть возможность поставить свой софт на сервер.
    2) Рендер на клиенте через html2pdf, который тоже неплохо справляется, но естественно тоже не без проблем. Во первых - готовый пдф будет не в виде документа с текстом и прочими плюшками, а тупо картинкой. Во вторых - все минусы решений на клиенте в ассортименте: нестандартные шрифты, настройки под "улучшайзинг" визуала по типу изменения масштаба странички, увеличение/уменьшение шрифтов и прочие мелкие радости жизни...

    Короче, выбор между хреновым и плохим решением...
    Ответ написан
    Комментировать
  • Как сделать также фото с текстом по центру?

    ThunderCat
    @ThunderCat Куратор тега CSS
    {PHP, MySql, HTML, JS, CSS} developer
    align-items: center;
    Ответ написан
    Комментировать
  • Как можно оптимизировать генерацию и загрузку боьшого html?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Вопросы такие: какие есть способы ускорить загрузку страницы?
    Во первых - выяснить что тормозит: бэкенд или фронтенд. Сделать профайлинг бэкенда, сделать анализ загрузки фронта. Соответственно сначала понять что тормозит.

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

    И почему на смартфоне в мобильном safari та же самая страница грузится за пару секунд?
    Опять же, вопрос скорее к вам чем к кому-либо еще. Возможно кеширование, которое на мобильных браузерах практически всегда более агрессивное. Возможно вы просто не видите как тормозит загрузка, например в силу другого метода рендеринга, который сразу при получении данных выводит все что возможно, в то время как на стационаре рендеринг идет только после загрузки тега целиком. Достаточно например быстро промотать на сафари вниз при загрузке, чтобы увидеть что загрузилось далеко не все... А возможно в мобильной версии отображается сильно меньше элементов...

    Можно ли этот эффект повторить на десктопе?
    Если есть что повторять... Можно попробовать сделать таблицу не цельной, а разбить на несколько таблиц, по 100-300 строк. Или еще адкеватнее - сверстать дивами.

    Как вариант - лэзилоад, по мере прокруки страницы подгружать новые данные по мере необходимости, что сильно снизит как трафик в целом, так и тормоза рендера.

    PS:
    я тоже склоняюсь к неэффективной вёрстке. Если я эту вёрстку буду генерировать js’ом, процесс ускорится?
    Скорее всего, как я уже написал, скорости не прибавится. Вообще что мешает проверить эффективность верстки? Тупо выведите все строки дивами, без всяких разделителей, одна строка - один див с данными, разделенными "|" например, и посмотрите на разницу.
    Ответ написан
    Комментировать
  • Как мне настроить .htaccess?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    добавить файлы статики в исключения. Хотя по идее у вас и так перенаправляться будут только отсутствующие файлы и папки...
    RewriteCond %{REQUEST_URI} !\.(css|jpg|gif|png|zip|rar|doc|xls|js|tif|tiff|docx|xlsx|ico)$
    RewriteRule ^(.*)$ index.php [L,QSA]
    Ответ написан
    3 комментария
  • Можно ли делать запрос к промежуточной таблице многие-ко-многим для извлечения конкретной информации?

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    Можем ли мы сделать запрос к БД и извлечь из промежуточной таблицы (book_author) информацию по конкретной книге?
    Из "промежуточной" можно извлечь только связи, она для этого и нужна.

    Т.е. у нас для работы есть только информация о книге и теперь нужно извлечь информацию о её авторе (авторах).
    В чем вопрос? Как сделать джоин с 3 таблицами? Так же как с двумя, только с тремя.

    Приемлемо ли вообще делать такие запросы к промежуточным таблицам?
    Какие - "такие"? У вас вообще ни одного запроса не написано.
    Ответ написан
    7 комментариев
  • Есть ли библиотека OpenGL для PHP?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Короткий ответ - нет.
    Так-то создать что-то подобное под пых особо не сложно, ну, если есть соответствующие знания и исходники на сях. Чуток правок, компилим в либу пхп, подключаем. Но смысла особо не вижу, проще запустить какую-то готовую утилиту из cli, как например при работе с ffmpeg.
    Ответ написан
    1 комментарий
  • Как ускорить процесс загрузки файлов в PHP?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Скорость канала на сервере — 200 Мбит/с
    Вангую что это скорость на выход, на вход будет совершенно другая скорость, не указанная в рекламном буклете, или написанная где-то под звездочкой оооочень мелким шрифтом.
    Есть вероятность что в вебсервере стоит ограничение на скорость загрузки на клиента, но это можно выяснить и через просмотр конфигов, если таковые доступны.

    Что делать?
    1) Пнуть провайдера и спросить про скорость аплоуда.
    2) Если молчат - проверить самостоятельно, например замерить скорость загрузки файла курлом.
    3) Проверить загрузку через фтп/сфтп
    4) Много думать, ругаться с провайдером
    5) Профит
    Ответ написан
    Комментировать
  • Как вызвать страницу другого сайта и выполнить на ней действие?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Коротко: Боты не используют браузер (в привычном понимании), так что идея дебиль...глупая.

    Развернутый ответ включил бы в себя курс по веб разработке и базам теории работы с хттп, основам взаимодействия клиента с сервером и понятие межсерверных скриптов. Так что как-нибудь сам...
    Ответ написан
    Комментировать