Подтвердить что ты не робот

Включая php файл с другого сервера с php

У меня есть два файла PHP, расположенных на разных серверах, один на http://www.mysite.com/main.php, другой на http://www.sample.com/includeThis.php.

Я хочу включить второй файл из первого.

Содержимое второго файла выглядит следующим образом:

<?php
$foo = "this is data from file one";

И первый файл:

<?php
include "http://www.sample.com/includeThis.php";
echo $foo;

Можно ли мне это сделать?

4b9b3361

Ответ 1

Нет, этот параметр отключен/не разрешен по умолчанию на большинстве веб-серверов (php.ini), поэтому вы не можете использовать include для включения файлов с удаленных адресов для соображений безопасности.

Если вы все еще хотите разрешить включение удаленных файлов, директива allow_url_include должна быть установлена ​​на On в php.ini

Но опять-таки это плохая практика с точки зрения безопасности; и, следовательно, он вообще отключен (я никогда не видел его включенным, фактически)

Если вы хотите прочитать содержимое удаленного файла, но, вы можете использовать file_get_contents вместо НО, это будет возвращено как чистый код разметки HTML, не будет никакого серверного кода.

Ответ 2

После прочтения ваших комментариев, в которых вы заявляете, что хотите сделать это как средство защиты от копирования, мой ответ является решительным, забыть. Это не то, как работает защита от копирования.

Единственное, что вы можете сделать, используя include(), - это исходный код из другого источника, который будет интерпретироваться на локальном интерпретаторе. Это по-детски легко взломать: злонамеренный клиент просто должен был echo() извлеченный код.

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

Параметры, которые у вас есть:

  • Компиляция/кодирование/обфускация script, возможно, требуется выполнение определенного PHP-модуля (много вопросов об этом на SO)

  • Создание реального веб-сервиса (например, с использованием SOAP), который выполняется на вашем сервере, и выполняет запрошенные операции

Для чего это стоит, я лично не покупаю и не рекомендую клиентам покупать, закодированные скрипты и скрипты, которые должны "звонить домой", чтобы работать. Я верю в защиту ваших продуктов с помощью строгого лицензионного соглашения (которое напугает бизнес-клиентов на покупку вашего продукта, потому что риски попадания воровства слишком дороги.)

Ответ 3

Используйте file_get_contents, чтобы открыть файл, добавьте его ко второму файлу так:

$secondFile = file_get_contents('http://www.sample.com/includeThis.php');
file_put_contents('your_file', $secondFile, FILE_APPEND);

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

В любом случае, как я уже сказал, это опасная и опасная ИМО, особенно если вы не уверены в ее содержании внутри.

Кроме того, ваш_файл должен быть фактическим сервером, а не URL.

Ответ 4

Интересно, действительно ли ОП нашел решение для себя. Насколько я знаю, единственным способом работать с этим было бы иметь все ваши клиентские учетные записи на том же сервере, что и скрипты, которые вы хотите включить, - я сделал что-то подобное:

/path_to_myserver_root/httpdocs/clients/client01/wwwroot/scriptA.php /path _to_myserver_root/httpdocs/clients/client02/wwwroot/scriptA.php ETC....

THEN: /path _to_myserver_root/privatefiles/myapp/scriptB.php

wwwroot - это место, где указывается каждый клиентский домен.

scriptA.php имеет некоторую бизнес-логику, а затем включает scriptB.php для этого функции с полным путем выше:

требуется ( '/path_to_myserver_root/privatefiles/MyApp/scriptB.php')

scriptB.php находится в приватном защищенном каталоге на сервере, недоступном по HTTP и не обходимом клиенту.

Теперь помните, мои причины для этого - поддерживать согласованность версий между несколькими учетными записями, а не скрывать некоторые собственные магические php-коды от моих клиентов. Но я полагаю, что это может быть реализовано для этой цели.

Meh, YMMV.

Ответ 5

Когда вы пытаетесь переходить по доменам, как вы предложили, вы фактически не включаете файл, который сидел там, готовый сделать - процесс отличается. Машина должна вернуть файл по http, который не является тем, что включает оператор include.

Кроме того, если вы используете общий хостинг, PHP часто настроен таким образом, чтобы вы не выходили за пределы своего собственного домена.

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

Надеюсь, что это поможет...

Martin

Ответ 6

переименуйте первый файл в .txt
то подумайте дважды, вы уверены, что вам нужен кросс-домен.