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

    +162

    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
    <?php
    /**
     * Project:     Smarty: the PHP compiling template engine
     * File:        Smarty.class.php
     *
     * This library is free software; you can redistribute it and/or
     * modify it under the terms of the GNU Lesser General Public
     * License as published by the Free Software Foundation; either
     * version 2.1 of the License, or (at your option) any later version.
     *
     * This library is distributed in the hope that it will be useful,
     * but WITHOUT ANY WARRANTY; without even the implied warranty of
     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     * Lesser General Public License for more details.
     *
     * You should have received a copy of the GNU Lesser General Public
     * License along with this library; if not, write to the Free Software
     * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
     *
     * For questions, help, comments, discussion, etc., please join the
     * Smarty mailing list. Send a blank e-mail to
     * [email protected] 
     *
     * @link http://www.smarty.net/
     * @copyright 2001-2005 New Digital Group, Inc.
     * @author Monte Ohrt <monte at ohrt dot com>
     * @author Andrei Zmievski <[email protected]>
     * @package Smarty
     * @version 2.6.26
     */
    
    /* $Id: Smarty.class.php 3163 2009-06-17 14:39:24Z monte.ohrt $ */
    
    /**
     * DIR_SEP isn't used anymore, but third party apps might
     */
     echo ".";
     ?>

    Запостил: Itareo, 18 Апреля 2014

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

    • /bin/true все равно круче.

      А вот с закрывающим "?>" они рискуют. Там же конце \n может быть.
      Ответить
      • > Там же конце \n может быть.

        В старых пыхал был хак - этот \n удалялся. В новых его (хак) убрали?
        Ответить
        • Ха, действительно, убирает. Вот только удаляется только один \n:
          "<?php ?>\n" - ничего не печатает
          "<?php ?> \n" - печатает " \n"
          "<?php ?>\n\n" - печатает "\n"

          Edit: поправил пример.
          Ответить
          • это просто хак. а вдруг ты и на самом деле хочешь там чего напечатать.
            Ответить
            • В том-то и дело, что хак чинит только один случай. Случайно окажется лишний пробел или строка - и всё, получаем те же грабли.
              Более-менее нормальное решение - не закрывать ?> в конце файла. А ещё лучше - вовсе не связываться с PHP :).
              Ответить
              • ZF так и рекомендует: не связываться с PHP не закрывать тег в конце файла:
                For files that contain only PHP code, the closing tag ("?>") is never permitted. It is not required by PHP, and omitting it´ prevents the accidental injection of trailing white space into the response.
                Ответить
                • То есть, в конечном результате просто отказаться от возможности писать html в php файлах.
                  Ответить
                  • Писать html в php можно. Но нужно помнить, что:
                    1. Самый последний тег ?> ни в коем случае нельзя писать, если файл заканчивается php-кодом.
                    2. Если внутри есть html-вставки, то сразу после ?> один перенос строки может быть съеден при некоторых условиях.
                    3. BOM у всех файлов, включенных через include/require, будет напечатан.

                    Последний пункт не относится к теме обсуждения, но часто является источником глюков.
                    Ответить
                    • 1. Почему?
                      3. Ы :)
                      Ответить
                    • Мне кажется, или это костыль размером с Луну, встроенный в язык?
                      Ответить
                      • Кажется. Там целая солнечная система подобных костылей.
                        Ответить
                      • Это всё вытекает из порочности самой идеи смешивания логики и представления (а язык сам по себе построен на такой идее).
                        Ответить
                        • а в конце 90х - начале 2000х эта идея считалась гениальной:
                          - вставки кода в странице на серваке заменяются обычным html, все крайне наглядно
                          - параметры сами попадают в переменные
                          - интерполяция строк переменными
                          - неплохая стандартная библиотека
                          Ответить
                          • > неплохая стандартная библиотека
                            Наполовину спизженная из сишки.
                            Ответить
                            • именно! даже названия не изменены. вполне себе такая динамическая сишка для веба?

                              А ВЫ писали прогу для web на c по всем правилам cgi?
                              Ответить
                              • > А ВЫ писали прогу для web на c по всем правилам cgi?
                                Не, не пробовал. А что там сложного? Строка запроса и прочая инфа в окружении, запощенный контент - в stdin, ответ срать на stdout...
                                Ответить
                                • Сложного там и вправду для олдфагов нет, но молодежь, наверное, уже не шарит...

                                  лично я писал cgi скрипты, но не на сишке, а на перле... и вполне себе рабочие гостевухи, без аджакса, есесна
                                  Ответить
                                  • Скорее всего, я абсолютно не в тему, но в nodejs чтобы получить POST данные, нужно слушать события приема данных, и собирать их в переменную, а обрабатывать их можно уже когда произойдет событие end!

                                    Я таких костылей нигде не видел!
                                    Ответить
                                    • > нужно слушать события приема данных
                                      Эти события прилетают каждые N килобайт, и полученный фрагмент надо куда-нибудь засунуть? Вроде вполне адекватно для приема неизвестного объема данных асинхронным сервером, не вижу костыля...
                                      Ответить
                                      • именно!

                                        Вот пример функции, обрабатывающей POST запрос:

                                        function update(response, request)
                                        {
                                            if (request.method === "POST")
                                            {
                                                var data = "";
                                        
                                                request.on("data", function(chunk) {
                                                    data += chunk;
                                                });
                                        
                                                request.on("end", function() {
                                                    fs.writeFileSync('../static/img/colors.json', data);
                                        
                                                    response.writeHead(200, { 'Content-Type': 'text/html' });
                                                    response.end('success');
                                                });
                                            }
                                        }
                                        Ответить
                                        • > Вот пример функции, обрабатывающей POST запрос:
                                          Рискованная функция ;) Бесконечным chunked стримом можно надувать память ноды пока она не лопнет ;)

                                          А каких-нибудь более высокоуровневых библиотек для этого там нету?
                                          Ответить
                                          • Для локального использования делал.

                                            Но замечание верное - система не надежна. И избежать работы с подобными событиями можно использовав различные фреймворки, которые делают это все за тебя.

                                            А чтобы использовать nodejs нативно, приходится иметь дело с событиями и еще (оказывается) следить за размером входных данных. И подозреваю, еще много камешков скрытых :(

                                            По мне так это все выглядит чрезвычайно костыльно.
                                            Ответить
                                            • > По мне так это все выглядит чрезвычайно костыльно.
                                              Для приема файлов - нет, абсолютно нормально. Ну разве что стоило бы из коробки приложить готовый обработчик для сохранения в файл.

                                              А как там дела обстоят с multipart post'ами? Например форма + пара файлов? Самому надо разбирать заголовки mime контейнера? Простенькую формочку без файлов тоже надо обрабатывать аналогичным способом?
                                              Ответить
                                              • Тут ничего сказать не могу, так-как дальше функций-обработчиков, подобных той, что я привел выше, не пошел.
                                                Ответить
                                          • > А каких-нибудь более высокоуровневых библиотек для этого там нету?
                                            По умолчанию нет, но можно установить что-нибудь от сторонних дядь
                                            npm install formidable@latest

                                            P.S. Вообще, Node.js временами напоминает brainfuck: простая стандартная библиотека, возможность быстро начать программировать, но для того, чтобы заработало умножение, надо либо его реализовать, либо использовать стороннюю библиотеку.
                                            Ответить
                                            • > умножение
                                              О_о
                                              Ответить
                                              • Не, ну это в брэйнфаке умножение :)
                                                По-моему, работа с формами и клиентскими файлами для Node - это как умножение в программировании.
                                                Хотя, ниже Vasiliy верно исправил. Все мы помним целочисленное умножение в JS.
                                                Ответить
                                            • это Node.js перманентно напоминает js простая стандартная библиотека, возможность быстро начать программировать, но для того, чтобы заработало умножение, надо либо его реализовать, либо использовать стороннюю библиотеку.
                                              Fix
                                              Ответить
                                  • > а на перле
                                    Да на перле то и я писал. Но там модуль CGI из коробки есть. И куки и параметры он берет на себя. Поэтому там вообще элементарно.

                                    > без аджакса, есесна
                                    А в чем проблема? Аякс и через cgi неплохо летает. Я даже прикручивал недавно к перловым скриптам подобный код.

                                    В CGI одно противно - процесс каждый раз перезапускается, заново поднимает коннект к базе и т.п. На это уходит время...
                                    Ответить
                                    • > Но там модуль CGI из
                                      коробки есть. И куки и
                                      параметры он берет на
                                      себя.
                                      странно, я сам парсил и отдавал как есть.

                                      > А в чем проблема? Аякс и
                                      через cgi неплохо летает.
                                      в том, что тогда о нем никто не слышал. венда 98, 5ый ослик, нетскейп навигатор вроде бы 4ый и опера, вроде бы 7ая.
                                      я про аякс услышал позже, когда вычитал, что можно в документ скриптом добавлять еще один тег <script>
                                      Ответить
                            • В этом и есть самый смак. Можно повести аналогию с js для сервера не надо учить новый язык.
                              Вспомнилось
                              http://habrahabr.ru/post/161047/
                              так это Perl от PHP товарищ бы кончил гораздо раньше.
                              Ответить
                      • > костыль размером с Луну
                        За что Вы так бедную Луну, такой язык хороший.
                        Ответить

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