Pull to refresh

Comments 230

еще «file.php.gif» на некоторых хостингах выполняется как php файл,… или это к 9-му относится..)
Такая контрукция работает только в том случае, если в настройка веб-сервера не прописан MIME-тип для расширения .gif — в таком случае он посмотрит на то, что стоит перед этим расширением и обработает как php-скрипт.

Отсюда следствие — при проверке имен загружаемых файлов использовать не логику «это нельзя, а остальное можно», а «это можно, остальное — нельзя». В таком намного меньше спорных вопросов, и ситуация из абзаца выше не произойдет.
«Ежегодный топ-25 ошибок PHP программистов».
В точку. Более того, ошибка номер один большинства похапистов — стремление к изобретению велосипеди и нежелание использовать уже готовые фреймворки.

Радует только, что большинство ньюбов в веб-программировании начинают свой путь с ПХП. И этот язык выступает неким буфером для Руби и Питона, защищая их от неопытных ручек. Но это временно, к сожалению.
Вы начали с руби и питона? Сразу? В 16 лет? Памятник вам.
Я начал с ПХП в 14, если вам интересно. Сейчас мне 21 и я Rails-разработчик. На самом деле начать с Руби ничуть не сложнее, как показывает опыт моих товарищей. Так что не надо.
Если «Так что не надо», так зачем тогда наезжать на ПХП-разработчиков?
как это зачем?! потому что «Сейчас мне 21 и я Rails-разработчик» :)
Я не наезжаю на ПХП-разработчиков, я наезжаю на ПХП. Я сам был ПХП-разработчиков, плюс я знаю много хороших программистов, которые сейчас используют ПХП в качестве основного языка. Хотя наезжать на ПХП, конечно, очень неблагодарное занятие на Хабре ) Простите, если кого обидел.

Идея моего комментария заключалась в том, что сейчас большинство начинающих веб-разработчиков стартуют с изучения ПХП. Вскоре, на мой взгляд, эта ситуация изменится и многие будут начинать с Руби (Rails) и Питона (Django). Это, скорее всего, негативно скажется на качестве кода, написанном на этих языках.
UFO just landed and posted this here
С руби начинать существенно проще и стократно приятнее. С питона — где-то в промежутке между пхп и руби :), но тоже всяко приятнее.
Уеб разработку я начинал с перла и даже он лучше пхп. В мои 16 лет уеба небыло, тогда я знал калькулятор Б3-34, алгол-60, паскаль, фортран, рапиру и бейсик.
Вы предлагаете ставить всем неупёртым и всем нелентяям? Так ведь памятников не хватит.
вы разрабатываете Руби и Питон? по-моему нет! так что их никто не защитил от «неопытных ручёнок»
Не очень понял ваш комментарий, простите.
И этот язык выступает неким буфером для Руби и Питона, защищая их от неопытных ручек
как я понимаю ИХ — это питон и руби. Ну какая вам разница кто на них пишет!? Вы же не являетесь разработчиком этих языком…
любому человеку, считающему себя профессионалом, неприятно, что его инструментом пользуются толпы нубов.
Любому человеку приятно, что его инструментом пользуются.
Ничего подобного. Если я придумал отвертку и вижу, как кто-то забивает ей гвозди, мне станет омерзительно.
А я просто постараюсь объяснить, как ей правильно пользоваться.
Изобретение велосипедов заставляет думать и развивает думалку. Если есть свободное время и вдохновение — почему бы не поизобретать? :)
Очень полезно, для начинающих!
Вот ещё советы:
1) Если что-то можно сделать без regexp, делайте это без regexp.
2) При использовании file_put_contents удалите файл, если он существует.
> 2) При использовании file_put_contents удалите файл, если он существует.
А зачем?
Если файл существует, то при записи file_put_contents работает в 4 раза медленне чем

if(is_writable($file)){
    unlink($file);
    }
file_put_contents($file,$content);

не знаю почему.
А как на счет
$fh= fopen ($file, «w»);
fwrite ($fh, $string);
fclose($fh);

С какой скоростью будет работать такая конструкция?
file_put_contents
This function is identical to calling fopen(), fwrite() and fclose() successively to write data to a file.

Хотя, вроде как работает быстрее: habrahabr.ru/blogs/php/20784/
забыли дописать flock(...) для КОРРЕКТНОЙ работы!!!

p.s.: ох уж эти пионЭры ))))
Ничего, главное учится на комментах хабра, а не во время увольнения за найденные ошибки в коде :)
это из-за блокировок. unlink не спасёт от совместной записи.
Вы хотите сказать, что если я сначала удалю файл, а затем его запишу с помощью file_put_contents, то возможна совместная запись, а если, просто вызову file_put_contents — нет.
Я чего-то не понял…
ээээээ, согласен, немного не понятно выразился.
допустим есть скрипт счётчика на файлах, для этого
берём файл, лочим его, считываем информацию, заменяем её новым значение и записываем.
в итоге мы работаем с актуальными данными, а следующий запрос ждёт пока первый запрос отпустит файл и только после этого получает возможность считывать информацию. а так на этапе чтение — запись, информация полученная во время чтения может быть неактуальной. проверено на горькой практике.
Если что-то можно сделать без regexp, делайте это без regexp.

