2017-03-13 73 views
0

我的情況是:爲什麼使用AJAX下載文件會凍結整個PHP Web服務器?

在一個Debian Linux,我要「綁定」兩個報告技術,PHP-ReportsJSReport

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 .= '&macros[date][start]=' . urlencode($macros['date']['start']); 

     if (null !== $macros['date']['end']) 
      $url .= '&macros[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有凍結下載的行爲。但我不知道它會是什麼。

任何提示或想法將不勝感激。

感謝。

+0

'PHP-Server'是否支持多個併發請求? – Alnitak

+2

PHP服務器是單線程的,如果你正在執行長時間運行的操作,這是完全可以預料的。另外,PHP開發Web服務器僅用於測試期間而不用於生產。 – user2064000

+0

'async:false'也會鎖定您的*瀏覽器*。這就是它的全部要點。 – ceejayoz

回答

0

解決辦法很簡單:

我搬離PHP-ServerPHP-Reports應用Apache和下載已經被正確執行。

相關問題