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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    > Есть какой-то еще способ заставить PHP просто вывести дробное число без изменения его внешнего вида?

    Нет

    Разумеется, никакого способа нет. Потому что никакого "внешнего вида" у дробных чисел не существует в природе. У них есть только внутренний вид, но вам на него смотреть не захочется. А для вывода в десятичном формате его всегда надо преобразовать и отформатировать.

    Если важен "исходный внешний вид", то следует работать с числами, как со строками, и тогда они будут всегда выводиться, как есть.
    Ответ написан
    Комментировать
  • Хранить в БД или PHP?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Разумеется, только в БД.

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

    Или, если сформулировать короче, то данные должны лежать в базе, а в РНР файлах - только код.
    Ответ написан
    5 комментариев
  • Могут ли украсть сессию php?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Как всегда, в теле вопроса написано совсем не то, что в заголовке.

    Отвечаем на оба вопроса

    Могут ли украсть сессию php?
    при нормальных настройках сайта (httponly cookies, SSL) - практически нереально. Только трояном с компа. Но если есть доступ к компу, то с сессиями уже заморачиваться как-то мелко.
    Хотя я не очень уверен насчет расширений браузера/тулбаров. Думаю, что они доступ к кукам имеют свободный.

    Может ли другой человек узнав ID сессии и приписав его в свой php скрипт получить доступ к данным сессии моего сайта?
    Разумеется, может.

    Только не описанным способом, конечно. Идентификация происходит через cookies. Соответственно, узнав ID, надо просто отправить нужный session_id со своего сервера или браузера.
    Ответ написан
    1 комментарий
  • Как узнать сколько было извлечено записей из базы данных.?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Это абсолютно бессмысленная операция, которая никогда не бывает нужна.

    Если вдруг показалось, что нужно получить количество строк, которые вернул запрос, то значит проблемы с логикой. Это как раз тот случай, который мы наблюдаем сейчас. Откуда тут взялись 2 запроса к базе данных? Они существуют только в вашем воображении. В вашем коде используется только один запрос. И никакое количество строк тут не нужно, ваш код прекрасно работает без него. Разве что убрать из него SQL инъекцию и бессмысленные телодвижения

    $stmt = $_connect_->prepare("SELECT * FROM users WHERE login=?");
    $stmt->execute([$_SESSION['login']]);
    $user = $stmt->fetch();
    
    if($user){
        echo 'есть записи';
        echo 'Имя пользователя'.$user['login'];
    }else
        echo 'нет записей';
    }
    Ответ написан
    Комментировать
  • Как выполнить инициализацию переменных перед загрузкой сайта?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Открою маленький секрет.
    Все 100% современных приложений работают именно таким образом - сначала они инициализируют начальные константы, а потом запускают приложение.

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Нужно пользоваться нормальным редактором. Он сразу все покажет
    Ответ написан
    2 комментария
  • Чистый код в php?

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

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

    Если же решать проблему с нуля - то есть из теории - то чтением книжек отцов-основателей - Мартина, Фаулера - вот это вот всё. Новичкам редко подходит, так что я бы рекомендовал совмещать теорию с практикой.
    Ответ написан
    4 комментария
  • Как загрузить картинку в папку на php и записать путь в базу mysql?

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

    1. проверять $_FILES['uploadfile']['error']
    2. Проверять расширение файла на соответствие разрешенным по списку
    3. Переименовывать файл, поскольку оригинальные имена - это адище и беспорядок плюс небезопасно.
    Ответ написан
    7 комментариев
  • Что означает $this-> -> в PHP?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    1. Закопать Fuel обратно в его могилу и больше не беспокоить прах этого умершего в далекой древности старца.
    2. Вместо него учить Laravel
    3. Открыть для себя документацию РНР и в непонятных случаях обращаться к ней. В это трудно, конечно, поверить, но там всё написаною Эта ссылка находится в двух кликах по запросу "РНР ООП"

    Честно говоря, я и сам себя часто ловлю на такой "лености мозга". Когда ты 100% можешь сам найти ответ, но спросить у знающего человека проще. но тут важно не поддаваться, и сначала пытаться самостоятельно. Для этого в любом вопросе должна быть фраза - "я искал такм-то", но не нашёл. В процессе написания этой фразы ответ сам и сыщется. В итоге в будет сэкономлено время, приобретён опыт и в интернете будет будет меньше мусора.
    Ответ написан
    4 комментария
  • Как правильно хранить время в бд?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Так и хранить.
    www.mysql.ru/docs/man/TIME.html

    Принятый ответ - это какое-то извращение, которое будет косячить во всех классических случаях - переход на летнее время, високосный год и так далее.
    Ответ написан
    Комментировать
  • Как экранировать строку в REGEXP (mysql) средствами PHP?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Я думаю, что preg_quote() должна подойти.
    Ответ написан
    1 комментарий
  • Можно ли заменять в SQL запросе ' на "?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Эти функции - какой-то ужас, летящий на крыльях ночи. mysql_real_escape_string - вообще за гранью добра и зла.

    Но главное, что я не могу понять - это какое отношение к mysql и mssql имеет функция xss_clean. Ну то есть я даже представить себе не могу, как можно функцию для защиты от xss применять для любых манипуляций c SQL. Это - я не знаю - как положить деньги в презерватив от грабителей. Он же служит для безопасности. Ну вот деньги и будут в безопасности.

    По теме: ради всего святого, используйте PDO с подготовленными выражениями. Это сделает ненужной всю эту мышиную возню с регулярками. PDO поддерживает как mysql, так и mssql, так что разница будет только в синтаксисе запросов, а сам код работы с запросами будет один и тот же

    $sql = "SELECT TOP 10 * FROM user where mssql.department_id=?";  
    $stmt = $conn->prepare($sql);  
    $stmt->execute([$_GET['department_id']]); 
    $users = $stmt->fetchAll();
    
    $sql = "SELECT * FROM user where mysql.department_id=? LIMIT 10";  
    $stmt = $conn->prepare($sql);  
    $stmt->execute([$_GET['department_id']]); 
    $users = $stmt->fetchAll();


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

    От XSS же надо защищаться совсем в другом месте, и также без всего этого ужаса
    Ответ написан
    1 комментарий
  • Как исправить ошибку Invalid parameter number?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Как можно решить эту проблему?


    Такие проблемы решаются довольно просто. Нужно прочитать сообщение об ошибке. Если совсем не понимаешь по-английски - есть онлайн переводчики. Если все равно непонятно - берем сообщение об ошибке и ищем гуглем и смотрим по найденным ссылкам.
    Ответ написан
  • VARCHAR(255) или VARCHAR(65535), TINYINT или LONGING. Влияют ли на скорость?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    На "памяти" это тоже не влияет. Приставка VAR означает, что строка занимает в БД ровно столько места, сколько байт содержится в строке (+ небольшой статический оверхед, естественно).

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    1. Не знаю. Скорее всего, все так, как написал xtress. То, как операторы выполняются, и в каком порядке из результаты используются - это разные вещи.
    2. На самом деле написано, что "Рекомендуется избегать "нагромождения" тернарных выражений. Поведение PHP неочевидно при использовании нескольких тернарных операторов в одном выражении"
    3. Таблица не при чем, поскольку "эта оптимизация" не относится к приоритетам. https://phpdelusions.net/articles/or_die
    Ответ написан
    Комментировать
  • Какие курсы по php выбрать?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Единственные качественные курсы, которые готовят современного разработчика, а не ремесленника для 1990-х - это https://otus.ru/lessons/razrabotchik-php/
    Но как я вижу, прием там закрыт :(
    Ответ написан
    Комментировать
  • Как лучше организовать сущности в Doctrine?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Для столь короткого описания сущности спроектированы верно.

    Какое отношение к этому имеет количество запросов в БД - загадка.
    Ответ написан
    Комментировать
  • Сколько оперативки нужно для mysql при размере таблицы 2гб?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Я правильно понимаю, чтобы все крутилось быстро, нужно чтобы таблица помещалась в оперативку с запасом?

    Разумеется, нет. Это вообще никак не связанные вещи.
    В отличие от новомодных словечек типа nosql, реляционные базы данных спроектированы так, чтобы работать с объемами, во много раз превышающими размер оперативной памяти.

    Но чтобы работать нормально, систему надо настраивать. При этом
    изменение схемы таблицы

    Это одна проблема, со своими решениями, а
    тяжелые запросы

    -- СОВСЕМ другая, со совсем другими решениями

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

    С "тяжелыми" запросами надо разбираться по отдельности.
    Ответ написан
    2 комментария
  • Чем опытнее разработчик, тем меньше соблюдается принцип KISS?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Принцип KISS не означает что надо использовать самые примитивные инструменты.
    Он означает, что не надо переусложнять систему без нужды.
    Если так рассуждать, так и высшее образование не нужно: "Дед отличные бани строил, хотя вовсе был неграмотный. Я и без сопромата небоскреб построю!"
    Если вы пока ещё не понимаете назначение всех этих "лееров, провайдеров и репозиториев", это не значит, что они вообще никому не нужны.

    Для того, чтобы упростить управление системой, её надо усложнить.
    Этот принцип относится к любой области человеческой деятельности, от постройки ракет до управления государствами.
    Чем сложнее система, тем больше накладные расходы на ее управление. Хоумпейдж с котиками можно и нужно делать примитивными средствами. В большом проекте надо сразу закладываться на будущую расширяемость. То есть, заранее делить ответственность между "леерами".

    И кстати. Код, в котором "всё друг на друге завязано" - это очень плохой код. Собственно, предназначение всех этих "лееров, провайдеров и репозиториев" как раз в том, чтобы компоненты были как можно более независимы друг от друга.
    Ответ написан
    1 комментарий
  • Какой уровень MySQL/MariaDB нужно знать среднему php-программисту?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Для миддла надо подтянуть только п. 3. У Светы Смирновой есть несколько отличных презентаций по работе с explain, они легко находятся гуглом.

    Еще желательно различать транзакции и блокировки, когда что использовать.

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

    Вообще, по моему опыту, не стоит переоценивать результаты интервью. Когда я 5 лет назад ходил по собеседованиям, то после двух из них, которые я сам посчитал проваленными, мне прислали предложения о работе.
    Ответ написан
    1 комментарий