Но если для замены регекспа нужно написать 5+ строк — используйте все-таки регексп.

Если важна скорость — не верьте советам, верьте профайлеру.
писал и 100 строк, скорость очень заметно возрасла.
И я писал, и что с того? Не везде регекспы применимы, только и всего. Кстати что у вас за задача была?
Маленький компилятор для BB тагов, с исправлением ошибок структуры.
А чем вам так regexp не нравятся?
думаю, оратор имел ввиду всего лишь правило «используйте substr и str_replace вместо регулярок там, где это возможно»
Я люблю его, но для простых задач, проще и быстрее сделать strpos, substr и str_ replace, как уже и сказал dasbot.
Раз, а два иногда полезно комбинировать regexp и strpos. Я так в одном парсере в два раза производительность увеличил, просто за счёт того, что разбил регулярку на части.
Используете неправильный движок регулярных выражений.

Обычные движки (те, которые с backtracking), можно уложить с помощью сравнительно простого выражения, а вот с реализациями, использующими tagged DFA, к примеру, так сделать не удастся.

Что же касается парсеров, то надо бы разделять собственно лексический и синтаксический анализ. (Вы, наверное, о первом говорите)
Нет я писал синтаксический анализатор для XML идентичный по функционалу xml_parser с возможностью использовать дополнительный вид тегов.
Про движки расскажите по подробнее, вы имеете в виду preg и grep?
Про движки уже почитал чуть-чуть. Стало понятней. Есть ли расширение для PHP использующее алгоритм DFA?
По-моему, нету. Вообще, почти все AFAIK пользуются PCRE и подобными, т.е. backtracking. (включая runtime Java, Ruby, Tcl, Perl).

Помню, DFA-движок был в Boost, и еще где-то. Блин, не могу найти :(
Не могу найти там расширения (
А меня работодатели послали с тестовым заданием — ибо Шаблоны были сделаны с помощью str_replace вместо preg_replace ;)
Ну это уже как повезёт! ;)
Можно из этого вывести совет не только новичкам: в комментариях к тестовым заданиям старайтесь указывать что и почему вы делаете и, что вы прекрасно знаете, что можно и по-другому, либо не знаете, но молчите ;)
ну и нафик таких работодателей, которые не хотят оптимизированного и рационального кода. сам же потом намучался бы с ними.
Очень полезные советы. Но небольшая аргументации каждого не помешала бы.
+1
А чо минусуем? Хабр умер? Все все уже давно знают? Может лучше 27 фотографий сисек надо было выложить?
Ну если бы это были какие-то особые сиськи то было бы лучше выложить фотографии 27ми сисек… Но даже сиськам аргументация в общем то была бы лишней…
как можно аргументировать сиськи?
Но ты прав — минусовать больше -5 тут не правильно… Поставил +1
Согласен. Хоть мне и кому-то еще это и так все понятно, новчикам от такой информации будет ни холодно, ни жарко. Голословные факты, практически никаких аргументов. В результате и получается «кто-то умный когда-то сказал делать так, я теперь так и делаю».
Вот про 22 полностью согласен. Даже тут на Хабре не раз уже появлялись топики на тему такой «оптимизации». В 99% случаев это бесполезная трата времени.
А вот с 2-м пунктом я бы поспорил. В серьезных проектах вам никто и никогда не даст настраивать среду исполнения — для этого есть админы. Это не значит, что вы не должны знать стандартные настройки (те же многострадальные глобалсы), однако уметь это все ставить и грамотно настраивать — не обязательный навык. Разработка в Денвере вполне неплоха, и, я бы сказал, рекомендована (если у вас нет тестового сервера конечно), если вы пишете «сайт фирмы» или что-то подобное.
Денвер не Денвер но знать как минимально настроить Апач, Мускул, ПХП, где и как-что прикрутить, где может быть ошибка и т.д. — знать нужно. Даже для того что-бы написать у себя проверку на те же magic_quotes и в зависимости от этого параметра самому делать или нет с данными.
не надо их проверять, их надо с самого начала отключать :)
это у себя их можно отключать, а вдруг где-то включено? нужно это проверить и правильно среагировать. не все же хостинги одинаковы, и писать под какой-то один также не нужно. а то вдруг клиент переедет а у него что-то отвалится… кто виноват? хостинг или разработчик?
Если придерживаться правил безопасности и «правильности» кода, то скрипт будет работать везде. Разработчик будет виноват, в большинстве случаев.
Знать — нужно. Я так и написал. Но не использовать Денвер нелогично. Он идеально подходит, когда вам надо за вечер слабать сайт-визитку, а среды на компе почему-то нет. Вобщем, как и всегда, все зависит от условий.
Ну да, где-то так, просто если нужно что-то «слабать», а значит вы уже «лабаете» то среда должна уже быть настроена и готова. это много времени никогда не занимает. Но это мое мнение.
А чо бы сайт-визитку не «слабать» на движке?
Тут же советы для начинающих разработчиков. А теперь представьте, что начинающему разработчику нужно ставить непонятные программы, открывать какие-то текстовые файлы, рыться в дебрях настроек и что-то в них делать, плясать с бубном, ради того чтоб запустить <? php echo «Hello world» ?>. Постигание php.ini приходит со временем, вначале лучше полностью доверится Денверу, чтоб все эти шаманские танцы не отбили охоту к РНР вообще.
Полностью согласен, тоже думаю что для начала Денвер самое хорошее решение. Сложно настраивать что-то, когда непонятно как это должно выглядеть, как проверять, и как искать ошибки в конфигурации. Когда уже понимаешь как что работает, что за что отвечает — можно настроить и свою среду.
Прошёл этап Денвера, благодарен его разработчикам — это действительно Quick Start для windows. Получить работающую LAMP можно просто и без денвера)
про денвер в точку.
основная проблема, что некоторые пытаются стать админами и больше времени тратян на установку php, чем на изучение самого языка.
кстати, у меня под linux уже давно настроен почтовыйсервер, а под винду запускаю денвер для проверки mail()
Когда я впервые знакомился с php, на нахождение инфы по установке mysql + apache + php, да и собственно установки под окошки — у меня ушло не более 2-х часов. А это был где-то 2004-й год наверное. Поставить два приложения, распаковать архив, и скопипастить около 5 строчек из мануала — для этого не надо быть админами. Но зато это дает человеку, уже на первых порах понимание того, что пых — это не только модуль для апача — вебсервер одно, интерпретатор — совсем другое, и что в качестве бд может быть что-то другое кроме мускуля.

