2010-05-02 2 views
24

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

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

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

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

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

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

Есть ли способ, что я могу это сделать?

+0

Только что искали в Google, чтобы приехать сюда. Что делать, если другой сервер находится в интрасети того же сервера? Это может быть очень полезно при повторном использовании кода на корпоративном уровне и балансировке нагрузки на основе PHP. –

ответ

31

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

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

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

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

+1

Да, вы можете использовать 'file_get_contents', а не' file_put_contents', чтобы сохранить его на своем сервере, а не использовать 'include'. Хотя это опасная и рискованная вещь для ИМО. Но возможно. И вы даже можете извлечь из него определенный код и написать только код, который вам нужен из файла. – SoLoGHoST

+0

У меня есть разрешения на игру с php.ini Я уже включил allow_url_include. , но когда я использую упомянутый метод. Я ничего не получаю в переменной. означает, что переменная имеет значение null. Я не знаю, как передать его на main.php Я использую этот метод, чтобы люди не взламывали мои скрипты. , так что будет часть скрипта на моем сервере. вот почему мне нужно использовать этот метод – SolidSnake

0

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

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

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

Надеется, что это помогает ...

Martin

+0

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

+0

Как сделать скрипт в Интернете защищать ваши скрипты? Я не уверен, что понимаю ваш подход ... –

+0

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

0

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

+0

да Мне это нужно – SolidSnake

2

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

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

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

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

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

+0

извините, что это не то, что мне нужно. – SolidSnake

+0

Вы также можете использовать 'file_put_contents', чтобы сохранить его на своем сервере, а не записывать его в файл. – SoLoGHoST

3

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

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

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

вариантов у вас есть следующие:

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

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

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

+0

Все напрасно, боюсь –

2

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

/path_to_myserver_root/httpdocs/clients/client01/Wwwroot/scriptA.php /path_to_myserver_root/httpdocs/clients/client02/wwwroot/scriptA.php ETC ....

ТОГДА: /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.

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