0

jQuery からコマンドを実行するために php shell_exec を使用していますが、タイムアウトし続けます。

したがって、私のjqueryは次のとおりです。

var send = {
    url: $(this).data('url')
}

$.ajax({
    type: "POST",
    url: "<?php echo base_url(); ?>index.php/upload",
    data: send,
    //dataType: "json",
    //timeout: 8000,
    beforeSend: function() {

    },
    success: function(response) {
        console.log(response);
    },
    error: function () {
        alert('error');
    }
});

次に、shell_exec を実行する関数を呼び出します

function upload(){
    $output = shell_exec("wget {$_POST['url']} 2>&1");      
    echo "<pre>" . $output . "</pre>";
}

wget get に投稿された URL が小さなファイルをプルしている場合、これは正常に機能しますが、wget が 20 MB を超えるファイルを取得している場合、500 (内部サーバー エラー) が発生します。

これまでに確認したことは、すべてのphp設定ファイルのアップロード制限、最大ファイルサイズなど、メモリ制限すべてを最大に設定しました。

私が得られないのは、これがローカルで正常に機能したことですが、ホスティングではこのエラーが発生します。ホスティングメディアテンプルに連絡したところ、サポートの範囲外であるとのことでした.

さらにデバッグする方法について何か提案はありますか?

4

1 に答える 1

0

何が起こっているかというと、PHP スクリプトがタイムアウトするかどうかに関係なく、ある種のリバース プロキシ (Apache バランサーなど) がタイムアウトするということです。次のようなスクリプトを作成することで確認できます。

<?php sleep(60); ?>

さまざまな遅延を試しています。

いずれにせよ、一部のブラウザー (IE8+ など) は何があってもタイムアウトするため、時間制限を引き上げることは解決策のように見えます。

通常、これは wget プロセスを切り離し、5..30 秒の更新でプロセスのステータスを確認する PHP ページを用意することで解決されます。しかし、多くのプロバイダーは当然のことながら、デタッチ プロセスについて漠然とした見方をしています。そのため、ソリューションが受け入れられるかどうかをプロバイダーに確認する必要があります。

そうである場合は、「 Asynchronous shell exec in PHP 」を確認できます。

于 2012-09-21T15:31:59.997 に答える