А то общался я с одним человеком, который все время денвер использовал. Когда ему сказали, что работает все через nginx + php-factcgi и в качестве базы постгрескуль — он выкатил глаза и начал мямлить про то, что «неужели так бывает», «там наверное програмировать надо по другому».

Основы надо понимать, хотя бы на базовом уровне. Основы веб програмирования — это вебсервер и хттп протокол.
помнится, у меня возникла проблема с расширениями, как потом догадался, нужно было прописать path в винде, хотя до сих пор не в одной литературе этого пункта не видел. дале, проблему с мылом до сих пор не решил, но и не очень-то хотел.
конечно, знания об настройке не повредят, но на первом этапе есть вещи гораздо более важные и желательно сконцентрироваться на них, а то получаем гавнокод, зато от сисадминов.
случай забавный, но здесь непричём, любой программист которому нужен nginx знает о нём, так как пора пришла, а вот внаале от этого ему не тепло не холодно
Если уделять програменгу в день чуть больше часа, и при этом 40 минут каждый раз копатся в настройках сервера — то да, это не очень хорошо. Но что-то я не припомню ни одного случая, когда после настройки мне, да и еще многим людям приходилось каждый день лазять в конфиги и править их. Только раз в полгода, и то что бы добавить еще один экстеншн который понадобился, но по незнанию был закоменчен.
Как говорится есть одно хорошее правило: Никому не доверять, ни пользователю (проверять от него все данные) ни себе (проверять вообще все данные которыми оперируеш). Одним словом — проверять всё!
либо писать так, чтоб ошибки просто не могло возникнуть.
Простое правило, которое может здорово облегчить жизнь — используйте приведение типов.
«SELECT * FROM table WHERE id='.(int) $var — спасет независимо от того, что вы умудрились положить в var.
Это не избавляет от необходимости думать, но это надежный последний рубеж.
А если это не ИД, а, скажем, статус записи. Если в концепции существует нулевой статус, то запрос потенциально фэйловый )

ЗЫ: И, кстати, в таких вариантах лучше юзать sprintf и %u для формирования запросов )
Запрос может и фейловый, однако без стандартной уязвимости. Как я там уточнил — это не избавляет от необходимости думать.

А насчет sprintf — это был просто пример приведения типов. Здесь может и лучше, в другом случае — нет. Например в foreach((array) $var as $item) {}.
Лучше вообще юзать bind-параметры
Думаю, что правильнее будет проверять и в случае не соответствия выдавать ошибку. В приведенном примере я бы использовал is_numeric().
requery_once — нет такой функции в этом языке ;)
щас у человека всю базу просмотрят:)
UFO just landed and posted this here
А вот если запихивать весь инклуд код выше корня www как в ZF, можно забить на все эти защиты.
Не всегда есть возможность такое сделать, зато .htaccess с deny from all не позволит смотреть файлы в папках. Равно как и используемая в том-же DLE защита-

if(! defined('DATALIFEENGINE'))
{
die(«Hacking attempt!»);
}
При просмотре файла напрямую, а не если он вызван инклудом из index.php- интерпритатор завершит работу. Кстати, такой способ защиты библиотек тоже стоит добавить в топик.
18 пункт — бред. <? php вобще кажется в PHP6 уберут
а отключать <?… ?> — по крайней мере странно.
у всех ведущих хостеров включена поддержка <?… ?>
ваши данные ошибочны с точностью до наоборот ;)
хм… если это так, хотелось бы пруфлинк.
тогда соглашусь.

