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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    НЕ СЛЕДУЕТ вообще заниматься такими вещами, как включить файл в функции. кроме совсем редких специальных случаев. Файл надо прочитать отдельно, и потом передать его содержимое в функцию в качестве параметра.

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

    поэтому данный код переписать так

    class ClassName 
    {
        protected $config;
        public function __construct($config)
        {
            $this->config = $config;
        }
        public function FunctionName()
        {
        }
    }
    $config = require __DIR__."../config.php";
    $obj = new ClassName($config);
    $obj->FunctionName();
    Ответ написан
    Комментировать
  • Как более производительней вносить и выводить из базы данных?

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Я остановлюсь на одном аспекте этого кода, но совершенно анекдотическом.

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

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

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

    Этот твой код выглядит так, как будто тебя кто-то заставил выучить правило - "любой блок кода надо завернуть в try catch!" Причём доходит до анекдота - если уж совсем не знаешь, что делать внутри catch... то тупо делаешь throw. Зачем тогда вообще делать try? "А шоб було!".

    Вот взять самую первую проверку, ! file_exists($fileName). Если её выкинуть, то при попытке открыть несуществующий файл ты получишь подробное сообщение - КАКОЙ файл пытаешься открыть, и ПОЧЕМУ конкретно это не получилось. То есть сообщение об ошибке УЖЕ есть, и в миллион раз информативнее. И какой смысл повсюду втыкать file_exists - ЗАГАДКА. Загадка почище тайны египетских пирамид. Там хотя бы понятно, зачем их городили.

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

    Самое забавное, что все писатели, которые старательно выводят "Error saving language", совершенно не представляют себе - для кого они это делают. Для пользователя? Если он даже и увидит это сообщение (за что надо отдельно по рукам бить), то он и так знает, что проблема с сохранением языка - он этим и занимался. Не говоря уже про 'Unable to open file'. Какое филе? Почему унабле? Что с этим делать?
    Для программиста? Вместо подробного системного сообщения об ошибке читать эти загадки, серьёзно?

    В общем выкидывай все эти бессмысленные проверки. Ты работаешь с фреймворком, а не клепаешь на коленке. фреймворк писали не дураки, он прекрасно обработает все ошибки сам.

    И забудь ради бога это дурацкое правило, оборачивать любой блок кода в трай кетч. Вместо него запомни другое:

    Надо обязательно различать пользовательские и системные сообщения об ошибках:
    • пользовательские выдавать пользователю, только тогда когда он может что-то сделать. Например: проверить файл на валидность и выдать пользователю сообщение что он прислал не CSV, а какую-то ерунду. Но это НЕ делается путем выброса стандартного исключения. Это делается либо на этапе валидации входящих данных, либо - выбросом специального исключения, которое потом можно поймать в контроллере и вывести пользователю.
    • системные вообще никак не трогать руками. А дать фреймворку самому их обработать. На этапе разработки он выведет подобное и красивое сообщение об ошибке с кучей информации, а на боевом сервере аккуратно запишет ошибку в лог и покажет пользователю стандартную страничку "что-то пошло не так".



    Не принимай резкость этого текста персонально - просто это реально проблема с писателями на пэхапе в целом.
    Ответ написан
  • Сколько и каким образом "отлавливать" исключений (ошибок) при запросе?

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

    То есть ошибки, после которых продолжение работы бесполезно, вообще никак не отлавливать не надо. Ларавель сама за тебя все отловит и напишет. Потому что в ней уже все оформлено, и отлов и обработка. И не надо туда лезть руками.

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

    Если какая-то не отлавливается - надо смотреть какая и почему. Если самостоятельно не получается - привести полный текст ошибки и код отлова в своем вопросе, а не бубнить "я получаю, а мне надо, а они ниловят"

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Судя по частоте обращений и степени понимания сути возникающих проблем - вам на Фриланс.
    Вот там как раз ссылочка на гуголь драйв будет более чем уместна.
    Ответ написан
    Комментировать
  • Почему выводится предупреждение Warning: Missing argument?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Эта Очень Сложная проблема относится к области арифметики.
    Доставай свои счетные палочки, сейчас будем её решать.

    Идем в определение функции setTypeVehicule() и считаем сколько в неё надо передать параметров:
    $libelle, один
    $prix, два
    $pric, три
    $image четыре!

    дальше идем в вызов этой функции, и считаем, сколько на самом деле передаём
    $_POST['libelle_type_vehicule'], один
    $_POST['price_vehicule'], два
    $newfilename три!

    Три не равно четыре, а это значит что одного параметра не хватает
    Ответ написан
    Комментировать
  • Может ли Tesseract кушать столько памяти?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Может
    Ты уже задавал этот вопрос
    Ответ написан
  • Почему не работает PDO prepare?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    потому что execute() возвращает не то что ты думаешь, а тыкву.
    о чем тебе недвусмысленно текст ошибки и сообщает

    "без prepare возвращает" потому что query() возвращает объект класса PDOStatement, в котором есть метод fetchAll.
    а execute - это УЖЕ метод объекта $stmt класса PDOStatement, который возвращает БУЛЕВО значение
    и fetchAll надо вызывать из того же объекта, то есть из $stmt, а не из результата execute

    чтобы решить данную проблему и заодно избавиться от лишнего вызова execute() применим немого магии
    class MyPDO extends PDO
    {
        public function preparedQuery($sql, $args = NULL)
        {
            if (!$args)
            {
                 return $this->query($sql);
            }
            $stmt = $this->prepare($sql);
            $stmt->execute($args);
            return $stmt;
        }
    }

    и дальше уже создав экземпляр этого класса обычным порядком,
    $in_arr = ['meter', 'kilometer'];
    $count_arr = count($in_arr);
    $in_questions = str_repeat('?,', $count_arr - 1) . '?';
    $sql = "SELECT * FROM `cpl_names` WHERE `type` = 'length' AND `id` IN ($in_questions)";
    $result = $mypdo->preparedQuery($sql, $in_arr)->fetchAll();
    Ответ написан
  • Как отнять или добавить рандомное число в столбец mysql в php?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    если отнимать не больше чем есть, то
    update t set a = a - FLOOR( 1 + RAND( ) * a );
    Ответ написан
  • Где начинающему разработчику подглядеть примеры неговнокода?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    На самом деле надо качать Лару а ещё лучше - Симфони.
    Только не тупо зазубривать, а пытаться понять, почему там так сделано. Это и будет теми самыми примерами.
    И да - не Лару точно. Потому что там очень много магии которая полезна тем кто понимает как она работает и очень вредна для тех кто учится.

    И вот изучая нормальный фреймворк ты как раз и будешь учиться примерам хорошего кода.
    Начать можно с этой хрестоматийной статьи https://symfony.ru/doc/current/introduction/from_f...
    А потом переключаться на https://github.com/symfony/demo

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

    И кстати я совсем забыл. У нас же есть гений в своем отечестве, Дмитрий Елисеев. На фоне бесчисленных неграмотных выскочек типа хаудихи или, прости господи, руселлера, это реально человек который знает, о чем говорит.
    И - что гораздо реже случается - умеет донести эти знания до аудитории.
    И насколько я понимаю, твой уровень уже должен позволять в принипе понимать, о чем он говорит.
    В общем начать можно отсюда, https://elisdn.ru/blog/113/psr7-framework-http
    и дальше остальные материалы.
    Ответ написан
    8 комментариев
  • Как вывести данные с массива?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    В цикле.
    Все операции с массивами всегда производятся в цикле.
    самым удобным циклом в РНР является foreach
    Ответ написан
    Комментировать
  • Что я не так делаю с транзакциями PHP MYSQL?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    В общем в качестве ответа на этот малопонятный вопрос можно выдать только общие рекомендации

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

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

    Но при этом тебе и блокировки тоже не нужны, поскольку заниматься такой ерундой, как "прочитать, добавить и записать" в принципе не нужно, поскольку можно совершить атомарную операцию - СРАЗУ в запросе и прибавить нужную сумму, без придварительного чтения.

    Но самое главное - тебе сначала надо решить, каким образом вообще ведется бухгалтерия - добавлением строк, или обновлением строк.
    Ответ написан
  • Реализация объединение кучи баз mysql в одну, под управлением одной админки?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    В общем, к "объединение кучи баз mysql в одну, под управлением одной админки" твои проблемы не имеют никакого отношения.

    Базы данных все примерно одинаковые, одним не хватает таблиц, другим столбцов. Это приходится добавлять(но это пол беды).

    В современном мире для этого служат миграции.

    обновление админки, которая функционирует на php. Переписывать запросы в базу, исправлять ошибки, менять название функций, добавлять/удалять переменные и т.д.

    В современном мире это целая отрасль, которая в первую очередь базируется на системе контроля версий. Если в твоём агентстве она не используется, то надо бежать оттуда.
    Потому что вредрить её у тебя вряд ли получится, а работать с распределённой кодовой базой без CVS - это даже не каменный век, а какие-то амебы в первичном бульоне.

    Но по идее у движка должно быть как минимум единое ядро, которое никак не зависит от конкретного сайта, и содержит абсолютно одинаковый код. обновление такого движка олжно производиться одной кнопкой. Но для этого код должен быть дейстительно унифицированным, и быть четко разделенным на ядро и надстройки под конкретного клиента. И это все надо реализовать.
    Ответ написан
    Комментировать
  • Что создать для практики Php?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Начни пользоваться своими "блогом" и "соц-сетью". Сразу поймешь что пользоваться ими невозможно.
    И начинай допиливать потихоньку.

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Вопрос, как всегда, совсем не о том.

    Код этих двух "классов управления записями" по сути ведь не отличается друг от друга. Отличается только формат этих записей, в котором класс выдаёт результат работы - либо массив, либо объект.

    То есть вопрос на самом деле - в каком формате работать с книгами в коде - в виде массивов или объектов, а не как ими управлять.

    И ответ на него очевиден - поскольку в объект можно вкрячить кучу функционала, например метод validateISBN(), то однозначно работать с объектами удобнее.
    Ответ написан
  • Как сделать паузу в цикле на php?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    sleep(3) выполняется в каждой итерации, то есть никаких "остальные все сразу" не будет

    другое дело непонятно зачем спать три секунды когда надо спать одну треть секунды, то есть надо писать

    usleep(400000);
    Ответ написан
    1 комментарий
  • Как через ajax получить данные из php файла?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Как через ajax получить данные из php файла?


    Наверное, их надо послать?
    Ответ написан
    Комментировать
  • Как работает memory_limit в php ini?

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

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

    Фреймворкофобия - это болезнь, надо лечиться.
    Ответ написан
    2 комментария
  • Как правильно привязать фото к карточке товара в БД?

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