приступая к изучению чего-то нового, рано или поздно (если уроки происходят раз в месяц) сознание упирается в вещи, знакомые по предыдущему опыту. поэтому когда на форуме появляются элементарные вопросы (с точки зрения продвинутых пользователей), их авторы оказываются всесторонне осмеяны. самое безобидное, что можно услыашать, это предложение починить руки (а то вообще запишут в разряд школьников). да, по прошествие определённого времени сознание меняется, и уже самому становится неясно, в чём же была проблема. но таких продвинутых зубров лучше оставить на потом, т. к. и они в будущем упрутся (обязательно!) во что-то более сложное.
далее будет рассмотрено несколько примеров по вопросам, задаваемым мне в разное время (иногда людьми, поработавшими с php не один год). но это не значит, что люди были некомпетентны; просто их спектр интересов лежал вне данной области.
php — это не c++, и даже не delphi
не нужно от него ждать чумовой скорости. да, программа (скрипт) представлена в текстовом виде, удобном (а иногда не очень) для изменения человеком. зато программу не нужно компилировать под все системы, на которых она будет исполняться. достаточно, чтобы там был установлен php.
php 4 давно умер, учитесь по статьям и книгам для php 5
для кого-то неявное замечание. люди пишут скрипты так, как «написано в статье 2003 года», а потом удивляются, что у них ничего не работает.
запрос http://site.ru/index.php?name=Vasja в программе обрабатывается так:
echo $name;
и получается пустая строка (либо, если включено отображение ошибок, сообщение о неинициализированной переменной), значения, передаваемые таким образом, получает такой код:
echo $_GET['name'];
зачем нужны проверки, если php лояльно относится к типам данных
а нужно это, в первую очередь, для предотвращения различного рода инъекций. целые типы удобно получать такой конструкцией:
$val = empty($_GET['val']) ? 0 : (int) $_GET['val'];
если запрос имеет вид: http://site.ru/index.php?val=15 после выполнения кода выше переменная $val будет содержать значение 15 (целое, не строку). если значение не начинается с цифры, то переменная будет равна нулю (нулю она будет равна и в случае, если запрос пришёл без val в адресе).
нельзя использовать переменные, пришедшие от пользователя, в необработанном виде. особенно страшно, если это будет передача имени открываемого/подключаемого файла: /index.php?file=text.txt или /index.php?module=page.php. в скрипте это может выглядеть так:
echo file_get_contents($_GET['file']);
include $_GET['module'];
можно быть уверенным, что кто-то обязательно попробует выполнить такой запрос: /index.php?file=index.php и благополучно сможет скачать содержимое сайта целиком (а при определённых настройках получить доступ к серверу!).
не нужно изобретать велосипед
в старых скриптах порой можно встретить такие вещи:
// получить текущее время с микросекундами
$a = explode(' ', microtime());
$mtime = $a[0] + $a[1];
// перевести дату в timestamp (значение, возвращаемое функцией time())
$t = explode(' ', '2011-01-01 01:02:03');
$t1 = explode('-', $t[1]);
$t2 = explode(':', $t[0]);
$time = mktime($t1[2], $t1[1], $t[0], $t2[1], $t2[2], $t2[0]);
php версии 5 — это огромный шаг вперёд. и каждое из обозначенных действий выполняется с помощью одной функции:
// получить текущее время с микросекундами
$mtime = microtime(1);
// перевести требуемую дату в timestamp
$time = strtotime('2011-01-01 01:02:03');
в php множество фукнций, используя которые можно не только здорово упростить себе жизнь, но и «заставить» скрипты выполняться быстрее.
и ещё немного
php очень мощный и гибкий язык, способствующий скорейшему вхождению пользователя в мир динамического программирования. к сожалению, эти моменты сослужили ему дурную службу: неумелое использование достоинств привело к появлению громадного количества скриптов, представляющих реальную угрозу для сайтов (порой автор об этом даже и не подозревает). помните, что в руках мастера и шиховская гитара зазвучит особым образом, а в руках неуча даже скрипка Страдивари может быть обычным молотком. важно не то, на чём пишутся скрипты, а то, как это делается.
днём интернета
шоколадкой для работы мозга
коробочкой ароматного чая для бодрости
продлением хостинга на +1 месяц