тем более
mcdb.habrahabr.ru/blog/19621/
вот тут написано как раз о том, что я говорил
www.php.net/~derick/meeting-notes.html#remove-support-for-and-script-language-php-and-add-php-var

Как и ожидалось, «<?» все-таки оставят в угоду конструкции «<?=» Но откуда вы взяли про удаление «<? php» (а именно это я имелл ввиду) не знаю.
хм… значит где-то что-то не то увидел.
забираю свои слова обратно.
перепугался наверна того что <?… ?> уберут, а <? php… ?> оставят :)
Уберут ASP-шный стиль, то есть <% %>. А полный и сокращенный останутся.
как раз сокращенный вариант уберут.
А бред или нет, но отключают — это факт
можно привести пример реального хостинга, где отключают короткий вариант? ни разу не сталкивался.
Если обратиться к синтаксису XML, то <? php ?> — классическая Processing Instruction и убрать php нельзя.
К 24 пункту добавлю:
не используйте алгоритмы типа:
Sql запрос — Цикл по результатам с sql запросами (почитайте в таком случае про JOIN, LEFT JOIN и т.п. )
Старайтесь использовать как можно меньше запросов к базе, напишите один большой запрос заместо нескольких небольших.

К 25 и 26 пункту добавлю:
Старайтесь как можно реже использовать смарти, от него очень много тормазов, и он хавает память.
нет, нет и нет. Уж извините.

Запросы ОЧЕНЬ зависят от ситуации. Есть конторы, где вообще запрещено использовать джоины (SpyLog меня когда-то этим удивил). Иногда действительно лучше разделить запрос на два и более, а связать уже в коде. Однако, повторюсь, это очень обширный вопрос.

Про смарти вспоминается фраза «вы просто не умеет их готовить». Заметьте, я не сторонник смарти, и даже кое в чем противник. Но тем не менее с вашей формулировкой я не согласен.
вообще сам мускл в своем тренинге советую использовать запросы поменьше чем побольше ;)
По поводу SQL и благах JOIN-ов

Например у нас, есть таблицы, которые большие, туда постояно пищут, оттуда постоянно читают, причем не только фронтенд-часть но и бэкенд.

Таким образом если мы приджоиним огромную таблицу с очень важной, причем еще с каким-нить хитрым условием-выборкой (по которым нет нормальных ключей) — мы надолго залочим важную таблицу.

Вобщем пришлось вместо пары join-ов на 3 таблички писать рнр-код экрана на 3.

Но не исключаю что подобные моменты — скорее для тех кто уже выходит из разряда начинающих.

Кстати как совет — используйте EXPLAIN для анализа вашего запроса и ключей.

А так — статья очень полезная, особенно для начинающих.
Браво! Отличный текст. Всем новичкам приколотить гвоздями к стенке :)
Ктото видать нашел уже janeyandryan.com/conf/auth.inc судя по тайтлу — «SERYOGA NADO BOL'WE SPAT' PO NOCHAM!»
Сайт какой-то японской пары.
Имеется ввиду — если юзаю смарти, то значит могу запихнуть в него всё что он позволяет — слишком часто сталкивался с реализацией логики в шаблонах — такие перлы очень тяжело исправлять…
страно, в статье ни слова о XSS и XSRF/CSRF, однако это самые популярные уязвимости многих сайтов
ну это, имхо, выходит за рамки статьи для начинающих.
уж лучше про это узнать на этапе разработки, а не когда похакают :)
n.10 избежать можно используя след. стиль <? if ( true = $auth) {...} ?> Этот код уже выдаст ошибку.
Да и вообще, это стандартная семантическая ошибка, и не только в php.
А я, например, постоянно спотыкаюсь на таких кусках кода. Как-то логично, когда «что-то неизвестное» сравнивают с чем-то конкретным. А когда сравнение начинается с чего-то конкретного, у меня взгляд при чтении когда просто спотыкается — чего сравнивать, мы уже знаем, что это?..
При том, что я уже и не помню, когда я наступал на саму багу присваивания в сравнении.
Да и отлавливается быстро, на самом-то деле.
Ну для начинающего — наверняка совет хороший
С одной стороны — да, конечно. Нечаянных ошибок будет меньше.
С другой (и я, наверное, именно об этом) — не будет ли это медвежьей услугой? Как там Дейкстра писал про студентов, «умственно оболваненных Бейсиком»…
То есть вместо развития у себя каких-то качеств, общеприменимых для программирования вообще (внимательность, определенный стиль мышления, определенный стиль выявления ошибок — тоже немаловажно), мы привыкаем к разным узкоспециализированным грязным хакам.
А может не стоит приводить пример с bool? Ведь пример наталкивает на индийский код, в таких ситуациях принято кратко писать «if ($auth)...»
В топике можно написать что-то цифровое, например «if (2 == $usertype)»
Многие, включая меня, считают это плохим стилем. Лучше приучать себя к внимательности, чем писать так, ведь такая конструкция хуже читается и слегка нелогична (это неплохо обосновано в соседних комментариях)
Согласен, но я не говорил, что стиль хороший. Я просто показал как можно. Сам никогда не использую такой прием, просто хотя бы потому, что нарушается читабельность.
11. тут чаще проблема в пробеле после закрывающего тега в подключаемом файле. Именно поэтому хорошей практикой является опускать закрывающий тег, если в файле только PHP код.

