2017-03-13 8 views
0

私の状況は次のとおりです。Debian LinuxAJAXを使ってファイルをダウンロードするとPHP Webサーバー全体がフリーズするのはなぜですか?

、私は2つの報告技術、JSReportPHP-Reportsを「バインド」したいと思います。

PHP-Reportsは正確HTMLと、それが完了すると、複数のファイルタイプにエクスポートしたレポートの書式を設定するために私を許可するだけSQLJSReportとデータおよび関連するサブ合計を得るために私を許可します。

問題は次のとおりです。JSReportにアクセスするために、レポートデータファイルの保存を自動化したいと考えています。

ことを行うために、私は少しにPHP-Reportsソースを変更した:

私は、タグのhrefにURLでダウンロードリンクの各Ajaxスクリプトをクリックの上にバインドするためにjQueryを使用。今

$(".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のファイル:ここで

は、JSの一部である

  • コマンド:私はそれは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); 
    

    wgetを使用した行
  • cURLコマンドライン
  • もしくはshell_execを用いないと
  • カール()

それはPHP Serverの外を動作しますが、私はボタンをクリックしたときにをフリーズ。それはまたがフリーズしたときにダウンロードしようとするとフリーズしますPHP ServerPHP Serverを実行するシェルの外にあっても、のダウンロードはPHP Serverにダウンロードされます。

これは私がダウンロードに使用している技術ではなく、より深刻な問題です。 /および/またはPHP-ReportsPHP Serverとダウンロードを凍結する動作があることをお勧めします。しかし、私は何ができるのか分からない。

ヒントやアイデアがあれば幸いです。

ありがとうございました。

+0

'PHP-Server'は複数の同時リクエストをサポートしますか? – Alnitak

+2

PHPサーバはシングルスレッドであり、長時間実行する操作を実行している場合は、これが完全に予想されます。さらに、PHP開発Webサーバーは、テスト中で、運用中でない場合にのみ使用されます。 – user2064000

+0

'async:false'はあなたの* browser *もロックします。それがその全体のポイントです。 – ceejayoz

答えて

0

解決策は単純だった:

私はPHP-ServerからApachePHP-Reportsアプリケーションを移動し、ダウンロードが正常に行われています。

関連する問題