file_get_contents отображает дополнительные символы

Скрипт должен отображать содержимое файлов, но если много символов (более 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);
?>

1

Решение

Похоже, вы видите куски длины.

Вы, вероятно, используете чанкованное кодирование и сохранение результатов в сыром виде. HTTP имеет разные способы передачи тел сообщений. Наиболее распространенным является использование Content-Length, но вы можете сделать это только в том случае, если вы знаете длину в момент начала отправки контента. Одним удобным аспектом этого подхода является то, что необработанное тело сообщения не требует декодирования; Вы просто читаете байты Content-Length, и это ваш результат.

Если страница динамическая, иногда вы хотите начать запись байтов клиенту, прежде чем вы узнаете полную длину. Это когда вы используете чанкованное кодирование. Каждому чанку предшествует длина чанка в шестнадцатеричном формате. После последнего чанка стоит 0, чтобы указать пустой чанк и конец передачи.

Сервер имеет ограничение буфера 8 КБ (я думаю, что это по умолчанию для PHP, например), что означает, что после того, как тело становится больше, чем 8 КБ, оно отправляется кусками. Таким образом, после того, как размер файла превышает 8 КБ, вы получите размеры чанков, вкрапленных в ваши данные.

Решение:

ob_start();
echo($content);
header('Content-Length: '.ob_get_length());
ob_end_flush();
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]