Это мой первый раз в PHP и мой первый раз с Joomla. Я пришел из тяжелого не-Web C # /. Net фона.
Я написал собственный модуль Joomla, который взаимодействует со сторонним WebService через nuSoap.
Все это прекрасно работает, если я просто запускаю файлы .php в моей собственной не-Joomla PHP-среде на моем компьютере разработчика.
Тем не менее, если я правильно понимаю, Joomla блокирует все запросы ко всем, кроме index.php
, это правильно?
Как мне разрешить прямой доступ к моему собственному файлу .php?
это пример того, как я запрашиваю его из клиентского JavaScript с помощью jQuery:
$.ajax({
url: 'MyFile.php',
type: 'POST',
data: { ... },
success: function(data, status) {
....
где MyFile.php в настоящее время физически находится на /htdocs/modules/mod_mymodule/MyFile.php
Я знаю, что разрешение прямых запросов к этому файлу может представлять угрозу безопасности, однако мне нужно, чтобы это работало как можно скорее, и я позабочусь о проблемах безопасности позже.
источник
url: '/modules/mod_mymodule/MyFile.php',
Ответы:
Обычно единственное, что препятствует прямому доступу к файлу joomla, - это строка в верхней части файла:
Если этого еще нет в начале файла, у вас не должно возникнуть проблем с простым доступом к файлу напрямую.
Перенаправление файла htaccess уже имеет условия, чтобы не перенаправлять, если файл или папка существует:
Если этого не произойдет, вы не сможете загрузить файлы javascript или css!
Так что на самом деле все, что вам действительно нужно сделать, это удалить эту строку из верхней части файла, и вы сможете получить доступ к файлу напрямую.
Самое важное, на что следует обратить внимание, - это то, что ни один из классов Joomla не будет загружен, поэтому вы должны запустить этот файл как отдельный файл (что вы уже делаете).
Насколько я знаю, не должно быть никакого риска безопасности при непосредственном доступе к файлу php, если это является предполагаемым поведением. Поскольку большинство файлов в Joomla предполагают, что к ним нет прямого доступа, лучше заблокировать этот прямой доступ. В вашем случае вы намерены получить прямой доступ к этому коду, так что риска нет. Вы можете столкнуться с другими рисками безопасности, принимая данные POST и не фильтруя их должным образом (что проще, если вы разрешите Joomla сделать это за вас), но это не связано с тем, доступен ли файл напрямую или нет.
источник
com_ajax
но так как я совершенно новичок в Joomla (и вообще в PHP), я хотел быстрый выход, который не требовал реализации дополнительных вещей. Теперь, когда вы упомянули, чтоnone of the Joomla classes will be loaded
я понимаю, что это не правильное решение моей проблемы. Разве есть способ вручную «загрузить» фреймворк Joomla по требованию из моего отдельного файла .php?$user = JFactory::getUser()
должно работать, чтобы получить информацию о текущем пользователе.Альтернативное решение,
Если вы разработали модуль в правильной структуре Joomla, то вместо включения ядра Joomla в файл модуля вы можете использовать его
com_ajax
дляajax
вызова модуля или плагина.Если вы работаете с веб-сервисами и планируете использовать его на многих сайтах, очень просто создайте модуль / плагин Joomla, к которому можно получить доступ через ajax, и установка этого модуля / плагина довольно проста, как и любые другие расширения Joomla.
Подробную документацию можно найти здесь. Также, если вы используете более старую версию Joomla, есть компонент, доступный для реализации интерфейса Ajax. ,
Эта функция Ajax встроена в версию J3.2 и выше, поэтому нижеприведенная версия должна использовать эти компоненты.
Надеюсь, это имеет смысл!
источник