2012-03-01 2 views
1

Я пытаюсь использовать php для чтения источника отдельного php-файла. Я пытаюсь использовать file_get_contents следующим образомИспользовать php для чтения источника php-файла

file_get_contents('http://www.example.com/someFile.php'); 

К сожалению, приведенный выше код пытается выполнить код PHP, а не просто читать текст, как это было бы с любым другим файлом.

я наткнулся an article, который, как представляется, решить проблему, которая привела меня к следующему коду:

file_get_contents('php://filter/convert.base64-encode/resource=http://www.example.com/someFile.php'); 

Однако этот код имеет тот же эффект; Он пытается выполнить php-код.

Как я могу использовать php для чтения источника другого php-файла, не пытаясь выполнить php в файле?

ответ

1

К сожалению, указанный выше код пытается выполнить PHP-код, а не просто читать текст так же, как и с любым другим файлом.

Нет, это не так.

То, что здесь происходит, что file_get_contents делает регулярный запрос HTTP для http://www.example.com/someFile.php и удаленный сервер на «example.com» интерпретирует PHP код. Он служит для результатов точно так же, как если бы вы перешли на http://www.example.com/someFile.php в своем браузере. Этот скрипт загружает этот вывод.

file_get_contents Определенно не выполнить содержимое файла после его извлечения. Единственный доступ к вашему скрипту - «someFile.php» - это то, что удаленный сервер готов обслуживать; file_get_contents не может каким-то образом получить исходный PHP-источник больше, чем вы могли бы с помощью своего браузера каким-то образом просмотреть источник PHP.

1

Если удаленный сервер не дает вам источник файла php «как есть», вы никогда не получите его самостоятельно. Удаленный сервер ВСЕГДА (за исключением, конечно, ситуации с неправильной конфигурацией) запускает для него php-движок и возвращает результат скрипта. Представьте, что произойдет, если вы сможете получить источник ЛЮБОГО удаленного файла php.

+0

Ярмарка достаточно. Но как насчет случая, когда файл находится на одном сервере? Или даже в том же каталоге? то есть file_get_contents ('http: //localhost/someFile.php'); –

+1

@MarkBrown Это не имеет значения. Вы должны настроить ваш сервер, чтобы не запускать php при запросах на/из localhost. Когда вы выполняете HTTP-запрос (а не прямой запрос к файловой системе), сервер должен запускать php-скрипт, это цель сервера. – Cheery

+1

@MarkBrown Затем вы все еще читаете файл через интерпретатор webserver/PHP. Если файл является локальным, вам необходимо прочитать его как * файл *, а не * url *. – meagar

0

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

Если у вас есть сервер на другом конце, вы можете поручить ему не разбирать файлы .php перед отправкой их обратно. Для Apache, вы, вероятно, хотите, чтобы прочитать на mod_mime: http://httpd.apache.org/docs/2.0/mod/mod_mime.html

1

Как уже было сказано выше, если вы пытаетесь прочитать файл через HTTP URL, запрос, то будет обрабатываться веб-сервер на этом сервере и он выполнит файл php.

Если файл находится на том же сервере, что и ваш PHP-код, попробуйте использовать либо относительный, либо абсолютный путь к файлу, такой как file_get_contents('/dir/dir/yourfile') или file_get_contents('dir/file.php').

-1

Вы не можете прочитать содержимое файла php с помощью URL-адреса, потому что если вы используете http: //, то он обрабатывается через ваш сервер apache, а apache выводит выход php-файла, а не содержимое.Если вы можете прочитать файл php с помощью http: //, то это проблема безопасности, и вы также можете прочитать содержимое файлов с другого сервера. Так что ответ: вы не можете это сделать, так просто!

Если вы пытаетесь получить доступ к файлу php с другого сервера, который не принадлежит вам, его просто незаконно!

+0

Um ... как это незаконно получить доступ к файлу PHP на общедоступном веб-сервере? – meagar

+0

является ли законным доступ и просмотр вашего важного сценария php? вы будете счастливы, если я буду использовать file_get_contents(), чтобы посмотреть ваш код login.php :) – Deepak

+0

Вся суть этого вопроса в том, что вы не можете этого сделать. Это не законное ограничение, это техническое. 'file_get_contents' не может волшебным образом увидеть исходный код PHP, который создает веб-сайт. И если ваш файл 'login.php' содержит конфиденциальную информацию, вы пишете ужасное программное обеспечение. – meagar

0

В моем случае я смог прочитать php-источник файлов на моем сервере с помощью htmlentities: $ Filedata = file_get_contents ('myfile.php'); echo htmlentities ($ Filedata);

Но этот метод не работает для удаленных файлов. Возможно, это зависит от конфигурации сервера (при обслуживании php), как указано выше.

Смежные вопросы