我的情況是:爲什麼使用AJAX下載文件會凍結整個PHP Web服務器?
在一個Debian Linux
,我要「綁定」兩個報告技術,PHP-Reports
與JSReport
。
PHP-Reports
允許我只SQL
獲得的數據和相關的小計和JSReport
允許我精確地HTML
格式的報表,一旦它完成多種文件類型的出口。
問題是:我希望能夠自動保存報告數據文件,以便在JSReport
上得到它。
爲了做到這一點,我已經修改了一下PHP-Reports
來源:
我以前jQuery
上點擊一個Ajax
腳本綁定在每一個環節是下載在對標籤的href的URL。
這裏是JS部分:
$(".report_link").each(function() {
$(this).bind('click', function() {
$.ajax({
url: "/user/ajax/save_a_file.php",
type: 'GET',
data: "url=" + $(this).attr("href"),
// Ajax needs synchronous execution in this case
async:false,
success: function(result) {
alert("Resultat requête AJAX:" + result);
},
error: function(xhr, ajaxOptions, thrownError) {
console.log("AJAX -> Erreur " + xhr.status + ": " + thrownError);
console.log("WBREPORT -> Error : can not save file");
}
});
});
});
現在我的Ajax文件:
$complete_url = "";
$starting_date = "";
$ending_date = "";
$url = "";
if(null !== $_GET['url'])// && null !== $_GET['macros'])
{
$url = $_GET['url'];
if (null !== $_GET['macros'])
{
$macros = $_GET['macros'];
if (null !== $macros['date']['start'])
$url .= '¯os[date][start]=' . urlencode($macros['date']['start']);
if (null !== $macros['date']['end'])
$url .= '¯os[date][end]=' . urlencode($macros['date']['end']);
}
}
$filedir = "/var/www/wbreport/user/data/residents/";
$report_name = "test.json";
$report_filepath = $filedir . $report_name;
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec ($ch);
$error = curl_error ($ch);
curl_close ($ch);
我嘗試了很多方法,使其在AJAX文件發生:
- 命令與wget一致
- cURL命令行
- 和捲曲沒有用了shell_exec的()
它的工作原理外PHP Server
的,但凍結當我點擊按鈕。它也凍結,當我嘗試下載,而有另一個凍結下載PHP Server
,即使PHP Server
是外殼執行它。
這不是我用來下載的技術,這是一個更深的問題。我建議PHP Server
與/和/或PHP-Reports
有凍結下載的行爲。但我不知道它會是什麼。
任何提示或想法將不勝感激。
感謝。
'PHP-Server'是否支持多個併發請求? – Alnitak
PHP服務器是單線程的,如果你正在執行長時間運行的操作,這是完全可以預料的。另外,PHP開發Web服務器僅用於測試期間而不用於生產。 – user2064000
'async:false'也會鎖定您的*瀏覽器*。這就是它的全部要點。 – ceejayoz