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

    +154

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    <?php
     $dPh = fopen("photos.cfg", "r");
     while (($aCrow = fgetcsv($dPh, 0, "|", "}")) !== FALSE){
    	$sNof = explode(".", $aCrow[0]);
    	echo "<a href='photo/_html/show.php?ph=$sNof[0]'>\n";
    	echo "\t<img src='photo/_thumbs/$aCrow[0]' alt='$aCrow[1]'>\n";
    	echo "</a>\n";
     }
    ?>

    Скрипт, который создаёт превьюшки со ссылками для фотогаллереи.
    photos.cfg - содержит строки вида: Имя_файла.jpg|Описание, которое видит пользователь.
    show.php - отдельная тема.

    Запостил: Ambilight, 13 Августа 2009

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

    • И чо? Просто низкий уровень. При чем тут говно?
      Ответить
    • Хм... Не очень понял в чём тут считается говнистость?

      1.) Опять же из-за того что писано на PHP?
      2.) Из-за того что вызов echo повторён, что делает лишние вызовы функций? Если так то в PHP такие вещи пренебрежимы, ибо сам язык несёт порядком большие потери ;). Следовательно из-за этого считать говном бессмысленно.
      3.) Из-за того что нет close соответсвующего fopen? Дак это в мире PHP тоже принято считать нормальным, AFAIK. Ведь вероятная логика PHP-кодера в том, что "когда программа завершится, интерпретатор сам закроет все лишние дискрипторы, зачем его лишать такого удовольствия". (видел и намного хуже, ругался-ругался, а в ответ просто получил, что я - зануда)

      Хотя возращаясь к пункту 1.) и затрагивая пункт 3.), php-кодеры, сколько я их видел в реальности, вообще не пытаются создавать красивый код; хотя с другой стороны PHP, IMHO, для этого и не предназначен :).

      Всё это я говорил к тому, что данный кусок кода не вызывает ни интереса, ни улыбки.
      Ответить
      • На PHP можно писать очень неплохо, с точки зрения архитектуры. ZendFramework, к примеру.
        Ответить
      • Говнистость, подозреваю, в:
        1)нет проверки, открылся ли файл правильно (он может быть занят);
        2)HTML прямо в коде, причем еще и довольно кривой (никому не нужные \t\n, неэкранированный alt - потенциальная XSS-уязвимость, для картинки не указаны размеры, что приведет к "прыганию" страницы по мере загрузки картинок).
        3)благодаря четвертой строке некорректно обработает имя файла вида my.picture.jpg
        4)файл таки надо закрывать сразу же после использования - гораздо меньше вероятность, что файл навернется при проблемах в остальной части скрипта;
        5)...и это только на первый взгляд :).

        А красивый код можно писать на чем угодно. Красивый код - продукт мозга, а не языка программирования.
        Ответить
        • Да, мелких недочётиков тут полно, но ничего крупного я не вижу :)
          1.) согласен;
          2.) "\t" и "\n" впринципе, IMHO, имеют свою пользу, этоговый HTML-код становится читабельнее :). По поводу уязвимости, я так понимаю, тот кто писал э
          тот код, тот наполняет файл из которого идёт чтение, т.е. впринципе возможно так и задумано с определёнными требованиями к содержимому файла. Тут, IMHO, сложно придраться не зная истории этого куска кода)
          3.) аналогично пункту (2), возможно так и задумано, просто выставлены дополнительные требования к содержимому файла;
          4.) согласен;

          А по поводу красивого кода, я абсолбютно согласен. Просто на некоторых языках удобно поступать одним образом, а на других - другим образом.

          Я на PHP не пишу, знаком с ним по средставм лишь минимальной отладки чужого PHP-кода. Ламерский вопрос, в PHP есть понятие поинтеры? Как красиво в PHP в так называть "строковой переменной" (эквиваленте "char*") временно убрать первый символ, а потом вернуть назад?

          Я ни в коем случае не хочу холиварить, просто интересуюсь :).
          Ответить
          • "... тот кто писал этот код, тот и наполняет ..."*
            Ответить
            • 2-3)все-таки, для того, чтобы избежать уязвимости, надо просто три раза написать htmlspecialchars, и тогда уже все равно, кто заполняет таблицу.
              Ну и строчку $sNof = explode(".", $aCrow[0]); заменить на $sNof = substr($aCrow[0],0,strrpos($aCrow[0],".")); (и чуть ниже $sNof[0] поменять просто на $sNof). Работы - максимум на пару минут, но возможных будущих проблем становится _гораздо_ меньше.
              Код должен быть устойчивым, а пользователь по умолчанию считается обезьяной с гранатой.
              ...
              В общем понимании указателей в PHP нет. Чтобы убрать первый символ, надо использовать substr или что-то наподобие.
              Ответить
              • Спасибо, понятно. :)... Из-за таких вещей то я и не люблю PHP. Для того чтобы сделать столь примитивную операцию, как убрать первый символ на время, надо делать такую огромную операцию как substr (по тяжести как strcpy()), а потом чтобы вернуть concatination (опять же по тяжести как strcpy()). Я люблю когда есть возможность тупо сделать "str++" и "str--" :)

                Я никого не хочу обидеть своим пунктом 1.), просто есть многие вещи, которые как мне кажется принципиально невозможно написать красиво на PHP... Но с иной позицией спорить не буду :)
                Ответить
                • а если не секрет, зачем понадобилась "примитивная операция" по временному убиранию первого символа ?
                  Ответить
            • а, и еще. "\t\n" повышает читабельность кода, но это нужно только программисту, а отдавать эти символы пользователю - лишний ненужный траффик (немного, конечно, но все же).
              Для примера зайдите на Яндекс и посмотрите исходник.
              Ответить
    • И что ZendFramework? Я согласен, что можно написать красиво на нем можно (в меру PHP), но причем здесь IDE? А так согласен с xaionaro.
      Ответить
      • Мне показалось, или вы путаете ZendFramework и ZendStudio?
        Ответить
      • Видимо Вы и xaionaro далеки от этого языка.
        Поэтому Вы сказали глупость.
        Ответить
    • i v chjom problema ? u dev'a est' tol'ko dostup k fajlam (dumaju tak) organizoval spisok v vide CSV (mozhet i cherez svoj backend ego update'it), djorgaet ottuda, i vyvodit, to chto echo dofiga - ne sut', mozhet on pishet tak uzhe 5 let, to chto fclose net, zdes' etogo ne pokazanno, ne dumaju chto eto ves' kod, nizhe my ne vidim chto proishodit, ne WTF...

      p.s. mne kazhetsja stali zabyvat', chto takoe WTF ili luche WTFC (What A Fucking Code)

      p.s.s. to chto PHP pozvoljaet tak pisat', vina ne v dev'ah, a v samom jazyke

      p.s.s.s pisat' na PHP mozhno normal'no.
      Ответить

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