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

    +103

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    fputs(fopen("ttext.txt", "w+"),"Мега текст!"); # создание файла и запись
    fpassthru(fopen("ttext.txt", "w+")); # отображение
    copy("ttext.txt", "ttext2.txt"); # копирование
    fputs(fopen("ttext2.txt", "w+"), "скопированный Мега текст"); # запись
    rename("ttext2.txt", "dctext.txt"); # переименование
    fpassthru(fopen("dctext.txt", "w+")); # отображение
    unlink("dctext.txt"); # удаление
    fclose(fopen("ttext.txt", "w+")); # закрытие

    Запостил: Vasiliy, 29 Июня 2010

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

    • Где здесь пояснения, Vasiliy?
      Ответить
    • тутор для начинающих?
      Ответить
      • Для начинающих говнокодить.
        Ответить
        • И не говори. Неужели так сложно понять, что для создания новой программы нужно найти чужую и поменять копирайты? А они мучаются ещё, учат кого-то.
          Ответить
        • Вы догадливый о_О я там даже выделил как бэ намекая.
          Ответить
    • а где здесь flock?
      Ответить
      • где здесь fseek, или пыхопе такое не поддерживает?
        Ответить
        • http://lt.php.net/manual/en/function.fseek.php как ни странно
          Ответить
          • ohshi~ прогресс :)
            Ответить
            • fseek был всегда в php.
              вообще изначально 90% функций PHP было обертками вокруг Cных функций с такими же названиями
              Ответить
              • > fseek был всегда в php.
                вообще изначально 90% функций PHP было обертками вокруг Cных функций с такими же названиями

                почему тогда просто не использовать си?
                Ответить
                • указатели, арифметика указателей, типы, управление памятью - мартышкам такого не ослилить
                  Ответить
                  • Никто в си не заставляет использовать арифметику указателей.
                    Управление памятью - есть Boehm GC.
                    Ответить
                    • В сях надо как минимум знать чем int от long отличается, и строки нельзя сравнивать через ==, и встроенных в язык ассоциативных массивов нет, и вообще на сях макакам не комфортно писать -- думать все время приходится
                      Ответить
                      • > В сях надо как минимум знать чем int от long отличается, и строки нельзя сравнивать через ==

                        Это верно и для Java, которая считается for brain-damaged people не меньше php (в своей нише). Ничего, научиваются.
                        Ответить
                        • >>которая считается for brain-damaged people
                          это не правда:)

                          В мире java есть разные люди: есть и вполне себе нормальные. В мире PHP таких нет.
                          Большинству PHP разработчиков до сих пор не очевидно зачем нужны юнит-тесты, почему не нужно выводить ошибки в браузер, а из всех паттернов они с трудом назовут синглтон:)

                          Я это уже проходил.


                          Кроме того пишущие на java хотя бы имеют представление о том, что такое куча и стек, и даже (бывает так) запускают йоркит, и смотрят -- кто загадил кучу.

                          В PHP же обычно о таких вещах не задумывються
                          Ответить
                          • >>которая считается for brain-damaged people
                            >это не правда:)

                            Мопед не мой.

                            > В мире java есть разные люди: есть и вполне себе нормальные. В мире PHP таких нет.

                            Да что хоть. Везде примерно одинаковые соотношения.

                            > Кроме того пишущие на java хотя бы имеют представление о том, что такое куча и стек

                            С чего бы им знать что такое стек? В яве знание того, где хранятся объекты (в отличие, например, от C# с его struct'ами) не обязательно с точки зрения языка.
                            Традиция обсуждать такие моменты как куча, как мне кажется, шло/идёт с инициативы самого Sun'а. А так, простому ява-разрабу до лампочки это (никто его не принуждает понимать устройство, как напр. в си)... Как мне кажется, всё дело не в особенности ява-кодеров, а в разных политиках Sun и авторов PHP. (всё равно, знание того, что такое стек, не превращает говнокодера в хорошего программиста волшебным образом)
                            Ответить
                            • >>Да что хоть. Везде примерно одинаковые соотношения.

                              )))Вы возьмите какой-нибудь хорошо известный проект на PHP, и загляните внутрь. PHPBB например или PHPMyAdmin. Или drupal или jumla. И сравните, например, с magnolia cms на java.

                              Сразу и поймете в чем разница.

                              >>С чего бы им знать что такое стек? В яве знание того, где хранятся объекты (в отличие, например, от C# с его struct'ами) не обязательно с точки зрения языка.

                              Подобные вещи описываются в туториалах сана, и являются обязательными для scjp.
                              Возьмите любого джависта, который работает на джаве хотя бы год -- и спросите:)

                              >>А так, простому ява-разрабу до лампочки это
                              Без этих понятий -- здравствуй мемори лик.

                              Можно много еще привести примеров того, что у джавистов принято знать: java memory model например.

                              >> Как мне кажется, всё дело не в особенности ява-кодеров, а в разных политиках Sun и авторов PHP.

                              Вернее в отсутствии политики у PHP вообще. В отсутствии идеологии, код-стайла, JSR и прочего: потому язык похож на кучу мусора.


                              Вообще о чем мы говорим, если в PHP есть register_globals и magic_quotes? :))
                              Ответить
                              • По некоторым пунктам переубедили, хотя все доводы касались неговнокодеров и никоим образом не касались изначальной темы процентного соотношения говнокодеров к неговнокодерам в этих двух языках. Т.е. в любом взятом языке можно найти неговнокодера, и обсуждая только его, делать далеко идущие выводы. Я имею в виду, какой процент жабакодеров проходит scjp? Какой пргоцент беспокоится мемори ликами? Без этих цифр аргументы типа "понимание кучи является обязательным для scjp" особо ничего не доказывают.
                                Ответить
                                • Я думаю (чисто наугад) что говнокодеров среди джавистов процентов 30, а среди PHPшников -- процентов 80.

                                  Точными цифрами не обладаю. Во всяком случае я догадываюсь, где могут работать хорошие джависты (яндекс, джетбрейнс итд), а где могут работать PHPшники -- я не знаю.

                                  А с мемори ликами вообще ситуация особая: так как PHP приложение начинается и заканчивается сразу же (в случае CGI) или довольно быстро (в случае модуля апача), то о мемори ликах "можно" не думать, а еще можно "забывать" закрывать файлы и коннекты к базам данных, что успешно делают многие PHPшники.

                                  Очевидно что в мире сервлетов такая штука не прокатит.

                                  А логи? log4j мастхев в у любого явиста, а много Вы видели PHP приложений с логами?

                                  И кстати. Понимание стека и кучи важно так же и потому, что в жабе вполне себе есть примитивы, и в отличии от упомянутого Вами C# они автоматом не боксились до недавнего времени, так что понимание это все таки основопологающее. Хотя обратной стороной является ужасающая концепция врапперов, но тут уже ничего не поделаешь:)

                                  Остается добавить к этому невнятный, кривой API PHP, частично объектный, частично процедурный, использование ассоциативных массивов вместо структур и/или объектов, и всякие плюшки о которых я уже говорил(регистер глобал, вывод ошибок в браузер, мэджик квотес) и становится понятно что джава все таки помогает учиться программированию, а PHP мешает)))
                                  Ответить
                                  • Читаю про "невнятный, кривой API PHP", и смотрю исходники: предыдущий исходник пхп был написан в Kernighan & Ricci, а текущий - вот уже в GNU-style (копипаст, ололо!)

                                    И нормально так:

                                    #ifndef STACK_DIRECTION
                                    you
                                    lose
                                    /* ... */
                                    #endif
                                    Ответить
                              • Моя мысль такая, что жабаговнокодеры такие же говнокодеры, как и пхп-говнокодеры, и никакими заслугами не обладают, а если они и задумываются о куче и подобном - то только с инициативы Сана, который заботливо подталкивает их в верном направлении. Однако, такое подталкивание не превращает говнокодера в нормльаного программиста. У говнокодера таким образом появляется автоматическое понимание, как у надрессированной собачки, не "сам дошёл"...

                                Т.е., и там итам соотношения одинаковые плюс минус статистич. погрешность. Как мне кажется.
                                Ответить
                • Потому что на си нет register_globals, нельзя написать $a[2] = $a['sss'] и трудно выводить ошибки прямов браузер
                  Ответить
                • Хм... Ввести с клавиатуры два числа, сложить их и выдать на экран. Почему бы просто не использовать для этого ассемблер, зачем нам сдался тот же Си?
                  Смысл аналогии ясен, надеюсь.
                  Ответить
                  • Не ясен. Си - относительно высокоуровневый язы, особенно в отношении "ввести с клавиатуры два числа, сложить их и выдать на экран".
                    Ответить
                    • ...подобно тому как PHP, Perl, Python, Ruby, ASPшничество и т.д. - относительно ещё более высокоуровневые языки, особенно в отношении "сгенерировать длинную строчку определённого формата и выдать в браузер". Свои минусы тут, конечно же, есть, и они отлично известны. Но того факта, что писать веб-приложения на Си сложнее, это не отменяет.
                      Ответить
                      • > Но того факта, что писать веб-приложения на Си сложнее, это не отменяет.

                        Если юзать только стандартные либы - то сложно. Если заюзать некий фреймворк, который бы мимикрировал классы жабы иль дотнета (что-то наподобие glib/gobject'а), то - проще некуда. А так разница только в синтаксисе...
                        Ответить
                        • Поиметь такой фреймворк было бы весьма недурно, я согласен. Но тем не менее на Си всё равно было бы сложнее. Хотя бы потому, что в сценарных языках есть всякие вкусности вроде нетипизированных переменных, сколь угодно больших массивов, отсутствия необходимости думать о мемори ликах и так далее. Даже если в этот гипотетический фреймворк добавить реализации этого же всего и даже добавить костыли на дефайнах, призванные дать возможность писать поменьше кода - мне кажется, всё равно хоть немного да сложнее выйдет.
                          А вообще было бы любопытно изучить вопрос о том, нет ли уже такого готового фреймворка. Я, признаться, как-то не интересовался.
                          Ответить
                          • З.Ы. Загуглил, нашёл несколько поделок. Очень интересно, надо будет вникнуть как следует... Пока же пара цитаток на побаттхёртить:
                            If C++ would have been used instead of PHP, then 22,500 servers could be powered down (assuming a conservative ratio of 10 for the efficiency of C++ versus PHP code), or a reduction of 49,000 tons of CO2 per year. (это про Facebook)
                            Sure C++ would be faster running but not necessarily more efficient in terms of dollars (из обсуждения оттуда же)
                            Ответить
                            • да только неграмотное управление памятью привело бы к краху серва
                              Ответить
                              • Разрабы flickr'а сказали, что PHP течёт памятью как решето. Просто после завершения реквеста протёкшая память очищается - вот и всё. Так чот не проблема на деле-то.
                                Ответить
                                • мусор копится в кучу мегами - а потом освобождается полностью. в "чистом" ц ситуация не такая: забыл освободить - потерян кусок памяти
                                  Ответить
                                  • Никто не отменял регионы.

                                    И не забываем, что для си есть тоже сборщик мусора (куда более sophisticated, чем в говнореализации пхп).
                                    Ответить
                                    • допустим. как быть с указателями?
                                      Ответить
                                      • А что с ними?
                                        Ответить
                                        • они так же не для code monkeys - излишняя сложность, вот почему и ява и сышарп избавились от них
                                          Ответить
                                          • в сишарпе есть указатели

                                            в указателях ничего сложного нет, если не использовать арифметику (сложенние, вычитание) и какие-то аццкие хаки.

                                            а так, нужно просто взять себе за правило, что у выделяемых на куче объектов после типа нужно ставить звёздочку - и, в принципе, всё )

                                            в сишарпе есть ref -- передача по ссылке -- и это второе применение указателей в си (в стандартных функциях, например). как то же его освоили обезьянки-сишарписты.
                                            Ответить
                                            • в принципе, для того и были указатели, что бы арифметику юзать - низкоуревневый итератор такой. Ява довольно таки справилась с задачей доказать, что без них можно обойтись в большинстве случаев
                                              Ответить
                                            • >в сишарпе есть указатели
                                              Их, вроде, нельзя использовать без unsafe?
                                              В любом случае оно там не нужно. Разве что для портирования сишного кода как-то использовал...
                                              Ответить
                                              • > Их, вроде, нельзя использовать без unsafe?

                                                Это просто ключевое слово + ключ компилятору.
                                                На уровне же рантайма указатели - полноправный элемент
                                                Ответить
                                              • > В любом случае оно там не нужно. Разве что для портирования сишного кода как-то использовал...

                                                Ну да, оно полезно в основном только для общения с сишным кодом (и то редко).

                                                Хотя указатели в C# в некоторых местах быстрее стандартных средств. Ядровая библиотека (mscorlib) много где их использует, например очень много в реализации класса String.
                                                Ответить
                                    • А можно мне про сишный сборшик мусора почитать? Ссылочки не найдётся? Интересно, как устроено...
                                      Ответить
                                      • Страница автора: http://www.hpl.hp.com/personal/Hans_Boehm/gc/

                                        Вкратце: оно останавливает потоки и сканирует кучу, стек и регистры на значения, которые "похожи на указатели". Поэтому у сишного коллектора два минуса 1) Если на стеке/в куче лежит число, похожее на указатель, то реальный объект не сможет удалться 2) дефрагментация, потому что теоретически нельзя компактировать кучу :(

                                        А так если код не говнокод и не имеет хаки, то Boehm GC способен работать с любым уже написанным си-приложением, нужно только заменить malloc на gc_malloc
                                        Ответить
                          • > А вообще было бы любопытно изучить вопрос о том, нет ли уже такого готового фреймворка. Я, признаться, как-то не интересовался.

                            Я в свободное время ваяю велосипед по типу gobject, но с оглядкой на mono/java :\
                            Само использование такого псевдообъектного кода не сложное (синтаксис раздутее, может быть, в 1.3-1.5 раз), сложно то, что легко юзеркоду ошибиться, ибо язык не строгий...
                            Ответить
    • Каков смысл сего опуса? Научить первоклассника основам работы с файлами в php?
      Ответить
    • Кстати, открыть файл на на запись что бы сделать ему эфпассру (вывести на экран, а не то, что вы подумали) -- это пять
      Ответить
    • fclose(fopen()); я понимаю, что это типа обучалка, но она какбе намекает, что говнокодерам лучше всего сразу закрывать файл после открытия, а не пытаться с ним что-либо сделать
      Ответить
    • И ещё: нахера в некоторых моментах использовать w+, когда нужно только отображение ? риторический вопрос.
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • > fpassthru
      Файлом посру
      Ответить

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