включая php файл с другого сервера с php - PullRequest
24 голосов
/ 02 мая 2010

У меня есть два файла 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;

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

Ответы [ 6 ]

33 голосов
/ 02 мая 2010

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

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

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

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

3 голосов
/ 08 августа 2010

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

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

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

Доступны следующие варианты:

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

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

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

2 голосов
/ 24 мая 2012

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

/ path_to_myserver_root / httpdocs / клиенты / 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 от моей клиентуры - но я полагаю, что он может быть реализован для этой цели.

Мех, YMMV.

0 голосов
/ 02 мая 2010

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

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

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

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

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

0 голосов
/ 02 мая 2010

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

0 голосов
/ 02 мая 2010

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

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

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

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

Martin

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