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

    +165

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    <?
    $text = @file("MySql/base123/reg/$log.dat");		
    $udata = explode(":||:", $text[0]);		
    $udata[100] = round($udata[100] + 1);
    $text = $udata[0] .':||:'. $udata[1] .':||:'. $udata[2] .':||:'. $udata[3] .':||:'. $udata[4] .':||:'. $udata[5] .':||:'. $udata[6] .':||:'. $udata[7] .':||:'. $udata[8] .':||:'. $udata[9] .':||:'. $udata[10] .':||:'. $udata[11] .':||:'. $udata[12] .':||:'. $udata[13] .':||:'. $udata[14] .':||:'. $udata[15] .':||:'. $udata[16] .':||:'. $udata[17] .':||:'. $udata[18] .':||:'. $udata[19] .':||:'. $udata[20] .':||:'. $udata[21] .':||:'. $udata[22] .':||:'. $udata[23] .':||:'. $udata[24] .':||:'. $udata[25] .':||:'. $udata[26] .':||:'. $udata[27] .':||:'. $udata[28] .':||:'. $udata[29] .':||:'. $udata[30] .':||:'. $udata[31] .':||:'. $udata[32] .':||:'. $udata[33] .':||:'. $udata[34] .':||:'. $udata[35] .':||:'. $udata[36] .':||:'. $udata[37] .':||:'. $udata[38] .':||:'. $udata[39] .':||:'. $udata[40] .':||:'. $udata[41] .':||:'. $udata[42] .':||:'. $udata[43] .':||:'. $udata[44] .':||:'. $udata[45] .':||:'. $udata[46] .':||:'. $udata[47] .':||:'. $udata[48] .':||:'. $udata[49] .':||:'. $udata[50] .':||:'. $udata[51] .':||:'. $udata[52] .':||:'. $udata[53] .':||:'. $udata[54] .':||:'. $udata[55] .':||:'. $udata[56] .':||:'. $udata[57] .':||:'. $udata[58] .':||:'. $udata[59] .':||:'. $udata[60] .':||:'. $udata[61] .':||:'. $udata[62] .':||:'. $udata[63] .':||:'. $udata[64] .':||:'. $udata[65] .':||:'. $udata[66] .':||:'. $udata[67] .':||:'. $udata[68] .':||:'. $udata[69] .':||:'. $udata[70] .':||:'. $udata[71] .':||:'. $udata[72] .':||:'. $udata[73] .':||:'. $udata[74] .':||:'. $udata[75] .':||:'. $udata[76] .':||:'. $udata[77] .':||:'. $udata[78] .':||:'. $udata[79] .':||:'. $udata[80] .':||:'. $udata[81] .':||:'. $udata[82] .':||:'. $udata[83] .':||:'. $udata[84] .':||:'. $udata[85] .':||:'. $udata[86] .':||:'. $udata[87] .':||:'. $udata[88] .':||:'. $udata[89] .':||:'. $udata[90] .':||:'. $udata[91] .':||:'. $udata[92] .':||:'. $udata[93] .':||:'. $udata[94] .':||:'. $udata[95] .':||:'. $udata[96] .':||:'. $udata[97] .':||:'. $udata[98] .':||:'. $udata[99] .':||:'. $udata[100] .':||:';
            $fp = fopen("MySql/base123/reg/$log.dat", "a+");
            flock($fp, LOCK_EX);
            ftruncate($fp, 0);
            fputs($fp, "$text");
            fflush($fp);
            flock($fp, LOCK_UN);
            fclose($fp);

    Попался скрипт браузерной игры. Автор - Bishop какой то. Это просто залежи позитива. Второй день ржунимагу.

    Запостил: twin, 12 Февраля 2011

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

    • Это вообще что должно делать?
      Ответить
    • 5-я строчка - мощь.
      Ответить
      • Да, 5-я строчка доставляет.
        > implode? нет, первый раз слышу
        Ответить
      • Ничего-ничего, гораздо веселее, когда люди для подобной цели используют sprintf.
        Ответить
    • заменить в строке последнее значение. ну вообще это так должно было бы:
      <?php 
          $text       = file_get_contents("MySql/base123/reg/$log.dat");
          $udata      = explode(":||:", $text);
          $udata[100] = round($udata[100] + 1);
          $text       = implode(":||:", $udata);   
          file_put_contents("MySql/base123/reg/$log.dat", $udata);
      Ответить
      • там ещё файл блокируется на время работы с ним...
        Ответить
        • а в file_put_contents разве не блокируется?
          Ответить
          • между file_get_contents и file_put_contents
            Ответить
            • в каком собственно месте?

              01. read
              07. lock
              09. write
              11. unlock

              нету там между ними блокировок ;-)
              Ответить
              • я так понимаю, автор хотел быть увереным, что во время работы с файлом из данного скрипта, никакие другие процессы не могли бы достучаться до этого файла.
                "file_get_contents и file_put_contents" - открывают и закрывают файл только во время (и на время) своего выполнения. Между использованием этих двух функций можно делать с файлом что угодно.
                Куда, в таком случае подеваются данные отправленные из другого процесса?
                Ответить
                • > я так понимаю, автор хотел быть увереным, что во время работы с файлом из данного скрипта, никакие другие процессы не могли бы достучаться до этого файла.
                  В каком месте это видно?

                  Я прекрасно понимаю как работают "file_get_contents и file_put_contents". В оригинале написано тоже самое, никаких блокировок между чтением и записью.
                  Ответить
                • Мало того, между fopen() и flock() - тоже может вклиниться процесс. И если первый вариант чреват порчей данных, то второй - порчей файла. По этому file_put_contents() тут безопаснее.

                  А вообще там весь скрипт - один большой анекдот. ))
                  Ответить
                  • > один большой анекдот
                    Причём начиная с идеи
                    Ответить
                  • Насчёт анекдота - это ещё мягковато. :)
                    Хотя если посмотреть на это с другой стороны, возможно стояла, как бы, задача о манипуляциях + сохранении некой информации в бардовскую БД.
                    Автор возможно столкнулся уже с подобной проблемкой (потеря архиважной информации), и, как бы, решил это дело - блокировкой файлов. Потом появилось всякое пятое-десятое - и всякие ftruncate/fflush...
                    --
                    А код, да, всё равно говно...
                    Ответить
                • блокировки - это тонкая тема!
                  если нужно об этом думать, то file_get(put)_contents - вообще не вариант (если брать только эти функции).
                  Ответить
                  • ...если дошло дело до раздумий насчёт блокировок - то, сдаётся, пора в корне менять концепцию...
                    Ответить
                    • в случае с блокировками штатными средствами не обойдешься, все равно придется делать велосипед, так как даже всякие flock($fp, LOCK_EX); - это юношеская наивность...
                      Ответить
                      • велосипеды создаются, как правило, на рубежах ноухау. (если всё остальное "всё не так как надо"). А в данном конкретном случае - это "#964b00"
                        Ответить
                        • в данном конкретном случае - это даже хуже, чем "#964b00"
                          Ответить
                    • я всегда блочил семафорные файлы - и вродь ничо
                      Ответить
                      • наверное блокировками пусть занимаются процессы работающие с этими данными (и) файлами...
                        Ответить
    • автору кода срочно в паспортный стол менять фамилию на китайскую
      Ответить
    • а что это за файл? зачем вообще так делать?
      Ответить
      • > а что это за файл?
        — это фэйл
        > зачем вообще так делать?
        — так делать не надо :)
        Ответить
    • Ну типа сериализация кагбэ)
      Ответить
      • Это больше похоже на CSV-формат, только в качестве разделителей используется символ баяна
        Для полного счастья надо было сделать такой: [:]|||[:]
        Ответить

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