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

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    $css .= '<link rel="stylesheet" href="' . STATIC_SERVER . 'css/' . $mobilecss . '">';
    	
      // April 2024
      $css .= '<link rel="stylesheet" href="' . STATIC_SERVER . 'css/xa24extra.css">';
      
    	if (SHOW_COUNTRY_FLAGS) {
    		$css .= '<link rel="stylesheet" href="' . STATIC_SERVER . 'css/flags.' . CSS_VERSION_FLAGS . '.css">';
    	}
      
      if (ENABLE_BOARD_FLAGS) {
        $_flags_type = (defined('BOARD_FLAGS_TYPE') && BOARD_FLAGS_TYPE) ? BOARD_FLAGS_TYPE : BOARD_DIR;
        $css .= '<link rel="stylesheet" href="' . STATIC_SERVER . 'image/flags/' . $_flags_type . '/flags.' . CSS_VERSION_BOARD_FLAGS . '.css">';
      }
      
    	if( CODE_TAGS ) {
    		$css .= '<link rel="stylesheet" href="' . STATIC_SERVER . 'js/prettify/prettify.' . CSS_VERSION . '.css">';
    	}
    
    	// Various optional tags
    	if( USE_RSS == 1 ) {
    		$rss = '<link rel="alternate" title="RSS feed" href="/' . BOARD_DIR . '/index.rss" type="application/rss+xml">';
    	}
    
    	if( RTA == 1 ) {
    		$rta = '<meta name="rating" content="adult">';
    	}
    
    	if( defined( 'FAVICON' ) ) {
    		$favicon = '<link rel="shortcut icon" href="' . FAVICON . '">';
    	}
    	
    	$thread_unique_ips = 0;
    	$jsUniqueIps = '';
    	
    	if (SHOW_THREAD_UNIQUES) {
        if ($res) {
          $thread_unique_ips = get_unique_ip_count($res);
        }
        
        if ($thread_unique_ips) {
          $jsUniqueIps = 'var unique_ips = ' . $thread_unique_ips . ';';
        }
    	}
      
    	// js tags
    	$jsVersion   = TEST_BOARD ? JS_VERSION_TEST : JS_VERSION;
    	$comLen      = MAX_COM_CHARS;
    	$styleGroup  = style_group();
    	$maxFilesize = MAX_KB * 1024;
    	$maxLines    = MAX_LINES;
    	$jsCooldowns = json_encode(array(
    		'thread' => RENZOKU3,
    		'reply' => RENZOKU,
    		'image' => RENZOKU2
    	));
      
    	$tailSizeJs = '';
    	
      if ($res) {
        $tailSize = get_json_tail_size($res);
        
        if ($tailSize) {
          $tailSizeJs = ",tailSize = $tailSize";
        }
      }

    «Форчан» поломали.

    Запостил: ISO, 15 Апреля 2025

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

    • Ну мкотка, мякотка же!
      // Remove old replies if the thread is sticky+undead
      if ($is_undead_sticky && STICKY_CAP > 1) {
        $query = "SELECT MIN(no) FROM (SELECT no FROM `" . BOARD_DIR . "` WHERE resto = $resto ORDER BY no DESC LIMIT " . (STICKY_CAP - 1) . ") as subsel";
        $result = mysql_board_call($query);
        if ($result) {
          $prune_row = mysql_fetch_row($result);
          
          mysql_free_result($result);
          
          $min_no = (int)$prune_row[0];
          
          if ($min_no > $resto) {
            $query = "SELECT no FROM `" . BOARD_DIR . "` WHERE resto = $resto AND no < $min_no";
            $result = mysql_board_call($query);
            
            if ($result) {
              while ($prune_row = mysql_fetch_assoc($result)) {
                delete_post((int)$prune_row['no'], '', 0, 1, 1, 0);
              }
              
              mysql_free_result($result);
            }
          }
        }
      }
      Ответить
      • Кладезь.
        $insert_tries = 2;
        do {
            if( SKIP_DOUBLES == 1 ) mysql_board_call( "START TRANSACTION" );
            $query = "insert into `" . SQLLOG . "` (now,name,sub,com,host,pwd,email,filename,ext,w,h,tn_w,tn_h,tim,time,last_modified,md5,fsize,root,resto$flag_cols,tmd5,id,country$board_flag_col) values (" .
                "'" . $now . "'," .
                "'" . mysql_real_escape_string( $name ) . "'," .
                mysql_nullify( mysql_real_escape_string( $sub ) ) . "," .
                "'" . mysql_real_escape_string( $com ) . "'," .
                "'" . mysql_real_escape_string( $host ) . "'," .
                "'" . mysql_real_escape_string( $pass ) . "'," .
                "'" . mysql_real_escape_string($user_meta) . "'," .
                "'" . mysql_real_escape_string( $insfile ) . "'," .
                mysql_nullify( $ext ) . "," .
                (int)$W . "," .
                (int)$H . "," .
                (int)$TN_W . "," .
                (int)$TN_H . "," .
                "'" . $tim . "'," .
                (int)$time . "," .
                (int)$time . "," .
                mysql_nullify( $md5 ) . "," .
                (int)$fsize . "," .
                $rootpredicate . "," .
                (int)$resto .
                $flag_vals . "," .
                mysql_nullify( $tmd5 ) . "," .
                mysql_nullify( $uid ) . "," .
                "'$country'$board_flag_val)";
        
            if( !$result = mysql_board_call( $query ) ) {
                echo S_SQLFAIL;
            } //post registration
            time_log( "i" );
        
            $insertid = mysql_board_insert_id();
            if( SKIP_DOUBLES == 1 ) {
                if( has_doubles( $insertid ) ) {
                    mysql_board_call( "ROLLBACK" );
                    // retry
                } else {
                    mysql_board_call( "COMMIT" );
                    $insert_tries = 0;
                }
            } else {
                $insert_tries = 0;
            }
        } while( $insert_tries-- );
        Ответить
    • Движки почти всех чанов восходят либо к перловскому «Wakaba», либо к пэхапэшному «Futaba». Там код неописуемой красоты: в одной строчке может быть PHP/Perl, SQL, HTML, CSS, JS.

      P.S. Держи:

      https://noobtype.ru/wiki/Сравнение_движков_для_имиджбордов
      Ответить
      • Спасибо! Держи в ответ мякотку из «util.php»:
        function utf8_wordwrap( $string, $width = 75, $break = "\n", $cut = false )
        {
        	if( $cut ) {
        		// Cut lines that are too long by hand, even if they aren't official break opportunities
        		$search  = '/(.{' . $width . '})/uS';
        		$replace = '$1$2' . $break;
        	}
        
        	return preg_replace( $search, $replace, $string );
        }

        Что-то мне это напоминает.
        Ответить
        • Да, у кого-то изначально не было модификатора «u» в регулярке, и код пидорасил русские буквы. Пришлось сами знаете кому отправить решение.
          Ответить
        • https://github.com/wiistriker/govnokod_legacy/blob/0fff326db216cf4e103c1822a77b58784a97fd7a/service/bbcode.php#L706
          Ответить
          • Самое интересное, что legacy обновлён семь лет назад, а Новый движок™ — десять лет назад.

            Похоже, переход с mzz на Symfony отменяется.
            Ответить
        • Да, верно. Спасибо!
          Ответить
        • Забавно, что Wakaba (на Перле) появилась после пэхапэшной Футабы. Та же свалка в одном файле, но Wakaba выглядит чище, даже prepare есть.

          А оригинальная Футаба вроде даже была без SQL, данные сохранялись в самодельном файле, SQL позже прикрутили.
          Ответить
          • Перл просто настолько лучше пхп, что даже тупой двачер не способен его зашкварить. Говно к золоту не липнет, знаешь.

            В преле про препрды написино прямо в мане по DBI
            https://metacpan.org/pod/DBI

            &gt;данные сохранялись в самодельном файле,
            в перово-CGIшном детстве я часто такое видел. Типичный `guestbook.cgi` содержал в себе и HTML и писание в файл. Использовалась волюнтаристская блокировка `flock(2)`. На винде не работала, потому в типичном cgi на винде на сайт надо было ходить по-одному, иначе данные могли сломаться.


            PS: в доке по DBI упоминается Oracle 9, которому давеча стукнуло двадцать пять лет. Уже по одному этому факту можно судить о длинне бороды типичного перловика.
            Ответить
            • Как будто в документации по PHP про prepared ничего нет.

              https://www.php.net/manual/ru/security.database.sql-injection.php
              Ответить
              • ну блядь ты сравнил жопу с пальцем

                В перле про DBI статья, а тут какой-то огрызок
                Ответить
                • Так есть и полные статьи:
                  https://www.php.net/manual/ru/pdo.prepare.php

                  https://www.php.net/manual/ru/function.odbc-prepare.php

                  https://www.php.net/manual/ru/mysqli-stmt.prepare.php

                  https://www.php.net/manual/ru/function.pg-prepare.php

                  https://www.php.net/manual/ru/function.sqlsrv-prepare.php

                  Огрызок — это просто чек-лист того, что нужно сделать.
                  Ответить
      • &gt; PerlHP is an attempt to give Perl the same simplicity and hackiness that PHP

        soeka
        https://github.com/lilyanatia/PerlHP-bbs/blob/5ca77ba2a09b852b34e5f436071ff5e20f0a9932/bbs.pl#L375
        Ответить
        • кстати, для тех, кто не знает перл, эта конструкция будет выглядеть очень смешно
          https://github.com/lilyanatia/PerlHP-bbs/blob/5ca77ba2a09b852b34e5f436071ff5e20f0a9932/bbs.pl#L419
          а для остальных -- грустно
          Ответить
          • вот это правильное название, это я одобряю
            https://github.com/lilyanatia/cal/blob/main/cal.c
            mpz_add_ui(tmp4, year, 4800 - (14 - month) / 12);
                mpz_tdiv_q_ui(tmp1, tmp4, 4);
                mpz_tdiv_q_ui(tmp2, tmp4, 100);
                mpz_tdiv_q_ui(tmp3, tmp4, 400);
                mpz_mul_ui(tmp4, tmp4, 365);
                mpz_add(tmp4, tmp4, tmp1);
                mpz_sub(tmp4, tmp4, tmp2);
                mpz_add(tmp4, tmp4, tmp3);
                mpz_add_ui(tmp4, tmp4, (153 * (month + 12 * ((14 - month) / 12) - 3) + 2) /
                 5);
                mpz_sub_ui(tmp4, tmp4, 32043);

            сразу видно, что cal
            Ответить
    • RENZOKU - это чит из GTA:SA?
      Ответить
    • ISO, а ты только что открыл для себя говняные острова и каловые пещеры мира Пи Аш Пи?
      Мы это дерьмо стебем уже скоро как двадцатьб лет
      Ответить
      • Завтра вы увидите то, что никогда не видели, это будет завтра, завтра.

        Завтра клуб пыхопутешествий покажет вам каловые горы и говняные острова.
        Ответить

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