Настройка ответа сервера с типом text/plain в PHP
Отправка заголовка Content-Type: text/plain в PHP
Наиболее эффективный способ заставить сервер сообщить браузеру, что ответ является обычным текстом, - вызов функции header() с правильным параметром до любого вывода данных. Это гарантирует корректную интерпретацию содержимого без попыток разбора HTML.
<?php
header('Content-Type: text/plain; charset=utf-8');
echo "Это обычный текст.\n";
echo "Любые символы не будут интерпретированы как HTML.";
?>Php curl content type (установка content-type в curl в php)
Ключевой момент - указание кодировки (charset). Без неё браузер может отобразить символы вне ASCII (например, русские буквы) некорректно. Заголовок должен отправляться до любого вывода, иначе PHP выдаст предупреждение.
Как сделать, чтобы браузер не пытался форматировать текст как HTML?
Просто добавить header('Content-Type: text/plain'); и вывести текст. Важно убедиться, что в коде нет лишних пробелов или символов до header().
<?php
// Без charset - только ASCII символы безопасны
header('Content-Type: text/plain');
echo "Hello, world!";
?>Content type utf 8 php (кодировка utf-8 в content-type в php)
Как отправить текстовый файл на скачивание?
Комбинируем заголовок Content-Type с Content-Disposition и Content-Length. Это заставит браузер предложить сохранить файл.
<?php
$filename = 'readme.txt';
header('Content-Type: text/plain; charset=utf-8');
header('Content-Disposition: attachment; filename="' . $filename . '"');
header('Content-Length: ' . filesize($filename));
readfile($filename);
?>Php content type html (content-type: text/html в php)
Как вернуть текстовый ответ в REST API?
Если API должен возвращать обычную строку, а не JSON или XML, достаточно установить Content-Type: text/plain и вывести данные.
<?php
header('Content-Type: text/plain');
http_response_code(200);
echo "Request processed successfully.";
?>Php content type text (content-type: text/plain в php)
Как вывести ошибку в текстовом формате?
Для текстового лога или отладки можно вернуть код ошибки и сообщение как plain text.
<?php
header('Content-Type: text/plain', true, 500);
echo "Internal Server Error\n";
echo "Сообщение: " . $error_message;
?>
Типичные ошибки и их решения
Ошибка: “Cannot modify header information – headers already sent”. Возникает, если перед вызовом header() произошёл вывод (echo, пробелы, BOM). Решение: убедиться, что файл PHP не содержит пробелов или вывода до header(). Использовать буферизацию с ob_start() в начале скрипта.
<?php
ob_start(); // включение буферизации
header('Content-Type: text/plain');
echo "Текст после заголовка.";
ob_end_flush();
?>
Проблема: Неверная кодировка (кракозябры). Решение: всегда указывать charset, совпадающий с кодировкой самого PHP-файла. Если файл в UTF-8, пишите header('Content-Type: text/plain; charset=utf-8');.
Проблема: Заголовок не устанавливается после вывода. Решение: переместить вызов header() в самое начало скрипта, до любого HTML или пустых строк.
Расширенные примеры работы с Content-Type text/plain
1. Генерация текстового ответа с кэшированием
Управление кэшированием для текстовых данных, которые не должны обновляться часто.
<?php
header('Content-Type: text/plain; charset=utf-8');
header('Cache-Control: public, max-age=3600'); // кэшировать 1 час
header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 3600) . ' GMT');
echo "Этот ответ может кэшироваться.\n";
echo "Сгенерировано: " . date('Y-m-d H:i:s');
?>
Результат: браузер может сохранить ответ и не запрашивать его повторно в течение часа.
2. Отправка больших текстовых данных частями (флеш)
Для больших объёмов текста (например, log-файл) используется flush() для немедленной отправки клиенту.
<?php
header('Content-Type: text/plain; charset=utf-8');
header('X-Accel-Buffering: no'); // для nginx отключаем буферизацию
$bigData = str_repeat("A line of text.\n", 10000);
for ($i = 0; $i < 10; $i++) {
echo substr($bigData, $i * 1000, 1000);
flush();
sleep(1); // имитация задержки
}
?>
Результат: текст отображается порциями с задержкой, прогрессивная загрузка.
3. Работа с многобайтовыми строками (русский, китайский)
Корректный вывод символов в кодировке UTF-8. Важно, чтобы файл PHP был сохранён в UTF-8 без BOM.
<?php
header('Content-Type: text/plain; charset=utf-8');
echo "Привет, мир!\n";
echo "中文测试\n";
echo "日本語\n";
?>
Результат: браузер отобразит символы всех языков корректно.
4. Ответ на AJAX-запрос с текстовым типом
Используется, когда фронтенд ожидает обычную строку, а не JSON.
<?php
header('Content-Type: text/plain; charset=utf-8');
header('X-Request-ID: ' . uniqid());
$input = file_get_contents('php://input');
echo "Получено: " . $input;
?>
Результат: скрипт возвращает только переданные данные с префиксом.
5. Изменение заголовка после буферизации
Если необходимо отправить заголовок после частичного вывода, используется ob_clean() для очистки буфера.
<?php
ob_start();
echo "Ненужный вывод\n";
ob_clean(); // очищаем буфер
header('Content-Type: text/plain; charset=utf-8');
echo "Чистый ответ.\n";
ob_end_flush();
?>
Результат: заголовок устанавливается успешно, выводится только нужный текст.
6. Отправка текстового ответа с gzip-сжатием
Для уменьшения объёма трафика включается сжатие на уровне PHP.
<?php
ini_set('zlib.output_compression', 'On');
header('Content-Type: text/plain; charset=utf-8');
echo str_repeat("Сжатый текст. ", 1000);
?>
Результат: браузер получает сжатый контент, размер уменьшается.
7. Очистка всех предыдущих заголовков перед новым ответом
Полезно при переопределении заголовков в сложных скриптах.
<?php
// Предположим, ранее был установлен другой заголовок
header('Content-Type: text/html');
// Очищаем и устанавливаем text/plain
header_remove('Content-Type');
header('Content-Type: text/plain; charset=utf-8');
echo "Теперь ответ в виде текста.";
?>
Результат: в итоговом ответе будет только последний заголовок Content-Type.