2010-08-12 83 views
1

我有一個主要是Ajax驅動的網站,其內容通過向「運營商」PHP腳本發出請求來填充。如何將請求轉換爲另一個PHP腳本?

雖然通常這些請求都來自Javascript,但有些情況下從另一個PHP腳本中查詢我的運算符很有用。

我一直在使用的方法是通過一個帶有查詢字符串的URL通過file_get_contents() - 然後解析返回的JSON與json_decode()

由於多種原因,我想避免這種實現,雖然...我在我的錯誤日誌中看到,無論出於何種原因,URL請求都更容易失敗 - 而且我讀過它並不是非常有效。

我的第一次嘗試以進行通用query_operator($query_string)型功能簡單require()輸出緩衝區內-ed operator.php,與ob_get_contents()抓獲。我還使用從$query_string解析的參數臨時重置$ _REQUEST數組。

這種方法有太多缺點 - 特別是變量作用域和MySQL連接的問題。

我的第二次嘗試涉及使用反引號操作符(相當於shell_exec()),並將參數映射到$_REQUEST數組。

這種方法實際上工作得很好,但在我使用的主機上,PHP(cli)版本設置爲4.4.8 - 而且我需要5.2.x.假設我無法切換(cli)版本,那麼使用查詢字符串對另一個PHP腳本進行沙箱請求的下一個最佳方法是什麼?任何建議不勝感激。

這是我第2次嘗試是什麼樣子:

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

回答

1

做的最好的事情,從長遠來看,是因素代碼。

無論邏輯operator.php在做什麼,都需要在某個庫中生存,然後可以由operator.php和任何其他需要它的腳本使用。

當你這樣做時,你將避免額外PHP進程的所有開銷,兩個進程之間的通信以及可能所有的json編碼/解碼。

如果因子分析現在需要做的工作太多,那麼您描述的任何一種策略都應該作爲一個kludge工作。可能值得研究爲什麼你的make-a-loopback-http-request方法(你描述的第一件事)引起錯誤。它確實應該運作良好,即使效率低下。

+0

是的,我正在尋找一個快捷方式,但保理是絕對要走的路。我創建了一個'Operator'類,它從請求方法中抽象出它的函數。 – JKS 2010-08-13 00:53:25