18. ну не стоило бы относить это к ошибкам. Это скорее как напоминание, в случае, если на хостинге показывается код, а не собранный HTML. Да и конструкция <?= $title ?> выглядит вкуснее :)

25. ну и что что 6Мб? пусть даже 100Мб — подключать всю библиотеку Вас никто не заставляет :) Я в простейших консольных скриптах не брезгую использовать Zend_Console_Getopt, и Вы врядли меня аргументированно разубедите это делать, несмотря на то, что весь ZF весит 13Мб :)
11. Если там все же не только PHP код, то данный пункт вообще не имеет смысла
Про 4 и 19. У Хостера «Спейсвеб», по умолчанию включены register_globals, magic_quotes и еще некоторые интересные опции. При смене хостинга, лучше сразу проверить, какие опции включены.
Правильно!, еще никто не отменял get_magic_quotes_gpc() и get_magic_quotes_runtime()
сорри, плохо читаю под конец дня
имхо, вот чувак лучше бы смотрелся с велосипедом, нежели с роликами:))
По моему, написано очень не показательно для новичков, которые вроде бы являются целевой аудиторией.
Я бы не смог понять, нарушает ли мой проект какой-либо из пунктов, прочитав его формулировку. Ссылки на внешние статьи о терминах и примеры помогают разобраться, но остальные пункты остаются туманными. Есть упоминание проблемы, но нет четкого описания где-что искать и как бороться.
Имхо, стоит переписать текст ориентируясь на лентяев и неофитов.
UFO just landed and posted this here
а мелочь на картинке — гонорар начинающего PHP разработчика, допускающего перечисленные ошибки )
UFO just landed and posted this here
И Вам с Вашей кармой еще и не лень ждать по 5 минут между каментами и продолжать медленно, но уверенно спускаться вниз? :)
UFO just landed and posted this here
Что-то в этом есть, но это можно лечить если с молодосить приучать их к прекрасному… к Symfony, Zend, Cake, а не читать говнокод любительских CMS и писать по аналогии.
UFO just landed and posted this here
для себя ввел правило, по мере написания правила сразу же думаю, что можно сделать с функцией, методом и т.д., сразу продумываю все возможные уязвимости

после написания искать дыры будет сложней, лучше все делать сразу
Почитал и решил пересобрать свой «сервер» как в старые добрые времена… XAMPP под win надоел.
UFO just landed and posted this here
# Используем простенький редактор с подсветкой синтаксиса — пора взрослеть и переходить на IDE — с IDE увеличивается скорость разработки, особенно в больших проектах, где не один десяток классов.

Так пора взрослеть или же «Ошибки НАЧИНАЮЩИХ PHP разработчиков»?
Статья о том, как начинающим пора взрослеть :)
Думаю, что после осознания и использования данных советов разработчик уже будет не совсем начинающим.
Порог вхождения в программирование на php очень низкий, достаточно разобрать несколько типичных примеров, чтобы уже почувствовать себя пхпшником. Как же ошибочно это ощущение :)
Какие-то стремные ошибки.

Я понимаю написать ошибки, которые трудно искать или ошибки логики…
[code]«Cannot send session cookie — headers already sent by… „ — пытаемся установить куки, когда заголовок уж послан браузеру — незаметили пустую строку или пробел перед первым тегом <?[/code]
Во первых в ошибке пишется где вывод начался, во вторых причиной может быть и не пробел…

И на последок это все хорошо, но опыт показывает что свои грабли бьют гораздо сильнее.
UFO just landed and posted this here
Вообще XSS — это скорее про то, как ВЫводить данные…
UFO just landed and posted this here
О, я помню видел такую фантастическую прелесть :) Массив экранируется через array_map('addslashes', $_POST) и записывается в самого себя… и делается это все на уровне конструктора подключаемых модулей :)
А что самое интересное — модулей на страницу подключается от 1 до 7 штук, итого с учетом отсутствия проверки на magic_quotes к каждой кавычке введенной в поле ввода добавлялось от 3 до 15 слешей :) К трем слешам я еще отнесся с мужеством, а 15 меня реально напугали :)
Может есть смысл в таких случаях взять парсер от готового и проверенного временем движка? В последних версиях учтены и искорены и SQL-инъекции и XSS. Из платных запрещает брать авторское право, а вот из опен-сорсных можно.
> 2. Использование web-сервера, где «всё включено» (Denwer и еже с ним) — научитесь сетапить сами, потом успеете перейти на полуфабрикаты
Несколько спорно… Он еще кодировать не научился, а тут ему предлагают учиться настраивать апач, рнр и проч.
Все это надо, но не убьет ли интерес ко всему остальному? Научиться писать для готовой к употреблению, удобной среды — весьма хорошо.

