Из очень интересного The Daily WTF , ежедневного дайджеста ужасно плохого кода, обнаруженного в дикой природе, приходит эта предостерегающая история о динамической веб-разработке, которая пошла наперекосяк.
Разработчик Stephan Jennewein был нанят, чтобы обновить веб-сайт для совместимости с Firefox. То, что на первый взгляд представляло собой скромный веб-сайт, состоящий из 15-20 статических страниц, оказалось сложной смесью кода JavaScript и PHP. Каждая из явно статических страниц содержала код, похожий на этот:
<html>
<head>
<link href="dynsitebase/styles.php" rel="stylesheet" type="text/css" />
<script src="dynsitebase/base.php" language="JavaScript"></script>
<script src="dynsitebase/themes.php" language="JavaScript"></script>
<script src="dynsitebase/sitedata.php" language="JavaScript"></script>
<script src="dynsitebase/pagelayout.php" language="JavaScript"></script>
<script language="JavaScript">
document.write("<title>" + CurrentPage.Title + "</title>");
</script>
</head>
<body>
<script language="JavaScript">
DataInterface.initialize();
DataInterface.bindToPage(CurrentPage);
ImageLoader.preload(CurrentPage);
LinkLoader.bindToContext(CurrentPage);
PagePrinter.printHeader(CurrentPage);
PagePrinter.printNavigation(CurrentPage);
PagePrinter.printTitle(CurrentPage);
PagePrinter.printSubTitle(CurrentPage);
PagePrinter.printMainContent(CurrentPage);
PagePrinter.printFooter(CurrentPage);
DataInterface.close();
ImageLoader.close();
LinkLoader.close();
PagePrinter.close();
</script>
</body>
</html>
Все содержимое страницы генерировалось и отображалось рядом объектов JavaScript, которые, в свою очередь, генерировались серией сценариев PHP на сервере! После загрузки любой страницы этого сайта браузер с отключенным JavaScript будет отображать пустое окно.
Если это не было достаточно нелепо, сценарии PHP, отвечающие за генерацию кода JavaScript, определяли, что нужно отображать на странице, на основе адреса страницы HTML, о чем сообщает ненадежный заголовок HTTP Referer
function dynsitebase_PagePrinter_render()
{
echo "var PagePrinter = new Object()";
echo "PagePrinter.printHeader = function(pageObj)";
echo "{";
echo " document.write("<div class='$css_headerdivclass'>");";
echo " document.write("<h1 class='$css_h1headerdivclass'>");";
echo " if (pageObj.header) ";
echo " {";
echo " document.write(pageObj.header);";
echo " }";
echo " else";
echo " {";
echo " document.write("$headerToRender");";
echo " }";
...
}
Хуже, чем код, написанный кем-то, кто не очень свободно говорит на JavaScript или PHP, автор этого чудовища, очевидно, знал эти языки довольно хорошо. Ему или ей не хватало понимания того, что делает код надежным, эффективным и обслуживаемым.
Читать The Daily WTF ( RSS-канал ); это заставит вас чувствовать себя лучше. Если этого не произойдет, возможно, вам придется пройти курс коррекции в области компьютерных наук.