Задать вопрос
Профиль пользователя заблокирован сроком с 10 апреля 2022 г. и навсегда по причине: систематические нарушения правил сервиса
Ответы пользователя по тегу PHP
  • Можно ли сохранить соединение к zip архиву между запросами?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Очередной вопрос из серии "можно ли пить воду носом, потому что я залепил себе рот скотчем. отлепить скотч не предлагать".

    Распаковать архив и не маяться дурью
    Ответ написан
    2 комментария
  • Как выполнить задачу через 10 минут?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    ничего не надо выполнять
    надо понять наконец, как работает база данных.

    Записывать надо только время бронирования.
    Если разница междутекущим временем и временем бронирования меньше 10 минут, то статус забронирована. иначе - новая.
    Ответ написан
    2 комментария
  • Где научиться/почитать про общие темы backend?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Купи книжку Котерова РНР7.
    Зумеры от нее воют потому что (там нету видео, а объем текста больше полутора строчек они воспринимать не в состоянии) про собственно РНР там начинается примерно с середины. Как раз потому что сначала там даются именно базовые понятия, без которых нельзя освоить веб-программирование. В том числе что такое НТТР и как оно работает.
    Ответ написан
    1 комментарий
  • Разный хэш password_verify и password_hash?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Не поверишь - в этом и есть весь смысл password_hash - чтобы для одного и того же пароля всегда генерировался разный хэш.

    Чтобы когда злобный хакир вася скачал твою базу, он не мог тупо сравнить ее с уже имеющейся базой соответствия хэшей и паролей.
    Ответ написан
    Комментировать
  • Как ускорить импорт CSV файла с 300к записей?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    если файл простой, поля без кавычек и переводов строк, то читай fgets/explode
    будет быстрее в 40 раз чем fgetcsv

    плюс весь процесс заключить в транзакцию. тоже раз в 70 должно ускорить запись в базу

    Но вообще конечно надо профилировать сначала. То есть смотреть, какая часть скрипта занимает сколько времени. чтобы не тыкать пальцем в небо.

    Поэтому
    1. Всё поставить на домашнем компе.
    2. добавить перед циклом $time = time(); а после цикла - echo time() - $time;
    3. Сначала закомментировать всю работу с базой - то есть оставить только чтение из файла, и посмотреть сколько оно занимает
    4. Раскомментировать операторы чтения из БД, и вычесть из результата время на чтение файла - получим сколько времени занимает чтение
    5. Раскомментировать остальное и замерить полное выполнение скрипта, с записью в БД.

    С этими цифрами уже идти сюда.
    И задавать осмысленный вопрос, "как мне ускорить такую-то операцию", а не "как мне прикрутить кривые костыли к моему кривому коду"
    Ответ написан
    7 комментариев
  • Возможно ли корректировать работу метода в зависимости от объекта?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Вообще-то корректировка метода в зависимости от класса называется наследованием.
    Но судя по описанию задачи, она решается тупо зданием имени таблицы как свойства класса.
    Ответ написан
    Комментировать
  • Как на php создать систему входящих сообщений?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    где можно хранить такое

    в базе данных

    и отображать новые сообщения?

    в браузере

    мне такая система кажется жутко геморной и ресурсозатратной, есть другие выходы?

    Если тебе такая система кажется слишком сложной, то попробуй свои силы в чем-то другом. Поучись выводить текст в браузер, или там делать запросы в базу данных.
    Со временем у тебя наберется достаточно опыта, чтобы сделать систему входящих сообщений

    Сегодня, похоже, день гениального вопроса. один другого краше..
    Ответ написан
  • Расходуются ли ресурсы на try catch?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Закономерный вопрос.
    Не научившись толком отличать 0 от false, и не научившись правильно писать elseif, каждый нуб в обязательном порядке озабочивается Вселенской Проблемой Производительности.
    "Как же так" - проснувшись одним прекрасным утром думает он - "Как только мой сайт достигнет пиковой нагрузки два посетителя в час, то начнутся стрррашные проблемы с производительностью! И надо срочно, забыв все на свете и теряя на ходу тапки, кидаться их решать!!!1111"
    Дальше выбирается любой рандомный оператор и появляется ВОПРОС: "А не слишком ли медленно ли он выполняется?!"

    И что характерно, чаще всего, как и сейчас, сам по себе оператор является бессмысленным, и вопрос должен быть не "не слишком ли он медленный?", а "на кой он вообще здесь сдался?"

    Наличие операторов в коде должно быть продиктовано не пубертатными фантазиями про "потребление ресурсов", а алгоритмом. Где оператор на своем месте - там он и должен стоять.
    В данном случае никакой трай с кетчем тут сто лет в обед не сдался, поэтому просто убрать его совсем. И всё сразу начнет летать, конечно же.

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

    Идет мент. Смотрит - фонарь стоит, под фонарем лужа, в луже мужик сидит.
    - Чё здесь делаешь?
    - Да вот, часы потерял. теперь ищу.
    Ну, мент думает - дай помогу. Искал-искал, весь перемазался - нету часов.
    - Слушай, мужик. Нету тут никаких часов!
    - Да я знаю. Я их вон там, возле забора потерял.
    - А ЧЕ ТЫ ИХ ЗДЕСЬ ИЩЕШЬ???
    - А тут светлее!


    То есть вопрос тут такой же - ставить трай кетч не там где нужно по логике, а тем где "быстрее"!
    Ответ написан
  • Где вы учите/ли PHP?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Я могу сказать, где точно учить не надо
    руселлер и прочие видеокурсы. это реальный ад
    какой-то дятел на ютубе, который толкает RedBean - это полная жесть. новичкам этот редбин ни к чему, им надо основы учить, а основ он не даёт, его курсы для тех кто уже знает РНР и SQL. Но фокус в том что тем кто знает, его курсы даром не сдались, а новички из ничего вообще ничего не выносят, но потом со слезами и соплями пытаются что-то ваять и у них вообще ничего не выходит.
    otus . ru - я тут недавно увидел на их сайте пример кода, и чуть не поседел. Долго искал подпись что это коллекция примеров того как не надо писать, но это они всерьёз.
    твое коде муму сейчас посмотрел - написано такими же макаками на материале прошлого века. Если будешь искать работу то тебя даже на порог не пустят с таким кодом.
    В общем не знаю. скрепя сердце могу посоветовать хтмлакадемию, но там во-первых платно, а во-вторых материал тоже местами проседает. Но хотя бы менторы вроде нормальные, а не какая-то школота "с вконтакте".

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    В файле auth.php
    Ответ написан
    Комментировать
  • Правильно ли я подключила Doctrine?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Во-первых, подключена доктрина неправильно.
    Не надо было создавать новую папку и новый композер джейсон - в корне проекта уже есть файлы композера, надо было редактировать их
    а лучше без всякого редактирования - просто composer require doctrine/orm

    Во-вторых, касательно ошибки. Я сам доктрину никогда не ставил - всегда пользовался уже готовой в составе симфони - но погуглив слово createAnnotationMetadataConfiguration ясно увидел что в первом параметре передается параметр
    $paths = array("/path/to/entity-files");
    что переводится как путь к папке с сущностями. А не какое-то магическое заклинание __DIR__."/src", которое по всей видимости должно означать "догадайся какой путь тут нужен и подставь само".
    К сожалению, заклинания в программировании не работают и надо передавать существующий путь. В данном случае к папке, в которой лежат User.php, Admin.php и прочее
    Ответ написан
    Комментировать
  • Где расположить шаблоны модуля что ли?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    куда тебе с шаблонами, если ты 0 от false еще не научился отличать.

    а так-то вопрос конечно очень сложный, делать ли отдельную папочку, или нет
    надо привлекать сетевое собщество, самому эту проблему никак не решить
    Ответ написан
    1 комментарий
  • Попинайте 2. Удалось ли исправить устаревший код, который забраковал работодатель?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    По сравнению с прошлым авриантом - небо и земля.
    В целом этот код лучше, чем 99.9% того что пишут на тостере. No kidding.

    Улучшить можно только по мелочи.
    as Place в неймспесах лишнее. as нужно если ты другое имя даешь

    Рекомендую перейти с bindParam на передачу массива в execute.
    Так получится убрать дублирование кода в getPlaces(). Добавляя условие в запрос тут же добавляешь жлемент в массив. потом тупо скармливаешь этот массив execute(). Пример можно посмотреть здесь

    если имена полей совпадают с имнами свойств класса, то вместо
    while ($row = $stmt->fetch()) {
                $place = new Place();
                $place->setPlaceID($row["placeID"]);
                $place->setTypeID($row["typeID"]);
                $place->setName($row["name"]);
                $place->setTansliterated($row["tansliterated"]);
                $place->setCountryID($row["countryID"]);
                $place->setDescription($row["description"]);
                $places[] = $place;
    }

    можно написать
    $places = $stmt->fetchAll(PDO::FETCH_CLASS, 'Place');

    Но вообще это не очень гибко и лучше уже начинать мигрировать в сторону ORM

    кстати, по ридми
    в https://phptherightway.com/ написано Use the Current Stable Version (7.4)
    PSR-4 это не стандарт написания кода

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    потому что надо смотреть в логе веб-сервера, какая именно произошла ошибка
    Ответ написан
  • PDO::FETCH_FUNC или как получить имена параметров, переданных в замыкание?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Насколько я знаю - напрямую нельзя.
    Так что только паллиативы, например добавить к запросу , inet_ntoa(ipv4_long) as ipv4

    В принципе, никто особо с этими режимими не парится - у всех все равно ОРМы, в которых такие преобразования - штатная функциональность
    Ответ написан
  • Как запретить слать запросы, если нажали на определенную кнопку в течение какого то времени?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Судя по тому, как вопрос сформулирован - то есть без понимания того, как работает веб-сайт, то самое простое решение - это тупо заблокировать кнопку.

    Нормальным же решением будет использование очереди.
    Нажатие на кнопку помещает задачу в очередь, причем сначала проверяет - есть ли такое задание. Если есть - возвращает ошибку, "задание уже выполняется".
    Ответ написан
    Комментировать
  • В чем разница между dependency injection и методом, который возвращает тип класса?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    В чем разница между поехать в отпуск и футболом?
    И в том и в другом случае мы будем носить обувь.
    Вот пример: в холодильник можно поставить пиво, а по карточке можно снять деньги в банкомате.

    Ты, во-первых, не понимаешь что такое dependency injection, а во-вторых - что делает твой код.

    Если отбросить все умные и красивые слова которые ты тут наскреб по сусекам, то оба твоих примера - про type hinting. Только в первом кусочеке кода мы просим интерпретатор проверять входящий параметр, а во втором - возвращаемое значение.
    Type hinting двольно размытый термин, мне больше нравится "контроль типов", который используется в документации. Поскльку в данном случае это не "подсказка", а строгий контроль: скрипт упадёт с ошибкой если в первом примере в метод придет что-то отличное от класса реализующего интерфейс Foo, а во втором - если метод вернет что-то отличное от такого класса.

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

    При этом dependency injection вообще не имеет никакого отношения ни к твоим примерам, ни к контролю типов. Внедрение зависимости относится к классам, а не методам. И означает, что если твой класс использует в работе какие-то инструменты, то он берет их не из воздуха - из всяких жлобал, синглетонов, контейнеров, или клепает прямо на месте - а явно получает при создании в виде параметров конструктора.
    Внедрение зависимостей следует использовать, чтобы твой код было легче изменять и поддерживать.
    Ответ написан
    6 комментариев
  • Писать свой автозагрузчик или можно использовать из composer?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    > Знакомлюсь с темой автозагрузки классов, пока не очень понятно.

    Надо написать свой, тогда станет понятнее.

    а дальше просто:
    если в проекте используется композер, то разумеется использовать его автозагрузку
    если не используется, то тащить композер только ради автозагрузки как-то глупо
    Ответ написан
    8 комментариев
  • Как указать интервал дат в SQL из GET?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    конечно за такой ответ я буду гореть в аду, но лучше это сделаю я, чем какой-нибудь подлец
    данные из query string лежат в массиве $_GET
    интервал в SQL делается просто, оператором BETWEEN
    причем к первой дате прибавляется 00:00:00, а ко второй 23:59:59
    функции mysql_query в РНР уже много лет как нет
    но если уж приходится копаться в какой-то доисторическоом гэ
    $begin = addslashes($_GET['begin']. ' 00:00:00');
    $end = addslashes($_GET['end']. ' 23:59:59');
    $banid = (int)$banid;
    $sql = "SELECT * FROM `betaintranet`.`ad_stat` WHERE `ban_id` = $banid AND `datetime` BETWEEN '$begin' AND '$end'";

    но меня конечно аж передергивает от этого говнокода
    утешает только то что местные помогайки напишут еще хуже

    в нормальном мире этот код выглядит так

    $begin = $_GET['begin']. ' 00:00:00';
    $end = $_GET['end']. ' 23:59:59';
    $sql = "SELECT * FROM `betaintranet`.`ad_stat` WHERE `ban_id` = ? AND `datetime` BETWEEN ? AND ?";
    $stmt = $pdo->prepare($sql);
    $stmt->execute([$banid, $begin, $end]);

    Ответ написан
  • Как исправить логическую ошибку в использовании флагов?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Присвой переменной $string либо какое-то значение 2, и выполни свои условия.
    Ответ написан
    Комментировать