Использование включает междоменный домен, содержащий код php - не удалось

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

Я немного свеж с моим php, поэтому прошу извинить попытки кода - я попробовал итерации из следующего, которые могут попытаться помочь вам понять, к чему я стремлюсь!

из тегов php...

include('http://www.mydomain/common_include.php?show_section=$section');

$show_section = $_GET['show_section'];
include('http://www.mydomain/common_include.php');//Then $show_section would be available to the included file/cod

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

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

Заранее спасибо.

#

РЕДАКТИРОВАТЬ ОК ОК - Я понимаю, что это плохая практика, поэтому не буду делать это... СПАСИБО ОГРОМНОЕ ЗА БЫСТРЫЙ ОТВЕТ. Однако есть ли другие рекомендации о том, как по существу показать это базовое php-приложение на всех сайтах, не добавляя файлы в корень каждого сайта? Просто чтобы предотвратить массовое дублирование сценариев...(продумывая вслух, вызовите сценарии из БД или любых других решений) Еще раз спасибо за вашу помощь

5 ответов

Решение

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

Если вы посмотрите документацию PHP.net о include, вы можете найти это:

Если "PHP fopen wrappers" включен в PHP (что они в конфигурации по умолчанию), вы можете указать файл для включения, используя URL (через HTTP или другую поддерживаемую оболочку - см. Список поддерживаемых протоколов / оболочек для списка протоколы) вместо локального пути. Если целевой сервер интерпретирует целевой файл как код PHP, переменные могут быть переданы во включенный файл, используя строку запроса URL-адреса, используемую с HTTP GET. Строго говоря, это не то же самое, что включение файла и наследование переменной области родительского файла; скрипт на самом деле выполняется на удаленном сервере, а затем результат включается в локальный скрипт.

Что в значительной степени объясняет все это.

Корень первоначального вопроса, похоже, заключался в том, что автор постарался использовать PHP-скрипт или плагин на нескольких сайтах, а затем выполнять обременительную задачу каждый раз, когда его нужно обновить. Хотя попытка включить файлы PHP на сайты - плохая идея, лучше планировать структурирование вашего скрипта так, чтобы он был максимально автономным. Держите весь плагин, содержащийся в одном каталоге.... и убедитесь, что ваши вызовы функций используют его как можно лучше - чистые, хорошо именованные функции, унифицированные соглашения об именах и тщательно продуманный план того, какие параметры нужны каждой функции. Избегайте использования глобальных переменных.

В идеале у вас должно быть достаточно легкое время каждый раз, когда вам нужно обновить плагин / скрипт во всех местах. Вы даже можете настроить автоматизированный процесс, который будет загружать новый каталог, содержащий плагин, на каждый сайт, заменяя старый. И вызовы функций в вашем коде должны редко, если вообще изменяться.

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

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

Это очень плохая практика.
На самом деле вы включаете не PHP, а только HTML-код.

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

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

Однако, если все сайты, которые должны использовать сценарий, вы можете поместить сценарий где-нибудь в каталог, доступный пользователю, который выполняет php, и добавить этот каталог в свойство include_path php.ini ( это также можно сделать во время выполнения)

(Или вы можете создать расширение php и загрузить его как расширение)

Другие вопросы по тегам