У меня есть два файла 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;
Есть ли способ сделать это?
Нет, этот параметр отключен / не разрешен по умолчанию на большинстве веб-серверов (php.ini), поэтому вы не можете использовать include
для включения файлов с удаленных адресов по соображениям безопасности .
Если вы все же хотите разрешить включение удаленных файлов, директива allow_url_include
должна быть установлена в On
в php.ini
Но опять-таки это плохая практика, с точки зрения безопасности; и, следовательно, он вообще отключен (я никогда не видел его включенным, фактически)
Однако, если вы хотите прочитать содержимое удаленного файла , вместо него вы можете использовать функцию file_get_contents
но это будет отображаться как чистый код разметки HTML, не будет никакого кода на стороне сервера .
После прочтения ваших комментариев, в которых вы заявляете, что хотите сделать это как средство защиты от копирования, мой ответ является решительным, забудьте об этом . Это не то, как работает защита от копирования.
Единственное, что вы можете сделать, используя include()
– это исходный код из другого источника, который должен интерпретироваться на локальном интерпретаторе . Это по-детски легко взломать: вредоносному клиенту просто нужно будет echo()
извлеченный код.
Выполнение удаленного сценария удаленно (на вашем сервере) вам не поможет, потому что состояние этого скрипта (переменные, функции …) не будет присутствовать в скрипте, из которого вы его вызываете.
Возможные варианты:
Компиляция / кодирование / обфускация скрипта, возможно, требуется выполнение определенного PHP-модуля (много вопросов об этом на SO)
Создание реального веб-сервиса (например, с использованием SOAP), который выполняется на вашем сервере, и выполняет запрошенные операции
Однако для того, что это стоит, я лично не покупаю и не рекомендую клиентам покупать, закодированные сценарии и скрипты, которые должны «звонить домой», чтобы работать. Я верю в защиту ваших продуктов с помощью строгого лицензионного соглашения (что напугает бизнес-клиентов на покупку вашего продукта, потому что риски попадания воровства слишком дороги).
Используйте file_get_contents
, чтобы открыть файл, добавьте его ко второму файлу, например:
$secondFile = file_get_contents('http://www.sample.com/includeThis.php'); file_put_contents('your_file', $secondFile, FILE_APPEND);
Это будет работать, если вы хотите поместить его в конец файла. Чем просто включить в свой файл.
В любом случае, как я уже сказал, это опасная и опасная ИМО, особенно если вы не уверены в ее содержании внутри.
Кроме того, ваш_файл должен быть фактическим сервером, а не URL-адресом.
Интересно, действительно ли ОП нашел решение для себя. Насколько я знаю, единственным способом работать с этим было бы иметь все ваши учетные записи клиентов на том же сервере, что и сценарии, которые вы хотите включить, – я сделал что-то похожее:
/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.
Когда вы пытаетесь перейти через домены, как вы предлагали, вы фактически не включаете файл, который сидит там, готовый сделать – процесс отличается. Машина должна вернуть файл по http, который не является тем, что касается оператора include.
Кроме того, если вы используете общий хостинг, PHP часто настроен таким образом, чтобы вы не выходили за пределы своего собственного домена.
Если вы не под этим ограничением, одним из решений может быть использование PHP для копирования копии файла с другого сервера, а затем включить его, как только он будет находиться в вашем домене. Еще один пример может заключаться в написании небольшого сценария «развертывания», который копирует его везде, где он должен быть, когда вы вносите изменения …
Надеюсь это поможет…
Мартин
переименуйте первый в .txt
затем подумайте дважды, вы уверены, что вам нужен кросс-домен,