Я уже где-то приводил пример с авто по другой теме.
Было бы странно новичка автолюбителя заставлять разбираться в устройстве двигателя. Он все-таки хочет научиться ездить, умение ремонтировать и тюнинговать придет потом — с опытом.
Не согласен. Программист, даже начинающий, не пользователь, а инженер.
Да что же вы к мелочам придираетесь :)
Научится он. научится, но постепенно.
Новичок он на то и новичок, что сразу охватить сложность проблемы не может сразу, не может он и отвлекаться на смежные темы.

Но опять же — я не сказал, что неверное это утверждение. Я сказал — оно спорно.
Когда я начинал программировать я не знал как установить php, что это такое, с чем его едят, какое отношение к этому имеет apache и уж тем более какой-то там mysql, месяца два я изучал тему, потому что в компе шарил плохо. Теперь я каждый раз собираю php+apache+mysql ручками, матерюсь, но ставлю. И не заставить меня ставить их из пакета…
Я бы даже сказал, не «error_reporting(E_ALL)», а «error_reporting(E_ALL|E_STRICT)».
Еще совет. Старайтесь все же разделять логику и разметку. Упростите жизнь верстальщику, да и себе пожалуй. Например, так:

if ($a===$b)
{
?>
Равны
Что-то не пойму, это ошибки или советы? :)
Что-то не пойму, это ошибки или советы? :)
++
-Используйте гугл, даже если уверены что такого еще никто не писал, даже если считаете что вы всегда напишете понятней и проще.
-Вытекает из первого, используйте фреймворки и либы, лучше качественные и проверенные, phpclasses зачастую не гуд. PECL, PEAR, ZF… Множество профи стараются чтоб Вам жилось проще!
-Нет ничего более постоянного, чем временное. Пишите сразу максимально правильно, не подрывайте авторитет PHP!
Я бы добавил для начинающих:
28. Начните писать свою CMS.
29. Ничните писать свой фреймворк.
30.Начните писать свой стартап?)
глупость, гораздо умнее посмотреть на то, что уже есть. Это сразу прививает хороший стиль. Что за мания вечно изобретать велосипеды?
ко мне приходили куча прогеров, которые писали что-то свое, многие на этом и застряли. Те, кто начал сразу смотреть в сторону прогрессивных решений в итоге, в большинстве случаев, уровнем выше и ЗП больше.
О да, примеры любительских CMS написанные новичками РНР многим в кошмарах снятся. Писать ля себя может и стоит, но выводить их в проекты и размещать в сети, а также предлагать друзьям и знакомым, то уж лучше не надо, не позорьтесь. Лучше посмотреть примеры готовых ХОРОШИХ CMS и фреймворков, только ознакомившись с логикой, узнав что такое MVC, ORM, FilterChain, да уже наконец и Singleton, тогда можно думать о своем фреймворке.
UFO just landed and posted this here
Быстро подправить — да.
Эффективность IDE в полной мере раскрывается как раз на громоздких вещах. И да, с не одним десятком классов.
Не вижу ничего зазорного в том, что среда разработки услужливо подскажет переменную в области видимости, автоматически завершит ввод функции PHP или функции, определенной вами и имеющей веселое camelCaseLike-название.
Как минимум, сэкономится время и вероятность механической опечатки уменьшится.
Всякий autocomplete, и местами вполне разумный, есть во многих редакторах. Например, любимый мною jEdit это все умеет, но назвать его IDE — язык не повернется :)
Одно дело автокомплит стандартных функций, а вот автокомплит пользовательских классов, переменных, поддержка комментариев PHPDoc это совсем другое.
IDE нужно на ранней стадии для одного, интерпретация языка на лету. Если мы говорим о новичках, то они ещё не привыкли ставить $ и;, а в ошибках парсера ещё могут не разбираться и долго жать F5 чтоб узнать где же ошибка.
Никогда не понимал людей, которые так пишут:
используйте конструкцию ввида <? php if (true == $auth) {… } ?>
, это как раз и порождает ошибку написанную в п.10.
Пишите лучше так: <? php if ($auth) {… } ?>
Если вместо true использовать константы — выражение приймет вид if(DEFINE_NAME == $var) {...} — так что упрощенный вариант не подойдет…
Ну да, варианты if ($auth == true) и if ($auth) — равнозначны, и второй определенно лучше, если не забывать про разницу с if ($auth === true) :)
Я уже как-то говорил по этому поводу — низкий проходной уровень языка — это медаль с двумя сторонами — на РНР может писать всякий, и только каждый пятый пишет правильно…

Возьмите для примера крупные проекты на PHP — Wikipedia, Facebook, Digg — тут уж не постебаешься…
Да стеб забавный, где взял :)

Тоже не мог удержатся
А теперь просто личное мнение:
проблеммы с xslt?
Я знаю пару плюх, но какими-то мега проблеммами это не назовешь — все решаемо
А зп — это вопрос квалификации и характера, а не языка программирования.
где взял уже увидел… леньс
проблеммы с xslt?

Видимо, креатифф относится к временам присной памяти Sablotron'а :)
Какие IDE можете посоветовать для начинающих? Желательно бесплатные или полу-бесплатные.
Netbeans в контексте PHP не совсем удобен. Основная его… гм… заточенность — под Java. Если не ошибаюсь.
Есть такое. Но они недавно соорудили плагин для php. Я правда не знаю в каком он состоянии.

