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

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

    ЗЫ: https://phpdelusions.net/articles/error_reporting#fatal
    Ответ написан
    Комментировать
  • Как спроектировать фреймворк?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Ответ написан
    Комментировать
  • Как обработать ассоциативный массив PHP и внести изменение в БД?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    учить тут надо SQL, поскольку в РНР все стандартно

    $sql = "UPDATE `list` SET `count`=greatest(count-?,0)  WHERE `id`=?";
    $stmt = $conn->prepare($sql);
    foreach($cart as $value ) {
        $stmt->bind_param("ss", $value['id'], $value['count']);
        $stmt->execute();
    }
    Ответ написан
    Комментировать
  • Как передать нужный путь к файлам на другую страницу?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Функция, конечно, ад.
    Как и ответы, которые здесь настрочат местные помогайки.

    Первое, о чем тебе надо позаботиться - это безопасность
    Чтбы не вываливать наружу содержимое любой папки на диске.
    Поэтому "как передать" зависит от того, какая структура папок
    Если совсем сложная, то ссылки на голереи хранить в БД, передавать id записи в таблице. а в cats.php доставать ссылку из базы.
    Если БД нету и это для тебя ну совсем неподъемно сложно, то передавать прямо ссылку и как-то её валидировать

    Например если главных категорий не очень много, и вложенность всегда 2

    $sections = ['tentacles','yaoi','yuri'];
    
    $parts = explode("/", $dir);
    $dir = "../img/$dir/"
    if (count($parts) <> 2 || !in_array($parts[0], $sections, true) || !is_dir($dir)) {
        return [];
    }
    и дальше уже лепить свой скандир

    в общем лучше по базе
    Ответ написан
    Комментировать
  • Как правильно написать запрос в бд?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    В вордпрессе лучше использовать его собственную пепяку, wpdb
    Но если прям так хочется собстенное соединение с БД, то при коннекте надо сказать mysqli чтобы оно сообщало тебе об ошибках, вот этой строчкой
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

    и после этого РНР тебе напишет, какая проблема у тебя в запросе.
    Ответ написан
    1 комментарий
  • Как вставить assembler код в программу на php?

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

    В общем вопрос из той серии что про FFI рассказывать явно ни малейшего смысла
    Ответ написан
    9 комментариев
  • Как переделать форму прикрепления файла?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Комментировать
  • Кто знает хорошие уроки про PHP,MVC?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Ответ написан
    Комментировать
  • Как в php 7.4 проверить является ли строка json?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Нет. Это занятие само по себе бессмысленное потому что нормальная программа всегда точно знает - с джейсоном она работает или нет, и поэтому никаких "специальных функций" нормальным программистам не нужно.
    Ответ написан
    3 комментария
  • Почему php не может подключиться к БД?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Чтобы узнать, почему не работает соединение или запрос, надо настроить РНР так чтобы он отображал ошибки, а mydsqli - чтобы оно бросало исключения.
    То есть код должен выглядеть вот так

    <?php
    // видеть все ошибки!
    ini_set('display_errors',1);
    error_reporting(E_ALL);
     // подключаем настройки
    require_once 'connect.php';
    
    // включаем режим информирования об ошибках
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    // подключаемся к серверу
    $link = mysqli_connect($host, $user, $password, $database);
    // не забываем установить кодировку, чтобы не было ошибок с кракозябрами
    $mysqli->set_charset('utf8mb4');
       
    // выполняем операции с базой данных
    $query ="SELECT * FROM foo";
    $result = mysqli_query($link, $query);
    // дальше делаем что нужно
    
    // и кстати, в большинстве случаев закрывать подключение не надо


    ЗЫ. На боевом сервере ошибки на экран выводить конечно не стоит, а их надо писать в лог (собственно, именно поэтому все эти die - это ужас). И на боевом сервере display_errors надо отключать, а log_errors наоборот - подключать.
    Если совсем не можешь найти, где у сервера висит лог ошибок, можешь задать свой собственный, с помощью функции ini_set('error_log','/путь/к/файлу');. Но только размещать его надо разумеется в папке недоступной пользователям сайта


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

    Если разобраться, то код or die("Ошибка1 " . mysqli_error($link)); очень смешной (это не к тебе претензия, никто не ожидает от тебя понимания таких тонкостей, которые не то что новички, а половина здешних "кураторов" не понимают).
    Что тут происходит?
    слово or die (которое на самом деле вообще нельзя никогда писать) пишут тогда, когда ожидают что в переменной $link будет значение false. Но если в $link будет false, то тогда её бессмысленно подставлять в mysqli_error. Именно поэтому для получения ошибки соединения в мускули есть отдельная специальная функция.

    Но как я говорил выше, применять её не следует, как и or die.
    Ответ написан
    2 комментария
  • Чем отличается этот синаксис?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Хороший вопрос.

    Этот кот будет работать только в 5 версии.
    В 7 версии в РНР появился uniform variable syntax.
    Он унифицировал обращения к любым типам переменных - объектам, функциям, массивам - так что их стало возможно приписывать друг к другу в любом порядке, $foo()['bar']()->baz.
    Но при этом, очевидно, понадобилось ввести правило очередности исполнения. Самое простое - слева направо.

    То есть что в итоге мы получаем? Сначала пхп читает $post->$attrs_arr и ждет что в $attrs_arr будет строка. Но там получается массив, и РНР начинает орать тебе об этом. но ты зачем-то выключил отображение ошибок, и ничего не видишь. Так делать нельзя. Если бы ты увидел ошибку, то мог бы при некотором минимальном навыке гугления найти решение самостоятельно. Хотя конечно зумеры, в отличие от нас старых пердунов, родившихся когда интернета ещё не было, на удивление с трудом представляют себе что такое поиск в интернете.

    Ну а решение простое - заключить переменное свойство в фигурные скобки, чтобы ПХП сначала получил элемент массива, а потом уже поставлял его в качестве имени свойства
    Ответ написан
    8 комментариев
  • Почему не записывает значение в БД?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    ё моё, ну нормальный почти у тебя код был
    оставь все как было только запрос поменяй
    $dsn = "mysql:host=$host;dbname=$db;charset=$charset";
    $opt = [
        PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::ATTR_EMULATE_PREPARES   => false,
    ];
    $pdo = new PDO($dsn, $user, $pass, $opt);
    
    $query = 'INSERT INTO `configs` (`CName`, `Username`, `Time`) VALUES (?,?,?)';
    $stmt->$pdo->prepare($query);
    $stmt->execute([$CName,$Username, $Time]);
    $id = $pdo->lastInsertId();
    Ответ написан
  • Какую книгу посоветуете по PHP?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Котеров, как обычно.
    Но зумерам, которым надо обязательно чтобы автор вприсядку танцевал и прибуатками сыпал, не зайдёт.
    Ответ написан
    1 комментарий
  • Как закодировать через http_build_query?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    НИКАК не делать.
    Либо тебе вообще не нужна эта функция, и тогда ее не использовать, либо, если нужна, то оставить скобки в покое и найти себе проблему поумнее.
    Ответ написан
    Комментировать
  • Чем заменить ReadBeanPHP?

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

    Поэтому в качестве прививки от говнокода я порекомендую сначала
    - учить устройство БД. Создавать все свои схемы руками
    - учить SQL. Писать все свои запросы руками
    - освоить работу с БД из РНР на базовом уровне, через нативный ПДО.

    После того как это все будет от зубов отскакивать, и после пары выполненных проектов будет очевидно видна некоторая избыточность и повторяемость кода - ничинать писать свой первый Table Gateway. Ну, или если совсем нипалусяися - то осваивать что-нибудь хайповое, но хотя бы не такое маргинальное, например Елоквент.
    Ответ написан
  • Защита от бесконтрольного создания картинок?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Вопрос из серии "дурная голова ногам покою не даёт".

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

    Ответы тоже, тостер-стайл: "я вообще не доктор, я сантехник, но вот моё икспертное мнение..."

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

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Несмотря на то что в вопросе немного каша, а в ответах - ад, ответ на вопрос, в общем-то, очевидный.

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

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

    Хайлоад же проекты - это из немного другой области. Тут идет откат скорее в обратном направлении. Это как с денормализацией - БД должна быть нормализована, но из соображений производительности иногда приходится денормализовывать. ПОСЛЕ того как нормализовал.
    SOLID помогает делать большие проекты управляемыми. Но когда большой проект сталкивается с высокими нагрузками, иногда приходится жертвовать принципами ради производительности. Но тут главное, опять же, не путать направление: СНАЧАЛА делаем правильный дизайн, и только потом в критических точках снижаем накал абстракции, переходим на более низкий уровень. Самый наглядный пример - ORM, когда критические запросы переписываются на чистый SQL.

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Конвертировать ошибки в исключения
    Исключение уже содержит стек вызовов, то есть в логе он будет автоматически.

    А вот класс писать не надо. Лишнее это все, баловство одно.
    Ответ написан