Как сделать PHP ещё хуже

В Facebook реализовали мою детскую мечту: сделали расширение XHP, которое позволяет писать XML как строку. С тех пор как я увидел E4X (ECMAScript for XML), я страстно хотел увидеть это в PHP.

Потом я подрос и понял, что в PHP это зло:

<?php
// note: includes omitted
if ($_POST['name']) {
  echo <span>Hello, {$_POST['name']}</span>;
} else {
  echo
    <form method="post">
      What is your name?<br />
      <input type="text" name="name" />
      <input type="submit" />
    </form>;
}

С другой стороны я верю в Facebook работают неглупые ребята, что-то они увидели в этой концепции «PHP, язык встраиваемый в HTML» новое и свежее интересное.

По правде сказать, XHP чуть больше, чем упрощённый HEREDOC, он умеет самостоятельно экранировать HTML из суперглобалов или делать это по просьбе программиста, валидировать XML по структуре, описанной прямо на PHP и удалять лишние пробелы.

4 комментария

IPv6

Так как по прогнозам в следующем году, возможно, уже кончатся IPv4, то я уже какое-то время присматриваюсь к IPv6. У меня в загашнике уже есть функции на PHP, которые конвертируют IPv6 в бинарный формат и обратно (по типу ip2long и long2ip) и я иногда вижу как в $_SERVER[’REMOTE_ADDR’] проскакивают длинные адреса.

C IPv6 связано два очень распространнёных заблуждения.

Первое — значение цифры «шесть» в названии протокола. Многие думают, что это длина адреса в байтах. Это не так. Адрес в IPv6 длиной 128 бит (16 байт), например, давайте попробуем запросить IPv6 адрес «Гугла»:

bolk-dev ~ $ host -t aaaa ipv6.google.com
ipv6.google.com         CNAME   ipv6.l.google.com
ipv6.l.google.com       AAAA    2A00:1450:8001:0:0:0:0:69
ipv6.l.google.com       AAAA    2A00:1450:8001:0:0:0:0:67
ipv6.l.google.com       AAAA    2A00:1450:8001:0:0:0:0:93
ipv6.l.google.com       AAAA    2A00:1450:8001:0:0:0:0:63
ipv6.l.google.com       AAAA    2A00:1450:8001:0:0:0:0:68
ipv6.l.google.com       AAAA    2A00:1450:8001:0:0:0:0:6A

Вот типичный адрес этого протокола: «2A00:1450:8001:0:0:0:0:69», в полной форме он будет выглядеть как «2A00:1450:8001:0000:0000:0000:0000:0069», как видите — 16 байт. «Шестёрка» на самом деле относится к версии протокола (v6 — это «version 6»), есть так же IPv5.

Кстати, можно записать рассмотренный адрес ещё короче: «2A00:1450:8001::69». В краткой записи одна (только одна) последовательность нулей в адресе может быть заменена на «::».

Второе заблуждение — что в IPv6 поменялась только длина адреса. Опять же, это не так. Не буду переписывать «Википедию», там можно почитать подробнее, для краткости перечислю основные отличия: оптимизация обработки, автоконфигурация без сохранения состояния, защита данных (основана на IPSec) и мобильность. Другое дело, что с внедрением новых функций есть весьма специфические проблемы, но это другая тема.

Несмотря на то, что адреса IPv4 кончаются, интернет на IPv6 мы увидим ещё не скоро. Тому есть масса причин, от инерции (куча оборудования работает только на v4), до технологических (некоторые вещи в v6 работают иначе).

Придумана масса костылей, чтобы не переходить на новую версию. Например, LSN — широкомасштабный NAT, который пропускает через себя трафик для NAT’ов поменьше или смешная штука PRR, которая позволяет выделять провайдеру не просто фиксированный IPv4-адрес, а адрес и фиксированный набор портов (а другие порты будет использовать другой провайдер).

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

Но готовиться уже надо: в сети есть устройства, которые ходят только через IPv6, я их ооооочень редко, но встречал в логах.

12 комментариев