25 ошибок начинающих PHP разработчиков

25 PHP

Пожалуй продолжу свою незамысловатую серию 25, в этот раз вспомним о наших ошибках…

  1. Книга по PHP за 2002 год как источник знаний – это уже история, советую “PHP 5. Профессиональное программирование” – Э. Гутманс, С. Баккен – ISBN:5-93286-083-9, иль даже поновее…
  2. Использование web-сервера, где “всё включено” (Denwer и еже с ним) – научитесь сетапить сами, потом успеете перейти на полуфабрикаты
  3. Используем простенький редактор с подсветкой синтаксиса – пора взрослеть и переходить на IDE, и с IDE увеличивается скорость разработки, особенно в больших проектах, где не один десяток классов.
  4. В php.ini включен параметр register_globals – отключаем это ЗЛО, по умолчанию отключен, но Вам он зачем-то понадобился
  5. Реализация “index.php” содержащая приблизительно следующий код: <?php require_once $_GET[‘mod’]; ?> – это уязвимость, зовется PHP инъекцией – всегда проверяйте входные данные.
  6. Реализация авторизации, когда строка запроса к БД содержит что-то типа: “SELECT * FROM users WHERE login=”.$_GET[‘login’].” AND password=”.$_GET[‘password’] – читаем что такое SQL инъекции (это относится ко всем входным данным и SQL запросам)
  7. Доверяем POST переменным больше чем GET? – Будьте уверены подделать так же легко, так что проверяем
  8. AJAX это хорошо, дырявый AJAX – плохо – не забывай проверять права доступа для функций вызываемых в AJAX’е
  9. Не проверяем залитые пользователями файлы – теперь и мы знаем что такое PHP Backdoor
  10. Присваивание в условии: <?php if ($auth = true) { … } ?> такую ошибку Вы будете долго искать – старайтесь избегать подобных конструкций
  11. Переписываем функции PHP – воспользуйтесь поиском по manual’y
  12. Выражение <?php if (array_search(‘needle’, $array) != FALSE) {…} ?> – не сработает если искомый элемент доступен по ключу 0 либо “” – читаем внимательней manual по каждой функции
  13. Работаем под windows, хостинг на linux и сайт не поднимается – имя файла index.php, Index.php, INDEX.php и т.д. это все разные файлы для linux систем, а мы про это забыли
  14. Отключение вывода ошибок – код должен быть чистым  – так что error_reporting(E_ALL) Вам в помощь, следите даже за Notic’ами
  15. Залив проект на хостинг – отключите вывод ошибок на экран – логируйте их в файл – не будете краснеть потом
  16. PHP файлы имеют не стандартное расширение (к примеру .inc вместо .php) – если не защитить такие файлы, то может быть очень стыдно
  17. В рассчете на short_tags, поленились писать польностью <?php … ?> – теперь на новом хостинге переписываем шаблоны
  18. Понадеялись на magic_quotes, теперь наше приложение надежно как швейцарский … сыр
  19. Соблюдай стандарты кодирования и пиши комментарии к коду – твои последователи скажут спасибо
  20. Не пиши маты в сообщениях об ошибках и комментариях – заказчик может просматривать и тогда прийдется долго оправдываться
  21. Читают статью http://php.spb.ru/php/speed.html и думают, что только так можно/нужно оптимизировать код – это “блошиная” оптимизация относится к PHP3
  22. Реализуем функционал БД средствами PHP – array_search вместо WHERE, ну и другие чудеса незнания SQL
  23. Стучимся к БД в рекурсии – стараемся обходить подобные реализации
  24. Не нужно забивать гвозди пасатижами – “Мне надо реализовать гостевую книгу – возьму-ка я свой любимый набор библиотек на 6 мегабайт”
  25. Узнали Smarty, и теперь уверены, что научились разделять логику и отображение

Если есть что добавить – пишем в комментариях…