Кстати, возможно и Intelllij Idea умеет php, надо посмотреть в плагинах… Это самая офигенная среда разработки:)
По крайней мере для явы:))
Я пробовал плагин netbeans — оставил гнетущее впечатление — вернулся в PDT иногда vim использую(но это не каждому новичку понравится :)) Реально eclipse PDT пока самый лучший выбор имхо… хотя видел некоторые ребята в nuSphere или как то так лабают — подходил тыцкал — с pdt не сравнить и под lin не идет :(
vim — кайф, но это как и emacs не среда разработки а редактор все же:)

По поводу нетбинс — я его и для явы не особенно люблю, да.
UFO just landed and posted this here
В сочетании с любым шеллом — это среда разработки.
Дружно учим матчасть. Ставим эклипс, идею, мс вижуалстудию. Разбираемся, думаем.
бедный разработчики программ под *nix! Они до сих пор не знают, что shell + *nix tools + make + vi это, оказывается, не среда разработки!

Не говорите ерунды.
vi и vim — есть вещи разные
А по поводу ерунды почитайте allaboutvim.blogspot.com/2007/07/vim2ide-vim-ide-php.html
Меня подобный минимализм весьма устраивал в свое время, а в сочетнии с snippetsEmu project и прочими описанными плагинами в блогее — весьма недурственно получается. У нас просто так было проект унаследовали — разворачивать дома не было времени — открыли доступ по ssh — и лабали… я тогда человека три на vim и zsh подсадил… за 6 недель такой мегапроектище склепали… самому не верится — а вы говорите vim :)
Я же об этом и говорю (правда написал едко). Сам при разработке использую только vim в качестве редактора (и абсолютно не жалею, что не пользуюсь IDE, где суммарный размер панелек на экране превышает размер окна с кодом).
А тебе в голову не приходило что все эти панельки не для дураков сделаны, а для отображения информации которая может быть полезна во время написания кода?

А вообще мотивация совершенно бредовая.
Уважаемый, нормальные разработчики нормальных программ под *nix пользуются нормальными IDE. Времена, когда vim и emacs были безальтернативными решениями прошли. Я года четыре пользовался vim-ом в качестве среды разработки для С++, пока Eclipse не был доведен до ума. Ничуть об этом не жалею, но сейчас необходимости в этом нет, поскольку есть более лучшие решения.

Интересно кстати говоря, ты в разработке каких-нибудь крупных проектов участвовал? Где в команде работает скажем больше 10 человек? Слово рефакторинг тебе знакомо? Для навигации по коду понятное дело кроме ctags да grep ничего использовать не приходилось… Интеграция с дебаггером и профайлером тоже понятное дело для дураков придумана…

Вобщем, ставь какую-нибудь нормальную IDE, разбирайся читай мануалы и будет тебе счастье. Про понты тоже кстати советую забыть. Ничего крутого в том о чем ты выше написал нет. Гики пользуются не тем, что круто, а тем что может реально ускорить, упростить и улучшить процесс разработки:) Не думал кстати говоря, почему к эклипсу вим прикручивается? Наверное люди не от нечего делать этим занялись, а для того чтобы совместить мощность редактора и эффективность среды разработки?
Кстати, нормальной прикручивалки так и не нашел. Может поделишься?
К сожалению не поделюсь, поскольку я не занимался прикручиванием vim-а к эклипсу. На eclim смотрел как-то, но меня редактор эклипса вобщем-то устроил, я на нем и остановился.
UFO just landed and posted this here
Еще советую попробовать Komodo IDE, громоздкий чуть менее, чем Эклипс.
А так, конечно, поддерживаю тех, кто советует Eclipse PDT. Бесплатен, гибок, достаточное количество плагинов, развивается.
Под Mac советую Coda! «Просто, но со вкусом!» :)
с недавних пор просто влюбился в nusphere phped
SQL Injection рулит=))) был ка кто мной сломан 1 сервак(без ущерба, нужно было видео для конкурса. админ был осведомлен о найденном баге)
там была скуль инъекция и в другом файле раскрытие путей, еще и права на чтение файлов были… собственно вотъ.
через пару часов у меня были пароли от БД. был залит шелл ну и т.п. в общем пред выпуском сценариев в свет их нужно тестить как «сидорову козу» вдоль и поперек. осторожность никогда не бывает излишней.
это для наглядности. а программисты кстати в РБК трудятся(из камментов узнал)
Главная ошибка начинаюшего PHP разработчика — чтение постов вроде «Ошибки начинающих PHP разработчиков», где ничего не объясняется, а просто навязывается мнение некого «гуру».
Как правило, главная ошибка начинающих разработчиков это нежелание читать мануал. И писать маленькие тестовые програмки для выяснения различного рода непонятностей и неоднозначностей.

