2016-02-23 6 views
-1

У меня есть проблема с URL-включает в себя, что я не понимаю ...: Для тестирования я закодирован следующий сценарий:PHP URL включает в себя не работает

<?php 
error_reporting(E_ALL|E_STRICT); 
ini_set('display_errors', 1); 
echo "First text"; 
include("http://www.xxxxxxxxxx.de/includetest.php"); 
echo "Second text"; 
?> 

allow_url_include установлен в на , (через php.ini)

Allor_url_fopen ist установлен в положение on. (через php.ini)

В includeetest.php содержится только обычный текст для тестирования. Существует не php-код.

Результат этого сценария - это только «первый текст». После этого сценарий остановлен.

Если я использую «или умереть (« не работает »); после того, как включать, в результате весь текст (а также второй текст) со следующим предупреждением:

Внимание: включают в себя (1): не удалось не удалось открыть поток: Нет такого файла или каталога в/SRV2/WWW /htdocs/xhtml-test/_baustelle/testphp02.php в строке 6 Предупреждение: include(): Не удалось открыть '1' для включения (include_path = '.:/usr/share/php:/usr/share/pear') в /srv2/www/htdocs/xhtml-test/_baustelle/testphp02.php на линии 6

Почему? Я в недоумении ...

+0

Для 'или die' работать, вы должны использовать правильную группировку:' (включить «..») или умереть (..) ', в противном случае приоритет будет вызывать разный интерпретация. – deceze

+1

Возможный дубликат [Полный URL-адрес не работает с php include] (http://stackoverflow.com/questions/13369529/full-url-not-working-with-php-include) – Glapa

+0

Проблема не в том, , Проблема заключается в остановке скрипта. – Julian

ответ

0

Вот проблема кода:

// Won't work; file.txt wasn't handled by www.example.com as PHP 
include 'http://www.example.com/file.txt?foo=1&bar=2'; 

// Won't work; looks for a file named 'file.php?foo=1&bar=2' on the 
// local filesystem. 
include 'file.php?foo=1&bar=2'; 

// Works. 
include 'http://www.example.com/file.php?foo=1&bar=2'; 

Ref. из этого Is Here

Файл, который вы указываете, не является допустимым файлом php, поскольку он уже отключен сервером как php.

Этот код должен работать, как вы хотите:

<?php 
error_reporting(E_ALL|E_STRICT); 
ini_set('display_errors', 1); 
echo "First text"; 
echo file_get_contents("http://www.xxxxxxxxxx.de/includetest.php"); 
echo "Second text"; 
?> 
+0

Спасибо @ masum-nishat file_get_contents работает, это правильно. , но мой код (с включенным) работает также у многих других клиентов. только у одного клиента он не работает. Я думаю, что это проблема с сервером. но что? – Julian

+0

Я не знаю, что происходит. Но вы можете что-то проверить: 1. сайт находится на 'http' или' https' 2. Вручную проверьте доступность URL-адреса, 3. Попробуйте подключить другой URL-адрес и посмотреть журнал ошибок. надеюсь, это поможет –

0

Вы должны использовать относительные пути в PHP include функции.

include '/path/to/file.php'; // You can include file by relative path 

Согласно документации,

включает через HTTP

Если "URL включают обертки" будут включены в PHP, вы можете указать файл быть включены, используя URL (через HTTP или другую поддерживаемую оболочку - см. Поддерживаемые протоколы и Wrappers для списка протоколов) вместо локального пути . Если целевой сервер интерпретирует целевой файл как код PHP , переменные могут быть переданы во включенный файл с использованием URL-адреса строки, используемой с HTTP GET. Это не совсем то же самое, что и файл , включающий в себя файл и имеющий наследование переменной области видимости родительского файла ; сценарий фактически запускается на удаленном сервере , и результат затем включается в локальный скрипт.

/* This example assumes that www.example.com is configured to parse .php 
* files and not .txt files. Also, 'Works' here means that the variables 
* $foo and $bar are available within the included file. */ 

// Won't work; file.txt wasn't handled by www.example.com as PHP 
include 'http://www.example.com/file.txt?foo=1&bar=2'; 

// Won't work; looks for a file named 'file.php?foo=1&bar=2' on the 
// local filesystem. 
include 'file.php?foo=1&bar=2'; 

// Works. 
include 'http://www.example.com/file.php?foo=1&bar=2'; 

$foo = 1; 
$bar = 2; 
include 'file.txt'; // Works. 
include 'file.php'; // Works. 

Предупреждение

безопасности предупреждение

Удаленный файл может быть обработан на удаленном сервере (в зависимости от расширения файла и то, если удаленный сервер работает PHP или not), но он все равно должен создать допустимый PHP-скрипт, потому что он будет обработан на локальном сервере. Если файл с удаленного сервера должен обрабатываться и выводиться только, readfile() - это много полезной функции . В противном случае следует обратить особое внимание на то, что защищает удаленный скрипт для создания действительного и желаемого кода.

Вот понимание путей.

1) Относительные пути

index.html 
/graphics/image.png 
/help/articles/how-do-i-set-up-a-webpage.html 

2) Абсолютные Дорожки

http://www.mysite1.com 
http://www.mysite2.com/graphics/image.png 
http://www.mysite3.com/help/articles/how-do-i-set-up-a-webpage.html 

Первое отличие вы заметите, между двумя различными типами связей является то, что абсолютные пути всегда включают доменное имя веб-сайта, включая http://www., тогда как относительные ссылки указывают только на файл или путь к файлу. Когда пользователь нажимает на относительную ссылку, браузер переводит их в это место на текущем сайте.

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

Для получения дополнительной информации см. Также link.

Надеется, что это поможет вам :)

+0

Да, я могу использовать абсолютные пути в include-функциях. для использования http-includes необходимо включить атрибут allow_url_include. и это сделано! Мой скрипт работает на многих других сайтах. Но в этом случае у одного клиента это не работает. – Julian

+0

@ Джулиан: Да. Но в некоторых случаях. См. Пример, который я включил в ответ. –

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