Почему readfile () действует странно при чтении php-файла, но отлично работает в текстовом файле

Код в index.php

<?php echo readfile('hello.php'); ?> 

код в hello.php

 <?php echo "hello this is a php file"; ?> 

Выход, который я получаю, равен 47 но когда я добавляю строку перед строкой в ​​hello.php, т.е. echo "<br/> hello this is a php file"; Я получаю выходные hello this is a php file"; ?>52

И при удалении закрывающего тега php в файле hello.php в index.php есть

 hello this is a php file"; 50 

Но в текстовом файле такого поведения нет. Почему вывод index.php является тремя разными способами при чтении php-файла?

Это происходит из-за readfile что вы readfile на экране. echo readfile() . После readfile , readfile возвращает количество байтов, которое он читает, так что вот откуда 47 .

Вы можете просто сделать:

 readfile('hello.php'); 

или вы можете использовать

 echo file_get_contents('hello.php'); 

если вы выберете.

Кроме того, я предлагаю вам проверить источник своей страницы в своем браузере (ознакомьтесь с документами своего браузера). Скорее всего, вы увидите там файл PHP. Вероятно, ваш браузер пытается отобразить ответ в виде HTML-файла. Он пытается проанализировать <?php как HTML-тег. Вот почему он не отображается.

Чтобы обойти это, вы можете попробовать добавить

 header('Content-type: text/plain'); 

перед тем как вы эхо отошлите свой файл hello.php на экран. Это должно сообщить браузеру, что он получает только текстовый файл и не пытается проанализировать его как HTML.

Поведение для php-файла такое же, как и в других файлах. Если вы перейдете к источнику страницы, вы увидите <?php .

введите описание изображения здесь