Как изолировать запрос к другому скрипту PHP?

У меня есть сайт, ориентированный на Ajax, содержание которого заполняется запросами на скрипт PHP-оператора.

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

Метод, который я использовал, – это передать URL-адрес с строкой запроса через file_get_contents() а затем проанализировать возвращаемый JSON с помощью json_decode() .

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

Моя query_operator($query_string) попытка создания общей функции query_operator($query_string) просто require() -ed operator.php в выходном буфере, захваченном ob_get_contents() . Я также временно сбросил массив $ _REQUEST с параметрами, которые были проанализированы из $query_string .

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

Моя вторая попытка включала использование оператора backtick (эквивалентно shell_exec() ) и сопоставление аргументов $argv массиву $_REQUEST .

Этот подход работает очень хорошо, но на хосте, который я использую, версия PHP (cli) установлена ​​в 4.4.8 – и мне нужно 5.2.x. Предполагая, что я не могу переключить версию (cli), каков следующий лучший способ изолировать запрос на другой скрипт PHP с помощью строки запроса? Любые предложения очень ценятся.

Вот моя вторая попытка:

 function query_operator($query) { $query = '--'.str_ireplace('&', ' --', $query); $contents = `php operator.php $query`; if ($json = json_decode($contents, true)) { return $json; } else { return $contents; } } 

Лучшее, что нужно сделать, в конечном счете, – это фактор вашего кода.

Независимо от того, какая логика operator.php делает, что необходимо, должна жить в некоторой библиотеке, которая затем может использоваться operator.php и любым другим скриптом, который в ней нуждается.

Когда вы это сделаете, вы избежите всех накладных расходов дополнительного процесса PHP, связи между двумя процессами и, вероятно, всего вашего json-encoding / decoding.

Если факторинг слишком занят, то любая из стратегий, которые вы описываете, должна работать как kludge. Возможно, стоит обратить внимание на то, почему ваш метод make-a-loopback-http-request (первое, что вы описали) вызвал ошибки. Это действительно должно хорошо работать, даже если оно неэффективно.