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

    +164

    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
    <?php
     // Получение страницы напрямую или через проксю
    function getfile($GrabURL)
    {
     global $proxy_name,$proxy_port;
    
     if($proxy_name!="")
     {
      $f = urldecode($GrabURL);
      $proxy_fp = fsockopen($proxy_name, $proxy_port,$errno,$errstr);
      if (!$proxy_fp)
       return false;
      $out = "GET ".$f." HTTP/1.0\r\n\r\n";
      fwrite($proxy_fp, $out);
      $x = "";
      stream_set_timeout($OpenFile, 10);
      stream_set_blocking($OpenFile, 0);
      while (!feof($proxy_fp))
      {
       $RetrieveFile = fread($proxy_fp,8192) or last;
       $x = $x.$RetrieveFile;
      }
      fclose($proxy_fp);
     }
     else
     {
    
     $OpenFile = fopen($GrabURL, "rb");
    
     if(!$OpenFile) return "";
    
       $i = 0;
       $x = "";
       stream_set_timeout($OpenFile, 10);
       stream_set_blocking($OpenFile, 0);
       while (!feof($OpenFile))
        {
         $RetrieveFile = fread($OpenFile, 8192);
         $x=$x.$RetrieveFile;
        }
       fclose($OpenFile);
      }
     return $x;
    }
    ?>

    Аналог file_get_contents. По просьбам из #4065

    Запостил: mr.The, 23 Августа 2010

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

    • Даже сложно сказать, какой кусок нравится больше. Это нечто...
      Ответить
    • нда, этот код подчеркивают индвидуальность "писаря", ибо врядли ещё такой шедевр кто-нибудь сможет повторить
      Ответить
    • Ну, везде можно найти и за что похвалить :)
      Вот этот товарищ, например, определяет переменные до их использования:
      $i = 0;
         $x = "";

      В практическом смысле вещь спорная, но при отладке сразу видно - какая переменная что внутри себя может хранить :)
      Ответить
      • для этого существует венгерка, например. Она "лечит" отсутствие статической типизации.
        $int_i;
        $str_x
        Ответить
        • что только не придумают, лишь бы не писать на нормальных языках
          Ответить
          • Вообще PHP это _скриптовый_ язык. На нем нужно писать скрипты.
            Скрипт обычно помещается на один экран.

            Если писать на PHP серьезные приложения, то все его приимущества тут же превращаются в недостатки.

            Но люди этого не понимаю, и плодят какие-то CMSы, фреймворки, и чуть ли не системы документооборота.
            Ответить
      • за что тут хвалить то? Кусок бесполезного кода, и отсутствие статической типизации вовсе не минус.
        '0' == 0
        Ответить
    • Ну и о птичках - когда это писалось, то PHP5 еще не было и этих ваших file_get_contents не было.
      В 2007 году эта функция могла быть вполне неплохой (она может работать с прокси, в отличие от того же file_get_contents).
      Я бы даже сказал, что после напильничка это была бы даже хорошая функция для тех, кто Curl не любит.
      Всегда же хочется своими силами попробовать, без сторонних классов и библиотек, а? ;)
      Есть тупой копипаст:
      stream_set_timeout($OpenFile, 10);
      stream_set_blocking($OpenFile, 0);

      В первой части это работать не будет, т. к. файл открыт как $f
      Есть глупости, плохо отформатирован код, но все же я считаю это не ГК.
      Кто так не считает - пожалуйста, парируйте.
      Напоминаю, 2007, никаких file_get_contents не было.
      Так что это не "извращения с сокетами", по-другому никак было.
      Ответить
      • Я вам скажу, что тут никакой напильник не поможет. Тут тупо надо всё переписывать.
        Ответить
        • Перепишите, мы посмотрим.
          "Тупо" никогда ничего делать не надо, иначе ваш код может занять еще одно почетное место в этом цитатнике.
          Ответить
          • Хотите сойти за умного? В данном случае "тупо" означает не то, что при переписывании кода не надо думать. А то, что в данном коде разбираться бесполезно, его необходимо переписывать. Ваш КО.
            Ответить
            • Почему сойти? Я и так умный. Просто я придрался к слову.
              В сорока пяти строчках и разбираться-то нечего, мне так все сразу понятно.
              Если вы хотите нас удивить - перепишите этот код, так как вы считаете нужным.
              Я хочу видеть вашу позицию в коде, а не на словах.
              Ответить
              • негодуете доказательства? Всему этому можно было написать и интерфейс нормальный, навроде
                $httpClient = new HTTPClient;
                $httpClient->setProxy($url, $port);
                $httpClient->request($url, $options);

                и реализацию соответствующую.
                Ответить
                • Можно, не спорю.
                  Но для несерьезных проектов сгодилась бы и такая функция.
                  Ответить
      • >>В 2007 году эта функция могла быть вполне неплохой
        "вполне неплохой" эта функция могла быть в 1977м году. А потом люди открыли, что глобальные переменные это плохо, например.
        Ответить
        • Так я и не говорил, что это хорошо.
          А я говорил о самой функции, а не о том, как туда поступают данные.
          Ответить
          • да и сама функция не очень. Вы не реализовали и части HTTP. Половина серверов отфутболит.
            попробуйте получить результат яндекса например
            Ответить
            • Ну так что мешает добавить недостающие http-заголовки?
              Ответить
              • то, что они там строкой.
                Если бы там был хотя бы ассоциативный массив (об объекте я уже не мечтаю) было бы в сто раз лучше.

                Что вообще полезного в Вашей функции? Тот факт, что она умеет делать IF, и ветвится в зависимости от пустоты (или не пустоты) proxy_name?
                Ответить
                • Это не моя функция, с чего вы взяли.
                  Я просто говорю про то, что это не такой ГК, как его малюют.
                  Автор представил нам это именно как аналог файл_гет_контентса, я же просто оппонировал к этому высказыванию.

                  И мне никогда не мешало отправлять заголовки строкой. Если честно - никогда не пользовался курлом при работе с удаленными файлами.
                  Ответить
    • >> global $proxy_name,$proxy_port;
      сразу в печь
      Ответить

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