0

重複の可能性:
長時間実行される php スクリプトを管理する最良の方法は?

大きなメーリング リストを作成する必要があります。すべてが完全に機能しますが、フォーム ページを送信すると、すべてのメールが送信されるまで読み込まれます。したがって、このメール送信スクリプトをバックグラウンドで実行し、スクリプトがバックグラウンドで実行されていることをユーザーに通知します。Ajaxは使えません。

私は.. proc_open、exec、shell_exec ..のようなものが欲しい..

4

8 に答える 8

1

PHP has an function that can keep an process running even if the user that requested the page leaves the page : ignore_user_abort if you check the comments there you can see this example :

<?php
ignore_user_abort(1); // run script in background
set_time_limit(0); // run script forever
$interval=60*15; // do every 15 minutes...
do{
   // add the script that has to be ran every 15 minutes here
   // ...
   sleep($interval); // wait 15 minutes
}while(true);
?>

It IS an pure php cron job BUT, the risk with this script is that it continues indefinitely or atleast untill you reset/kill php.

Setting the set_time_limit(0); to set_time_limit(86400); would kill the script after an day.

This should point you in the right direction/.

IMPORTANT After the problem by the OP, it is advisable to only run this script if you have SSH access to the server so you can KILL/RESTART php apache in case the server keeps hanging. Also do not run the script on a LIVE server.

于 2012-07-20T10:12:26.850 に答える
1

データベースからキューを取得して電子メールを送信するphpスクリプトを実行するcronジョブを持つことができます

メインスクリプトでは、メールをキューに追加するだけです

プログレスバーが必要な場合にのみajaxを使用します。ajax ソリューションでは、終了するまでウィンドウを開いたままにしておく必要があります。

于 2012-07-20T09:40:45.820 に答える
0

cronスクリプトを設定したくない場合は、ajax関数を使用してスクリプトを実行することもできます。

于 2012-07-20T09:46:45.517 に答える
0

でフォームを送信AJAXし、Divの進捗状況を更新します

于 2012-07-20T09:43:17.340 に答える
0

たとえば、スクリプトランタイムの現在の状態「A」(dbまたはファイル)に「complete」/「incomplete」と書き込みます。バックグラウンドでスクリプトを開始した後、AJAX処理を使用して「A」で変更されるユーザー待機ページに送信します。

于 2012-07-20T09:43:51.367 に答える
0

このAjaxスクリプトは、バックグラウンドでPHPファイルを実行します。必要に応じて、HTML要素に応答を送信することもできます。

<script type="text/javascript" language="javascript">

function execute(filename,var1,var2,var3)
{
var xmlhttp;
if(window.XMLHttpRequest)
{
    //Code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp = new XMLHttpRequest();
}
else if(window.ActiveXObject)
{
    //Code for IE6, IE5
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else
{
    alert("Your browser does not support AJAX!");
}

    var url = filename+"?";
    var params = "var1="+var1+"&var2="+var2+"&var3="+var3;

    xmlhttp.open("POST", url, true);

xmlhttp.onreadystatechange=function()
{
    if(xmlhttp.readyState==4)
    {
        //Below line will fill a DIV with ID 'response'
        //with the reply from the server. You can use this to troubleshoot
        //document.getElementById('response').innerHTML=xmlhttp.responseText;

        xmlhttp.close;
    }
}

    //Send the proper header information along with the request
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xmlhttp.setRequestHeader("Content-length", params.length);
    xmlhttp.setRequestHeader("Connection", "close");

    xmlhttp.send(params);
 }
 </script>
于 2012-07-20T09:44:17.497 に答える
0

php スクリプトを呼び出す AJAX 呼び出しを作成できます。このようにして、リクエストが満たされている間、サイトは引き続き機能します。完了すると、AJAX が返され、ユーザーにメッセージ ボックスを表示できます。

詳細については、少なくともこれを確認してください。AJAX とは何か、それが何をするのかを理解している場合は、これを使用してください。

于 2012-07-20T09:42:44.977 に答える
0

これにはAjaxリクエストが最適です。JavaScript を使用してリクエストを送信し、進行状況をユーザーに報告することもできます (追加の作業が必要になる場合があります)。

ajax が難しすぎる場合は、iframe でスクリプトを実行してください。これは最も洗練された方法ではありませんが、最も単純な方法です。

于 2012-07-20T09:42:58.090 に答える