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

    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
    Чебуратор тега РНР
    Конвертировать ошибки в исключения
    Исключение уже содержит стек вызовов, то есть в логе он будет автоматически.

    А вот класс писать не надо. Лишнее это все, баловство одно.
    Ответ написан
  • Как удалить файл при условии, что нет одного из одноименных с другим расширением?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Вот ведь любители извращений
    foreach (glob('/dir/*.webp') as $f) {
        $filename = pathinfo($f, PATHINFO_FILENAME);
        if (count(glob('/dir/$filename.*')) == 1) {
            только один, можно удалять
        }
    }


    по уму конечно надо прочитать все файлы за раз и потом сгруппировать по имени, но от такого сложного алгоритма у бедняги ум за разум зайдет, надо его пожалеть
    Ответ написан
  • Как не дожидаться окончания file_get_contents?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    в простейшем варианте - fastcgi_finish_request(), если запросов не очень много
    если много, то только сервер очередей
    Ответ написан
    Комментировать
  • Как можно защитить XML файл от открытия любым человеком?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Не класть файл в открытый доступ.
    Отдавать скриптом, который принимает в параметре имя файла, проверяет авторизацию и отдает файл с соответствующими заголовками
    "как отдать сгенерированный РНР скриптом ХМЛ файл" в гугле можно найти чуть более чем дофига примеров
    Ответ написан
    1 комментарий