41 thoughts on “25 ошибок начинающих PHP разработчиков”

  1. IDE, IDE… А де знайти гарне, легке ІDE, яке не вижирає всі 512 Мб оперативки та не має нічого зайвого?
    Eclipse, Aptana — на Java, не влаштовують. Порадь щось, будь ласка!

      1. Сколько Вам платят за такие комментарии? :) Оно отличное для людей, которые не понимают ущербности технологии как таковой. О её заявлениях о том, что в следующих версиях будет лучше, и постоянных отыгрышах назад. О том, что из 500 программистов на PHP программистов бывает от силы 5. А пользователями IDE будут в основном остальные. :)

  2. >> теперь наше приложение надежно как швейцарский … сыр
    Улыбнуло :)

  3. Отличная подборка, должен знать каждый! Особенно понравились ссылки на поиск в гугле, с юморком :) сузил поиск до поиска только в рунете и столько интересного выяснил…

  4. 27. Данные надо обрабатывать htmlspecialchars, mysql_real_escape и многими другими функциями чтоб они стали “безопасными”, это cамая главная ошибка большинства не только начинающих но и опытных программистов.
    (c) http://dkflbk.nm.ru/php_basic_err_1.html

  5. А вот в каментах по какому принципу посортированы месаги?
    там где дата и время указано…
    Это связано с пунктом 22 ?
    :-)

  6. Улыбнуло, конечно…
    Самое главное – следовать пункту 20. Потом очень неудобно вытаскивать из приложения слова “Процесс совокупления PHP и MySQL начат” :D

  7. @Jeurey:
    O_o – это у меня в шаблоне формат даты странно отрисовывается, сейчас подправлю…

  8. Большинство описанных ошибок характерны для неопытных программистов в целом, без привязки к ПХП.
    Например, я перед тем как стал писать на ПХП, имел лет 10 опыта писания на С++ и поэтому мало
    с чем из списка столкнулся.

  9. Присваивание в условии: такую ошибку Вы будете долго искать – старайтесь избегать подобных конструкций

    Уже писалось, что лучше не избегать, а писать вот так:

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

  10. @Станислав Малкин:
    Ссылочку подправлю, с “code” чуть-чуть пошаманил – поменял код тулбара… :)
    Далее тест…

    <?php echo "PHP" ?>
    <html><h1>HTML4 Strict</h1></html>
    alert("JavaScript");
    div#css{color:#fff}
  11. ГДе найти IDE лёгкое незнаю, а вот компьютерных магазинов кучу найти можно и мозгов компу добавить. Для разработки можно и комп немного получше взять. 512 для одного Windows XP уже нерекомендуется, а вы ещё разрабатывать с такой оперативкой хотите. Эдитор у меня только если один файл открыть по быстрому и чтонибудь поправить, здесь нестоит IDE грузить, да и тот с подстветкой.

    Как правило проекты делаются не полностью с нуля, а на чём нибудб, будь то Typo3, Drupal, Joomla и куча других. систему выбирает заказчик, который вообще неразбирается, но слышал…

    И вы хотите сказать, что он должен оплачивать время которое вы тратите на поиски нужного фрагмента кода? А вот тут IDE как раз и очень хороший инструмент (по мне так Zend хороший инструмент), который поможет вам очень быстро найти класс, добратся до него и поправить что нужно, подсветит вам классы, функции и передоваемые к ним вариаблы.

    Есть кончено и недоразумения с ним, например если взять OS Commerce так там много классов для админки просто дублируются, или немного изменённые, а по стандарту люди недумаю устанавливают как есть, всё в одну папку и только потом как в тупике находятся обращаются к более понятливым в этом деле (даже не сразу к програмисту, а сначала знакомому, потом знакомому знакомого и так далее). Вот тут в таком варианте IDE потается и посылает вас к другому классу или подсвечивает направильно /admin стоит выше по спуску чем /class поэтому высвечиваются классы из админки.

    Но в общем IDE помогает вам экономить время, деньги и главное нервы. Вообще непонимаю людей, которые говорят, Notepad а остальное всё фигня, вы деньги тоже на счётах пересчитываете? Вообще нужен ли комьютер всё фигня, можно и книжками обойтись, и сотовые ненужны, зачем давайте все с телефонных будок звонить. Неиспользовать технические возможности это просто безсмысленно!!!

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

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

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

  13. 2 Vladson
    вот удивляют меня такие люди.

    проще пересмотреть свои взгляды? проще чем что? это ж глупости. в IDE писать ПРОЩЕ. точка. с этим не поспоришь.

    какой смысл держаться за старое? может таки проще пересмотреть свои взгляды(с)?

    по секрету ВСЕ сайты можно писать в блокноте. вопрос только зачем? чтобы рассказывать всем, что я такой крутой и написал сайт в блокноте?

  14. И так есть 2 Варианта, создания сайтов:

    1. вариант
    Ничего особенного, сайт как у всех. IDE ненужно, блокнот тем более, берётся CMS, загружается на сервер, проводится интсаляция, делаются настройки, подвязывается шаблон/тема. Для создания и правки шаблона требуется какаянибудь программа, типа Dreamweaver. Здесь пожайлуста без сказок, типа можно нотепадом и так далее, неудобно и нерационально, Визуально делается, и код улучшается прям там же, с подсветкой и так далее. Про то что CMS ненужна, всё ерунда. CMS быстрее настроить, и обновлять, чем те же самые HMTL странички.

    2. вариант
    эксклюзивный проект,
    занимает больше 1 файла в пхп. Но честно подумать 10ю файлами тоже необойдётся, и как не крути с IDE удобней.

    Про маленькое количество, поставте любую CMS и посмотрите сколько там строчек кода. При таком количестве, с нотепадом, далеко неуйдёшь. И честно сказать, последнее время никто непишет всё с нуля сам, а и спользуются всегда CMS, Frameworks и в крайнем случае чужие классы и функции.

  15. поставте любую CMS и посмотрите сколько там строчек кода. При таком количестве, с нотепадом, далеко неуйдёшь

    В том то и дело что такое количество строчек не нужно 99% сайтов. Куда рациональнее сделать 4-5 файлов по 4-5кб кода (не считая шаблонов)

    IDE развращает, привыкнешь что тебе всё дозволено и начнёшь плевать на рациональность и стрелять по комарам из пушки…

    Далеко надо идти когда ближе того что нужно нету…

  16. Для тех кто увлёкся и приводит в пример системы управления ракетными установками напомню

    25 ошибок начинающих PHP разработчиков

    Так-же как театр начинается с вешалки, РНР начинается с блокнота (пусть даже и с подсветкой кода)

  17. Мы что сателиты на пхп делать собираемся или сайты писать? Лубой сайт должен жить, да хотябы из соображений сео. Начинается с нескольких страниц, но довольно быстро, сайт начинает рости. Само позне, после разговора с сеошником, начинает владелец сайта добавлять новые оптимизированные страници и так далее, захочет скорее всего news и так далее, и как раз тут то и приехал проект со своими 4-5 страницами кода.

    Я писал уже статью по этому поводу, правда на немецком, надо завестись как нибудь ещё одним блогом и дублировать всё на русском.

    Так вот почему же я против, написания своих 5 файлов? Да всё очень просто. Скажим, вы зделали сайт, на своём маленьком скрипте PHP и через пару месяцев, приходит клиент и говорит, мне нужны новости, галерея для портфолио, и так далее. Как вы это всё будете прикручивать, к своему супербыстрому и супермаленькому скрипту? Сколько это займёт времени?
    Установив CMS в том же случае с клиентом, зальёти эти самы дополнительные модули, и зделаете ему всё что нужно, за пол часа.

    А по поводу ракетных установок, я бы сказал, что лучше заниматся ракетными установками, чем делать, с бумаги самолётики. Через несколько месяцев, клиент поймёт, что ему нужно больше чем сайт визитка, для успешного бизнеса в интернете. Так что лучше об этом позаботится зарание. А если он этого непоймёт, то так и так дело гиблое.

    Моё личное мнение, если писать на своих скриптах, то это вытягивания денег у клиента, при каждом разширении системы дополнительными возможностями.

    Возьмём к примеру межгалактическую ракету из моего арсенала Typo3. Вы устанавливаете ваш маленький скрипт, из нескольки файлов. Я в то время устанавливаю этого громоздкого чудища.

    Проходит неделя, клиент подумал и решил выкладывать, проспекты на сайт, вам приходится дописывать, переделывать, клиенту башлять, а у моего монстра всё для этого уже есть.

    Прошла вторая неделя, он хочит добавлять на сайт в тексты картинки, у вас надо дописывать, и так далее у монстра уже всё это есть.

    Проходит месяц, клиент хочет новости на сайт, у вас дописывать, и так далее(а за сколько минут вы новости на сайт добавите?) На монстре скачивается с репоизиторе, за 5 Мин модуль, за последующие 10 минут, настраивается, итого 15 минут работы, думаю к своему скрипту вам побольше времени понадобится?

    Проходит ещё месяц, и клиент узнал, что есть такое мощное выражение SEO которое его выведет на первые места, и принесёт кучу клиентов, там нажно немного метатэгами, титлами, урлами и так далее занятся, на монстре устанавливаем за 15 Минут все нужные модули для этих дел. Сколько понадобится вам времени?

    Но чтото у клиента после оптимизации неочень то дело идёт, черезчур конкуренция большая, и вот он решает обзавестись несколькими доманами, заточенными под определённые запросы, ну короче наделать сателитов кучу, но управляемых, так как он на них собирать трефик хочет, на не просто увеличивать бэки. Добавляем в монстре все эти домены, подвязываем темплэты и короче за короткое время этих настроек, получает клиент, все его сайты из одной админки, удобно не правдали? Сколько вам понадобится с вашим скриптом на это времени?

    Сайт должен расти и развиватся, иначе он людям и поисковикам неентересен, заранее планируя оставатся на своём сайте везитке, говорит о том, что вообще нечего лезть в интернет. Самое трудное, в начале угадать, в какое направление сайт будет расти, и от этого выбрать правильный путь.

    Написать, 4 – 5 страничек, которые клиент может обрабатывать, изначально путь в любом случае неправельный и ведёт к тому, что сайт прийдётся в будущем полностью переробатывать, или на сайте можно сразу крест поставить.

  18. Вадим Шульц, размышляете вроде грамотно, а вот правописание – просто ужасное, читать такие полотна безграмотности – очень отвращает :(

    Такое ощущение, что и школу не закончили..

  19. Ну вот извеняюсь, живу в германии, русский язык в школе, только начальные классы, но по сравнению со многими, я вообще хоть писать ещё умею, многие только в устной форме могут, и то мат через слово.

  20. Зря вы так на человека…

    По теме IDE. “Когда я был маленький” – я использовал:
    1. Bred
    2. TotalCMD
    3. Putty
    4. EMS MySQL Manager

    Перешел на никсы. Bred-а нет, TotalCMD обломился, Putty – заменился консолью, EMS – тоже отпал.

    Сейчас сижу в Eclipse Zend Studio и все это есть у меня в нем. Если нет разницы – зачем устанавливать больше?

    PHP-ман под рукой, подсветка кода, профайлер, дебаггер, MySQL-манагер, удаленное редактирование проекта (ftp), javaDOC…

    Да всего не перечислишь. Тем, кому хочется возвращаться на 4 разных продукта – пусть делают это. С этой IDE я врядли когда-нибудь слезу. Ибо удобно… А те, кто сопротивляются про 4 файла-скрипта… Эх, у меня фреймворк свой на 800кб. Видимо, тут блокнот уже не поможет, правда? :)

  21. Я бы 14 пункт поправил всё-таки:

    error_reporting(E_ALL | E_STRICT);

    И в перспективе поможет избежать больших проблем. Да и вообще! =)

  22. 23. Стучимся к БД в рекурсии – стараемся обходить подобные реализации

    А что можно делать вместо этого?

  23. >>19.Соблюдай стандарты кодирования и пиши комментарии к коду – твои последователи скажут спасибо

    Я бы порекомендовал писать самоописывающий код. Для источника сойдет Мартин Фаулер.Рефакторинг.

    В топку комментарии (оставить только там, где без них ну уж совсем никак). Все остальное – неправильная работа программиста. Если гляды на код, для того, чтобы понять его нужны комментарии – такой код должен быть переписан.

  24. Майк, в целом согласен, но уж больно категорично — сектой попахивает. Часто программист обязан писать комментарии, так как это предписывает корпоративный стандарт ведения документации. Как минимум, phpdoc’овкие @param и @return требуются во многих проектах.

  25. 2 Вадим Шульц

    Думаю вопрос использовать или не использовать CMS должен решаться на этапе формирования ТЗ совместно с клиентом. Если Вы выберите, к примеру, typo3 или вообще закрытую, а клиент с Вашим выбором будет не согласен, но узнает о нем только когда Вы сдадите работу, то о сотрудничестве вряд ли дальнейшем речь пойдет.

  26. Идиот.
    Если бы ты знал всю мощь у удобство Денвера, ты бы не писал подобную “статью”. Те кто понимает насколько удобен Денвер, работают намного быстрее. Зайди к Димке Котерову на dklab и посмотри какие гуру рунета используют Денвер в своей работе и восхищаются им, клоун ты хохлиный. На нём отлаживался например Мой Круг Яндекса. Так что, убейся, автор…

  27. @Алексей:
    Вы наверное решили пообщаться тут с самим собой, по крайней мере обращение точно по адресу…

    Прошу – внимательней прочитайте название статьи, и еще внимательней пункт номер 2, и возможно до Вас дойдет маразм Вашего комментария…

  28. Denwer – кастрированный (простите) Апач.

    ” 2. Использование web-сервера, где “всё включено” (Denwer и еже с ним) – научитесь сетапить сами, потом успеете перейти на полуфабрикаты”. Сначала сам думал – “Денвер, рулл”, но когда вручную поставил apache, php, mysql, мой взгляд резко поменялся. Я не “опускаю” денвер, наоборот, для “гуру” это самое то – не надо заморачиваться с настройками. Но для общего понимания работы http-сервера ручная установка Апача очень помогает ;)

  29. По пункту 12: можно было бы сделать его несколько шире, а именно: не путаем != и !==, а также == и ===.

  30. Сумбурно, категорично, непонятно.
    Хотелось бы развернутых объяснений, почему так а не иначе.
    В частности:
    “2. Использование web-сервера, где “всё включено” (Denwer и еже с ним) – научитесь сетапить сами, потом успеете перейти на полуфабрикаты”
    Почему? Зачем нужно сетапить самим?
    На хостингах(особенно дешевых) сервер уже установлен и ковырятся в его настройках не позволяется. В качестве особой милости могут установить какое-нубудь расширение, которого изначально не было.
    В общем, хотелось бы развернутой аргументации по поводу данного тезиса.

    “21. Читают статью http://php.spb.ru/php/speed.html и думают, что только так можно/нужно оптимизировать код – это “блошиная” оптимизация относится к PHP3 ”
    Не понял, что написано. Вы согласны с этой статьей? Вы не согласны с этой статьей? Вы согласны с этой статьей только по отношению к PHP3?

    Относительно использования IDE: в статье приведены ошибки которые допускают совсем уж начинающие PHP разработчики, типа всяких инъекций и разного регистра в именах файлов.
    Я думаю, что человеку, который не знает таких элементрарных вещей не стоит браться за проект “где не один десяток классов”. Можно наломать дров. А в маленьком проекте возможно наличие IDE не так уж и важно. Или IDE может быть полезно и в маленьком проекте?

    P.S. Сбоку прямо поверх окна ввода текста висит рекламный баннер и закрывает примерно 20% вводимого мной текста. Так что ввожу вслепую. Вы реально профессионал в сайтостроении?

    1. 2. Вы собственно привели вполне правильный пример – дальше дешевого хостинга не уйдете.
      21. Да – это оптимизация относится к PHP3

      IDE – ускоряет разработку web-приложений – это и автодополнение, и валидация и дебаг, и даже в маленьком проекте – могу это смело утверждать, основываясь на собственном опыте.

      P.S. Браузер? Разрешение?

      1. По поводу хостинга и сервера: мне кажется что для домашних хобби-проектов приобретать выделенный сервер жаба задушит. А к созданию коммерческого сайта требующего выделенный сервер новичка не подпустят. Так что углубленные знания по устрановке и настройке сервера понадобятся только тогда, когда разработчик перейдет из разряда новичка в разряд среднепродвинутых профессионалов.
        Поэтому я думаю, самостоятельную установку и настройку сервера вполне можно отложить на потом, когда эта потребность реально возникнет.

        По поводу ошибки:
        Броузер: IE 6.0
        Система: Windows XP SP2
        Разрешение: затрудняюсь сказать. Размер окна больше чем 1024Х768 и меньше чем 1600Х1200. По крайней мере средняя часть этой страницы по ширине умещается целиком и еще примерно столько же занимают поля.

        В начале это поле для ввода текста по ширине не залезает на рекламу, но как только я ставлю на него курсор и начинаю печатать, его ширина скачком увеличиваетс и правый край оказываетя под баннером.

  31. Не согласен с 17 и 24.
    short tags делает создание шаблонов более удобным(включить его – не проблема), а с 24 – т.к. не вижу минусов.

  32. EditPlus 3
    просто привык :)
    приятно подсвечивает ну и есть настройки если покопатся
    при первом просмотре уж очень прост
    но есть код-фолдинг и другие навороты через настройки

    присмотрелся к описаному выше, понял что на двух курсах ПХП и МАСьКИ
    многому научился , слава Линде.Ком + тех.инглишь аплевелинг :D

    прикиньте прикол парни

    начал учить полгода назад ПХП, одновременно , просматривая уроки,
    создал свой проект (дипломный, к тому же первый сайт…)
    с форумом, добавлением/редактированием/удалением объявлений и организаций
    с сортировкой их просмотра по типу категории или их комбинации
    и админкой (удаление пользователей, организаций, комментов форума, создание тем форума и их удаление)

    сам себя теперь боюсь… и всё это было с ООП, хоть и на локальном WAMP-е

    не переставайте учится особенно если это вам интересно и вы чувствуете ччто есть талант
    … и забейте на лень и пиво, они не кормят а только доят !

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.