Как отобразить PHP код в браузере: методы, примеры, безопасность
Способы показа PHP кода на странице
Для отладки и документации часто требуется вывести исходный код PHP скрипта в браузере, а не выполнить его. Ниже рассмотрены несколько подходов, от встроенных функций до сторонних библиотек.
Как вывести код PHP с подсветкой синтаксиса через highlight_file()?
Самый простой и рекомендуемый способ — использовать функцию highlight_file(). Она читает файл и возвращает HTML с подсветкой ключевых слов.
<?php
highlight_file('example.php');
?>Php выводит код (вывести код php)
Пример результата (если файл example.php содержит простой код):
<code><span style="color: #0000BB"><?php echo 'Hello'; ?></span></code>
Функция выводит код напрямую в браузер. Если нужно сохранить результат в переменную, используйте highlight_file() с параметром return.
<?php
$code = highlight_file('example.php', true);
echo $code;
?>Проблемы и типичные ошибки:
- Файл не найден — необходимо проверить путь. Используйте абсолютный путь или __DIR__ для относительного.
- Вывод пустого экрана — убедитесь, что файл существует и доступен для чтения.
- Код выполняется вместо отображения — проверьте, что файл не содержит тегов PHP, которые выполняются (например, если файл подключен через include). Для отладки лучше создавать копию файла с расширением .txt или использовать highlight_string() со строкой.
Как показать код PHP без подсветки, просто как текст?
Если подсветка не нужна, можно прочитать файл и вывести его в тегах <pre> с экранированием HTML.
<?php
$code = file_get_contents('example.php');
echo '<pre>' . htmlspecialchars($code) . '</pre>';
?>Такой подход гарантирует, что код не будет выполнен, и покажет его как есть. Полезно для чистой выгрузки содержимого.
Ошибка: если пропустить htmlspecialchars(), теги PHP и HTML будут интерпретироваться браузером, что может сломать страницу или привести к выполнению скрипта.
Как использовать show_source() как альтернативу highlight_file()?
Функция show_source() является псевдонимом highlight_file(), работает идентично. Она устарела, но всё ещё поддерживается.
<?php
show_source('example.php');
?>Результат аналогичен highlight_file. Рекомендуется использовать оригинальное имя для совместимости.
Как подсветить строку кода из переменной с помощью highlight_string()?
Если код PHP уже находится в строковой переменной, используйте highlight_string().
<?php
$phpCode = '<?php echo "Hello World"; ?>';
highlight_string($phpCode);
?>Вывод:
<code><span style="color: #0000BB"><?php echo "Hello World"; ?></span></code>
Ошибки: строка должна содержать валидный PHP код. Если начальный тег пропущен, подсветка может работать некорректно. Функция автоматически добавляет открывающий тег, если его нет.
Как применить клиентскую подсветку (например, Prism.js или highlight.js) для показа кода?
Иногда удобнее отдать сырой код в тегах <pre><code> и обработать его на стороне клиента с помощью JavaScript библиотек. Это снижает нагрузку на сервер.
<?php
$code = file_get_contents('example.php');
echo '<pre><code class="language-php">' . htmlspecialchars($code) . '</code></pre>';
?>Затем на страницу подключается CSS и JS библиотеки (например, highlight.js). Такой подход даёт гибкость в стилях и не требует серверной обработки.
Проблема: если библиотека не загружена, код отображается без подсветки. Также нужно следить за экранированием.
Выбор метода зависит от задачи: для быстрого просмотра одного файла подойдёт highlight_file, для встраивания в документацию — клиентские библиотеки, для чистого текста — file_get_contents с htmlspecialchars.
Расширенные примеры вывода кода PHP
1. Вывод кода из нескольких файлов с кастомной подсветкой
Можно создать функцию, которая принимает массив путей и выводит каждый файл с заголовком.
<?php
function displayCodeFiles(array $files) {
foreach ($files as $file) {
if (file_exists($file)) {
echo '<h3>' . basename($file) . '</h3>';
highlight_file($file);
} else {
echo '<p class="error">Файл не найден: ' . $file . '</p>';
}
}
}
displayCodeFiles(['src/class.php', 'config.php', 'index.php']);
?>2. Сохранение подсвеченного кода в файл
Можно сохранить результат highlight_string() в HTML файл для последующего просмотра.
<?php
$code = file_get_contents('example.php');
$highlighted = highlight_string($code, true);
file_put_contents('highlighted.html', $highlighted);
echo 'Код сохранён в highlighted.html';
?>3. Вывод кода с номерами строк
Функции highlight_file и highlight_string не добавляют номера строк. Можно добавить их вручную.
<?php
$code = file_get_contents('example.php');
$highlighted = highlight_string($code, true);
$lines = explode('<br />', $highlighted);
$numbered = '';
$i = 1;
foreach ($lines as $line) {
$numbered .= '<span class="line-num">' . $i . '</span> ' . $line . '<br />';
$i++;
}
echo '<pre>' . $numbered . '</pre>';
?>Результат:
<pre><span class="line-num">1</span> <code>...</code><br />...</pre>
4. Использование highlight_string с пользовательскими стилями
Можно задать свои цвета через ini-настройки или переопределить стандартные стили.
<?php
ini_set('highlight.string', '#DD0000');
ini_set('highlight.comment', '#FF9900');
ini_set('highlight.keyword', '#007700');
ini_set('highlight.default', '#0000BB');
ini_set('highlight.html', '#000000');
$code = '<?php echo "test"; // comment ?>';
highlight_string($code);
?>Вывод изменит цвета в соответствии с настройками.
5. Вывод кода из удалённого файла через cURL
Иногда нужно показать код из внешнего источника (например, из репозитория).
<?php
$ch = curl_init('https://raw.githubusercontent.com/user/repo/main/example.php');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$code = curl_exec($ch);
curl_close($ch);
if ($code !== false) {
highlight_string($code);
} else {
echo 'Ошибка загрузки файла';
}
?>6. Безопасный вывод кода для пользователей (только авторизованным)
Не рекомендуется показывать исходный код активного приложения всем пользователям. Ограничьте доступ по сессии.
<?php
session_start();
if (!isset($_SESSION['user'])) {
die('Доступ запрещён');
}
$allowedFiles = ['/var/www/html/admin/index.php', '/var/www/html/includes/functions.php'];
$file = $_GET['file'] ?? '';
if (in_array(realpath($file), $allowedFiles)) {
highlight_file($file);
} else {
echo 'Файл не разрешён';
}
?>Этот пример проверяет аутентификацию и разрешённые пути.
7. Комбинирование с формой выбора файла
Создайте простую утилиту отладки с выбором файла.
<?php
$dir = __DIR__ . '/src';
$files = scandir($dir);
?>
<form method="get">
<select name="file">
<?php foreach ($files as $f) {
if (pathinfo($f, PATHINFO_EXTENSION) === 'php') {
echo '<option value="' . $f . '">' . $f . '</option>';
}
} ?>
</select>
<button type="submit">Показать код</button>
</form>
<?php
if (isset($_GET['file'])) {
$filePath = $dir . '/' . basename($_GET['file']);
if (file_exists($filePath)) {
highlight_file($filePath);
} else {
echo 'Файл не найден';
}
}
?>Эта форма позволяет выбирать файл из списка и выводить его код.
8. Использование highlight_string для подсветки кода, отправленного POST-запросом
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['php_code'])) {
// Безопасная проверка: не выполняем код!
highlight_string(htmlspecialchars_decode($_POST['php_code']));
} else {
echo '<form method="post">
<textarea name="php_code" rows="10" cols="50"></textarea>
<br><input type="submit" value="Подсветить">
</form>';
}
?>Пользователь вводит PHP код в текстовое поле, сервер подсвечивает его и выводит.