1. PHP / Говнокод #23525

    +5

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    // PHP при делении может неявно конвертировать целые в плавающие, и всех этих int-ограничений для него не существует
    echo 12 / 5; // 2.4
    
    // Было бы логично предположить, что другие операторы работают так же, но эта камбала неявно кастует уже плавающее к целому в соседнем операторе
    echo 9 % 0.9;
    
    PHP Fatal error:  Uncaught DivisionByZeroError: Modulo by zero in Command line code:1
    Stack trace:
    #0 {main}
      thrown in Command line code on line 1

    Запостил: Fike, 13 Ноября 2017

    Комментарии (49) RSS

    • а обернуть в mysqli_real_escape_string() не пробовал? слышал что панацея от всех проблем в пыхе.

      ЗЫ в пыхе есть fmod. смешно что в перле это работает аналогично. наверное с тех времен как содрали это с перла, так никто не догадался это поменять.
      Ответить
      • >>а обернуть в mysqli_real_escape_string() не пробовал? слышал что панацея от всех проблем в пыхе.
        Собачка еще..
        Ответить
        • И strip_slashes(), говорят, кому-то помогал (слеш похож на деление, значит они как-то связаны).
          Ответить
        • >>>"Собачка еще.."

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

          error_reporting(0);
          ini_set('display_errors', '0');
          Ответить
          • я довольно слабый пхп программист, все время забываю очевидное
            Ответить
            • Ранее я выкладывал фрагмент написанного кода из разработанного мною движка онлайн-казино. Сиди, штудируй, как пишут мэтры.

              P.S.: Вам, стремящемуся вращаться в стаде быдлу с застланными фреймворками и паттернами глазами, может казаться, что мои сообщения - не более, чем троллинг; однако именно так я и программирую, ибо это удобнее всего.
              Ответить
      • Если версия "PHP" меньше седьмой, то вместо "mysqli_real_escape_string" можно использовать "mysql_real_escape_string", для оптимизации. Будет сэкономлен один байт пространства на жёстком диске.
        Ответить
        • но работает-ли mysql_real_escape_string быстрее чем mysqli_real_escape_string?

          Ведь скорось так важна серьезным проектам...
          Ответить
          • Не изучал. Вроде работает - и ладно.

            P.S.: Если что, с помощью "mysql_real_escape_string" (да и, надо полагать, "mysqli_real_escape_string") можно весьма неплохо экранировать спецсимволы при выводе строк в переменные "JavaScript", если содержимое оных располагается в одинарных кавычках.
            Ответить
            • А pdo_real_escape_string случайно нет? А то тут так любят рекламировать PDO как панацею.
              Ответить
              • Нет.
                Ответить
              • А "PDO" - хуйня. В случае смены системы управления базами данных всё равно придётся править каждый запрос. К примеру, в "MySQL" и "PostgreSQL" правила употребления кавычек разнятся. Отличается и синтаксис "LIMIT". Наконец, тупо нарушается очевидность содержимого запросов: вместо входных данных - вопросительные знаки; а входные данные смещаются куда-то вправо...
                Ответить
                • Да и не используются же другие базы данных-то.

                  Например популярный движок WordPress исправно работает только с MySQL.

                  поскольку в каждой базе функционал одианков (везде есть "SELECT *" и UPDATE и "left join") смысла уходить от MySQL нет

                  (из книги "думай как PHP разработчик")
                  Ответить
                  • На "AVITO", к примеру, используется "PostgreSQL" (и они весьма чванятся этим).
                    Ответить
                    • Странная "привычка" писать в кавычках имена собственные. Это какая-то "фишка"?
                      Ответить
                      • Соблюдение правил грамматики, кися.
                        Почитай на досуге: http://new.gramota.ru/spravka/letters/75-kav2
                        Ответить
                        • а топонимы склоняешь?
                          Ответить
                        • Но ты же используешь неправильные кавычки! Какое же это соблюдение правил?
                          Написал бы "На «AVITO», к примеру, используется «PostgreSQL»", ни у кого бы вопросов не возникло.
                          Ответить
                      • > Странная "привычка" писать в кавычках имена собственные

                        Ладно хоть не

                        На mysql_real_escape_string("AVITO"), к примеру, используется mysql_real_escape_string("PostgreSQL")
                        Ответить
                        • Но тут же константы, а не произвольные данные. Они уже отфильтрованы. Вот если бы надо было упомянуть О'Генри, то COWuTEJIbTBOEuMAMKu написал бы: О\'Генри.
                          Ответить
                        • Сможешь написать то же самое, но с применением PDO и MVC, как учат?
                          Ответить
                          • Конечно
                            $stmt = $dbh->prepare("INSERT INTO NAMES (name) VALUES (:name)");
                            $stmt->bindParam(':name', "Avito");
                            $stmt->bindParam(':value', "Postgres")
                            Ответить
                            • Ничего не напутано?
                              Ответить
                              • напутано конечно
                                value забыл, ну ты же понял
                                Ответить
                                • > напутано конечно

                                  Вот видишь, неоспоримое преимущество «mysql_real_escape_string» теперь должно быть тебе очевидным.
                                  Ответить
                            • Идейные пыхомакаки используют $pdo->quote(). Потому что с вашим препаред стейтментом нельзя даже запрос целиком на продакшоне вывести через var_dump().
                              Ответить
                              • то-есть запрос все равно собирабютв ручную но с quote()?

                                >>var_dump
                                --дебагер? а чот это?
                                Ответить
                                • > дебаггер
                                  Ну он же пишет, что на продакшоне. Т.е. зафейлившийся или слишком долгий запрос, к примеру. Чем тут дебаггер поможет?
                                  Ответить
                                  • долгие запросы умеет репортить база (log_min_duration_statement)
                                    https://www.postgresql.org/docs/current/static/runtime-config-logging.html

                                    А var_dump пишет в stdout, очевидно писать надо не туда, а в лог LogFaces, NewRelic, или хотя бы просто в текстовый файл,
                                    Ответить
                                    • > stdout
                                      Т.е. даже не в лог пыхи, а прямо в браузер? О_о

                                      З.Ы. Кстати, а мускуль тоже умеет репортить долгие и битые запросы?
                                      Ответить
                                      • Мускуль умеет репортить в файл битые запросы и в другой файл — долгие запросы (порог продолжительности задаётся в настройках). Но сайт шоколадного короля почему-то репортит в браузер, как мы уже заметили...
                                        Ответить
                                      • Кстати, в пыхе есть функции print_r и var_export, которые возвращают структуру значения переменной как строковое значение (которое можно потом использовать по своему усмотрению), а не высирают в stdout. Правда, для этого им нужно передать true в качестве второго аргумента.

                                        Выхлоп var_dump можно перехватить с помощью вызовов ob_start и ob_get_contents. В PHP нормальная практика, когда используются функции, высирающие в stdout, но перед этим включается перехватчик.
                                        Ответить
                                        • >>но перед этим включается перехватчик.
                                          это чтобы использовать PHP как шобла-низатор и сохранять потом результат или слать его по email?
                                          Ответить
                                          • Я в форумных движках такое видел. Да, PHP использовался как шаблонизатор, результат перехватывался и... сохранялся в базе, чтобы при следующих обращениях доставать из базы готовый собранный HTML, а то шаблонизация снижает пирфоманс.

                                            И да, чтобы отправлять по e-mail красиво оформленный текст, используя встроенный шаблонизатор, другого пути и нет.

                                            А ещё иногда возникает желание генерировать из PHP всякие файлы, причём не совсем HTML или совсем не HTML...
                                            Ответить
                                            • толи дело Common Lisp:
                                              (let ((*standard-output* my-stream))
                                                ; code writing to stdout
                                                )
                                              Ответить
                                            • > А ещё иногда возникает желание генерировать из PHP всякие файлы, причём не совсем HTML или совсем не HTML...

                                              Открой для себя Python.
                                              То, что пхп выплевывает в stdout всё, что вне кода, покрывается в питоне возможностью принтить мультилайн строки
                                              print """1. One
                                              2. Two
                                              3. Spam"""

                                              Для подстановки переменных в строки есть неплохой format.
                                              Остальное в питоне лучше.
                                              Ответить
                                              • В 3.6 есть уже тоже string interpolation.
                                                А в Ruby и Perl еще есть HERE Document.
                                                Ответить
                                              • # покрывается в питоне возможностью принтить мультилайн строки

                                                php.net/manual/ru/language.types.string.php#language.types .string.syntax.heredoc

                                                php.net/manual/ru/language.types.string.php#language.types .string.syntax.nowdoc
                                                Ответить
                                            • >>. сохранялся в базе
                                              но почему не сохранить файл на диске тогда уже, и не отдавать его через sendfile(2))?
                                              Ответить
                                        • > перехватить с помощью вызовов ob_start и ob_get_contents...
                                          ...и засунуть результат в eval, чтобы получить уробороса.
                                          Ответить
                                      • >> Т.е. даже не в лог пыхи, а прямо в браузер?
                                        В пыхе как-то не принято разделять на stdout, stderr и логи.

                                        >мускуль
                                        умеет
                                        Ответить
                • все минусуешь...

                  самоутверждаешься за счет тех, у кого нет такого богатого опыта разработки на PHP.
                  Ответить
      • и еще intdiv для привычного деления интов
        Ответить
    • слыш ты, Modulo
      Ответить

    Добавить комментарий