Первые сайты на PHP3 в 2002: как мы верстали до CSS, без фреймворков
2002 год. Интернет в Бишкеке - это dial-up по телефонной линии, 33-56 кбит/с, оплата по времени подключения. Отключить телефон на час - значит заплатить за час интернета. Разработчики качали документацию и сохраняли локально, потому что каждый раз заходить на php.net было дорого.
В этих условиях мы делали первые коммерческие сайты.
Стек 2002 года
Язык: PHP 3.x и PHP 4.0-4.2. PHP5 ещё не вышел (он появится в 2004). Никакого ООП в привычном смысле - классы в PHP3 были, но большинство писало процедурный код.
База данных: MySQL 3.23. Транзакций нет (InnoDB был опционален и редко используем). mysql_query() напрямую - никакого PDO (оно появится в 2005).
Вёрстка: таблицы (<table>). CSS существовал, но IE6 реализовывал его частично и с ошибками. Для стабильного пиксель-перфект результата в IE6 и Netscape 4 - только таблицы.
Редактор: Dreamweaver MX или HomeSite. Многие использовали Dreamweaver в WYSIWYG-режиме - это считалось нормальным, не стыдным.
Как выглядел реальный PHP-код 2002 года
<?php
// Подключение к базе - в каждом файле, без config.php сначала
$conn = mysql_connect("localhost", "root", "password");
mysql_select_db("mysite");
// Никакого mysql_real_escape_string - его ещё нет в PHP3
// Была mysql_escape_string, но её использовали редко
// Типичный запрос - SQL-инъекции были нормой, о них почти не писали
$id = $_GET['id'];
$result = mysql_query("SELECT * FROM news WHERE id=$id");
$row = mysql_fetch_assoc($result);
// HTML + PHP вперемешку в одном файле
?>
<html>
<head><title><?= $row['title'] ?></title></head>
<body bgcolor="#FFFFFF" text="#000000" link="#0000FF">
<!-- bgcolor и text - атрибуты тега body, CSS не доверяли -->
<table width="780" border="0" cellpadding="5" cellspacing="0">
<tr>
<td width="160" valign="top" bgcolor="#EEEEEE">
<!-- Левый сайдбар: меню из таблицы -->
<?php include("menu.php"); ?>
</td>
<td width="600" valign="top">
<font face="Arial" size="2" color="#333333">
<!-- font тег - потому что CSS работал не везде -->
<b><?= $row['title'] ?></b><br><br>
<?= nl2br($row['body']) ?>
</font>
</td>
</tr>
</table>
</body>
</html>
Это не плохой код для 2002 года. Это типичный код 2002 года. SQL-инъекции не осознавались как угроза - большинство разработчиков о них просто не читало, потому что статей на русском почти не было.
Вёрстка таблицами: почему это имело смысл
CSS-позиционирование (float, position: absolute) в Netscape 4 работало не так, как в IE5, а в IE6 - не так, как в Mozilla. Два-трёхколоночный макет с помощью CSS в 2002 году требовал хаков под каждый браузер:
/* Это В 2002 ГОДУ НЕ РАБОТАЛО ОДИНАКОВО ВО ВСЕХ БРАУЗЕРАХ */
.sidebar {
float: left;
width: 160px;
}
.content {
margin-left: 170px; /* В IE6: иногда работало, иногда нет */
}
Таблицы работали везде одинаково. Вложенные таблицы с width в пикселях давали предсказуемый результат в IE4, IE5, IE6, Netscape 4, Opera 6. Это была надёжность, а не невежество.
<!-- Двухколоночный макет таблицами - работает в любом браузере 2002 года -->
<table width="760" border="0" cellspacing="0" cellpadding="0" align="center">
<tr>
<td width="160" valign="top">
<table width="155" border="0" cellspacing="0" cellpadding="3">
<!-- Меню в отдельной таблице для надёжности -->
<tr><td class="menu-item"><a href="/about">О нас</a></td></tr>
<tr><td class="menu-item"><a href="/services">Услуги</a></td></tr>
</table>
</td>
<td width="600" valign="top">
<!-- Основной контент -->
</td>
</tr>
</table>
Где искали помощь без Google
phpclub.ru - главный русскоязычный PHP-форум. Ответ на вопрос мог прийти через день, мог через неделю. Некоторые вопросы оставались без ответа.
php.net - официальная документация. Но качать её полностью локально, потому что dial-up.
Книги: «PHP и MySQL для начинающих» (Люк Веллинг, Лаура Томсон) на русском языке вышла в 2003 - стала главным источником знаний для поколения разработчиков.
Коллеги: передавали знания лично. Приём «посмотри как у других сделано» - View Source в браузере - был стандартной практикой обучения.
Stack Overflow откроется в 2008. До него - форумы, IRC, книги и View Source.
Переломный момент: PHP 4.3 и первые MVC-паттерны
Примерно в 2003-2004 годах в русскоязычном сообществе начали появляться статьи про «шаблоны» (Smarty) и разделение логики и отображения. Не MVC в полном смысле, но первый шаг:
// Попытка отделить PHP-логику от HTML (2003-2004)
// Отдельный файл для логики
$id = (int)$_GET['id']; // (int) - первый способ защиты от инъекций
$result = mysql_query("SELECT * FROM news WHERE id=$id");
$data['news'] = mysql_fetch_assoc($result);
// Подключить шаблон (тогда ещё не Smarty, просто отдельный php-файл)
include('templates/news_detail.php');
// В templates/news_detail.php - только HTML + вывод переменных
Что осталось от того времени
Ничего из конкретных технологий. PHP3, mysql_* функции, таблицы для вёрстки, <font> тег - всё это исчезло или запрещено.
Остался принцип: понимай инструмент глубже, чем требуется для текущей задачи. Разработчики 2002 года, которые понимали почему таблицы работают надёжнее CSS в тех браузерах, а не просто копировали чужой код - быстро перешли на CSS, когда браузеры подтянулись. Понимание позволяет адаптироваться. Механическое знание «как это делается» устаревает вместе с инструментами.