Да, но нет
Если вам абсолютно необходимо взломать что-то, чтобы вызвать конкретный php-файл.Например, если у вас есть файл /somepath/yourscript.php
, он может быть вызван из общей сети.Оттуда вам придется самостоятельно загружать Drupal, если вы хотите что-то в пространстве имен Drupal, или вам придется использовать require
или include
для каждого файла, где вы хотите что-то вызвать ... , ноэто плохая идея.
Для начальной загрузки Drupal вам понадобится что-то вроде этого:
include_once 'path.to.../includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
В этот момент вы можете смахнуть свое лицо с любым чудовищем, которое выСоздайте.Надеюсь, вы заметили, что, загрузив Drupal, вы, вероятно, не сэкономите время, выполняя то, что хотели в первую очередь, поместив в свою файловую систему какой-то мошеннический скрипт.
The Drupal Way
Вместо этого используйте то, что дает вам Drupal ... A menu hook
, реализованный как MENU_CALLBACK
.Это сразу же заберет запрос и отправит его на ваше усмотрение.В вашей функции ничто не мешает вам просматривать переменные $_POST
и $_GET
, но вы получаете немного сахара Drupal, поскольку ваш MENU_CALLBACK
может принимать параметры URL, проверять их действительность и передавать их в вашу функцию, чтобы вы моглииметь некоторые гарантии того, что вы работаете с действительными данными.
Вам нужно только определить хук меню и функцию обратного вызова.Чтобы использовать проверку, вы можете использовать именованный аргумент, например %arg
вместо %
в примере ниже.Если вы используете именованные параметры, вы затем создадите функцию с именем arg_load($arg)
, которая обеспечит наличие у вас действительного параметра, а затем вернет значение, которое будет передано в ваш callback_function
.Вот как может выглядеть ваш Drupal-код:
function your_module_menu(){
$items['js/calls/this/path/%'] = array(
'title' => 'Some callback',
'description' => 'Will call callback_function',
'page callback' => 'callback_function',
'page arguments' => array(4),
'access arguments' => array('access content'),
'type' => MENU_CALLBACK
);
// moar code here!
return $items;
}
function callback_function($url_var){
// drupal_json_output manages your content-type header
// and the json_encode for you.
drupal_json_output($url_var);
}
Я думаю, что Drupal-путь намного лучше, чем взломанный однофайловый, по нескольким причинам.Во-первых, разработчики поймут, что вы делаете, если вы пойдете по пути Drupal.Во-вторых, вы можете изменить URL-адрес по мере необходимости.
Единственная причина, по которой я бы выбрал автономный файл, заключается в том, что файл не имеет ничего общего с чем-либо необходимым из Drupal И , чтобы действие было чертовски быстрым.Как и так быстро, разница во времени между загрузкой Drupal и не займет слишком много времени.В этом случае я бы, вероятно, использовал apache или nginx для пересылки URL-пути к файлу где-то еще в файловой системе.И если это так, я с удовольствием поеду свой скромный пирог.