Если много читать и много учиться, то высказывания «гуру» станут быстро понятны. А если что и останется непонятно, то приобретенные знания позволят правильно поставить и конкретизировать вопрос, а не кричать «ничего не понимаю»…
Так о чём и речь. Никто не читает php.net
А потом приходят устраиваться на работу и говорят:«Я знаю PHP». Хуже того, на собеседовании поправляю кандидата на предмет незнания каких-либо азов, а он мне в ответ:«А вот я прочитал на форуме...» дальше может идти всё, что угодно.
Ошибки действительно детские, но вот 16й пункт лично я до сих пор не пойму как реализовать. Подскажете?
Директивы error_log и log_errors в php.ini, если я правильно понял.
К примеру, можно воспользоваться функцией set_error_handler — и с ее помощью указать функцию в которой мы и будем писать логи в нужном формате, или более простой способ — идем в php.ini:

// отключаем вывод ошибок на экран
display_errors = Off
display_startup_errors = Off
// пишем ошибки в лог файл
log_errors = On
error_log = /www/logs/php/errors.log
На пхп не пишу (ASP.NET еду мне приносит), но за многие пункты готов пожать руку.
> PHP файлы имеют не стандартное расширение (к примеру .inc вместо .php) — если не защитить такие файлы, то может быть очень стыдно

К этому я бы добавил, что все файлы, которые не будут запрашиваться посетителем сайта напрямую вообще не стоит класть в public_html. В идеале, чтобы система была спроектирована так, что в public_html будет лежать только index.php, внутри которого единственное подключение файлика, не лежащего в public_html.
Так-то это пособие не для PHP-программиста, а для веб-разработчика. Часть советов к PHP никак не относится.

По 10 примеру: а не проще при проверке на true писать так: if ($auth) {}?
Пример не очень удачный:
if(DEFINE_NAME == $var) {...}
UFO just landed and posted this here
уже было.
читайте, перед тем, как постить
Ваш пост доказывает, что ламеров, учащих язык только для того, чтобы пускать пыль в глаза, везде хватает.
Скорее дело в другом, начинающие программисты на PHP прочитают книжку типа «Освой PHP за 24 часа», поставят IDE с автозавершением и после этого начинают себя считать крутыми веб-программистами. И таких уникумов в последнее время развелось слишком много.
25-й пункт, наверное, должно быть «в цикле», а не «в рекурсии»?
UFO just landed and posted this here
«Cannot send session cookie — headers already sent by…» — пытаемся установить куки, когда заголовок уж послан браузеру — незаметили пустую строку или пробел перед первым тегом <?

… или скрипт написан в UTF8 + BOM…
Мне так нравится, что в топ по PHP залазят люди, пишущие на других языках и пытаются его обосрать )

Не бывает ПЛОХИХ и ХОРОШИХ языков программирования. Бывают ХОРОШИЕ И ПЛОХИЕ ПРОГРАММИСТЫ.
Хорошие программисты используют язык как ИНСТРУМЕНТ. Плохие — как ПОНТЫ ;)
Хорошие программисты занимаются написанием кода, плохие программисты занимаются обсиранием хороших ;)
объясните «начинающему пхп-разработчику» как проверять залитые пользователями файлы, плс (пункт 9).
Самое простое:
if ($_FILES['userfile']['type'] == "image/jpeg"){ //do upload stuff }else{ echo "Go away, hacker!" }
спасибо, общий смысл понятен
Для меня, как для программиста на Си и подобных языках, сложными для запоминания являются две вещи:
1. то что, строки конкатенируются точками, а не плюсиками. Постоянно нахожу у себя такие мини-баги.
2. то что, foreach нельзя использовать для обработки строк.
1) В js тоже плюсик, с засилием аякса ПХПист должен их обоих помнить и различать.
2) — напишите свой foreach и носите с собой всегда
Используем простенький редактор с подсветкой синтаксиса — пора взрослеть и переходить на IDE — с IDE увеличивается скорость разработки, особенно в больших проектах, где не один десяток классов.


Для начинающих? Сразу начинать с IDE? Интересно, что вкладывалось в понятие «начинающий», потому что начинающие в обычном, классическом понимании этого слова не начинают изучение языка или работу с ним с написания кучи классов и интерфейсов?
Я начинал с обычного блокнота — по-моему это для начинающих=)

Теперь я пользуюсь немного более сложным HTMLpad Fisherman и ег всем советую. Для крупных проектов он наверное не подходит, но для небольших в самый раз! Имеет функцию нумерования стрк. подсветку множества языков(С, С++, ПЕРЛ, РНР, ЯВА, ЯВА СКРИПТ, ХТМЛ КСС, ХМЛ, ПАСКАЛЬ, DELPHI. SQL. ASP. VB, *.ini, даже синтаксис *.bat подсвечивает!)

+ Встроеные справочники по всем эти языкам
+ Возможность сразу с несколькими проектами\файлами работать
+ встроеные яваскрипт скрипты
+ древо цветов
+ дерево автотекста и т.д.

Всем новичкам рекомендую!
Еще ошибки:

Некоторые РНР програмисты, и не только РНР програмисты, забывают использовать табуляцию, от чего код становится трудночитаемым и неудобно его редактировать, особенно если несколько человек участвуют в разработке и обмениваются кодами
Sign up to leave a comment.

Articles