Скрипт должен отображать содержимое файлов, но если много символов (более 8000), то в начале и в конце добавляются неожиданные символы (символы могут меняться для разных файлов).
b15f
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
...
</body>
</html>
0
где b15f а также 0?
Автор сценария:
<?php
header("HTTP/1.1 200 OK");
header("Content-Type: text/html; charset=utf-8");
$content = file_get_contents( "index.html" );
echo($content);
?>
Похоже, вы видите куски длины.
Вы, вероятно, используете чанкованное кодирование и сохранение результатов в сыром виде. HTTP имеет разные способы передачи тел сообщений. Наиболее распространенным является использование Content-Length, но вы можете сделать это только в том случае, если вы знаете длину в момент начала отправки контента. Одним удобным аспектом этого подхода является то, что необработанное тело сообщения не требует декодирования; Вы просто читаете байты Content-Length, и это ваш результат.
Если страница динамическая, иногда вы хотите начать запись байтов клиенту, прежде чем вы узнаете полную длину. Это когда вы используете чанкованное кодирование. Каждому чанку предшествует длина чанка в шестнадцатеричном формате. После последнего чанка стоит 0, чтобы указать пустой чанк и конец передачи.
Сервер имеет ограничение буфера 8 КБ (я думаю, что это по умолчанию для PHP, например), что означает, что после того, как тело становится больше, чем 8 КБ, оно отправляется кусками. Таким образом, после того, как размер файла превышает 8 КБ, вы получите размеры чанков, вкрапленных в ваши данные.
Решение:
ob_start();
echo($content);
header('Content-Length: '.ob_get_length());
ob_end_flush();
Других решений пока нет …