2016-12-05 6 views
1

私は自分のPHPスクリプトを使ってニュースレターを送ります。それは完璧に働いた。最近、私のホスティングプロバイダは、30メール/分を尊重するための割り当てを私に指摘します。したがって、各メール送信の間に、私はsleep(2);を挿入します。 5分(300秒)後に、その変更以来PHPスクリプトが503サービスを利用できない状態で実行を停止します

、スクリプトが停止し、返す:

不可

サービスサーバーが一時的メンテナンスのダウンタイムや容量の問題にあなたの要求をサービスすることができません。後でもう一度お試しください。 さらに、ErrorDocumentを使用して要求を処理しようとしたときに、503 Service Unavailableエラーが発生しました。

4つの所見。 (私は確認してください:それは確かに変更された)

ignore_user_abort(true); 
set_time_limit(0); 

だから、問題はmax_execution_timeに変数からない来る:私のスクリプトの先頭に

  1. は、私はそれらの2行を置きます。

  2. このスクリプトはlocalhostで正常に動作します。ここで、PHPのini変数はWebホストよりも制限されています。したがって、問題はmemory_limit変数からではありません。

  3. 私はそれがApache Timeoutの可変制限(300)である可能性があると考えました。しかし、私のホストプロバイダはそれについて懐疑的です...

  4. サーバはPHP 5.5で動作します。

これを引き起こす原因は何ですか?

スクリプト(それはphpmailerので動作します)前:

// all email addresses 
while ($row = $result->fetch_array()) 
{ 
    // ... 

    if ($mail->send()) 
    { 
     echo "success : " . $row["mail"] . "<br/>"; 
    } 
    else 
    { 
     echo "error : " . $row["mail"] . " - " . $mail->ErrorInfo . "<br/>"; 
    } 
} 

後:

// all email addresses 
while ($row = $result->fetch_array()) 
{ 
    ... 

    if ($mail->send()) 
    { 
     echo "success : " . $row["mail"] . "<br/>"; 
    } 
    else 
    { 
     echo "error : " . $row["mail"] . " - " . $mail->ErrorInfo . "<br/>"; 
    } 

    sleep(2); 
} 
+1

*あなたは*含む*スクリプトが動作していない可能性がありますか?私たちはまだ透視的ではありません。 –

+0

私はあなたの質問の書式を読みやすくするために改善しました。 [ヘルプセンター](https://stackoverflow.com/help/formatting)のStack Overflowの書式設定のドキュメントを参照して、次回にこれを行うことができます。リスト内のコードブロックは、リストレベルごとに4つのスペースと、コードブロックを示すための4つのスペースをインデントする必要があることに注意してください。 – Chris

答えて

0

私は、サーバーのmod_fastcgiの上だと思うか、等号が使用されています。

はmod_fastcgiのは、スクリプトのアイドル時間を制御し、「-idleタイムアウト」と呼ばれるオプションがありますたとえば、この古いポスト http://www.binarytides.com/php-set-time-limit/

を見てください。したがって、スクリプトが何秒もの間fastcgiハンドラに何も出力しない場合、fastcgiはそれを終了します。あなたはキューが1分ごとに処理キューとのcrontabを使用する必要があります

Apache <-> mod_fastcgi <-> php processes 

:セットアップはややこのようなものです。

これが役に立ちます。

+0

メールを送信するたびに、スクリプトはメールアドレスを出力します...だから、非アクティブ(アイドル時間)はありませんか? Apacheは私のサーバー上でlsphp(litespeed)経由で実行されています。 – Jiphou

+0

私はまだlsphpを使用していません。コマンドラインからスクリプトの実行を 'php send_mails.php'のように行います。 – rengaw83

+0

私は "rengaw83"ソリューションをテストしました。 5分後、まだ中断...実際には、それはリスピードではなく、mod_lsapiです。私のホストプロバイダ(彼らはすべてのApacheの制限を削除した)ので、私はコマンドラインを試してみます。 – Jiphou

0

これは実際にはファイル権限でさえ多くのことがあります。私はまずあなたの変更を元に戻して、それが再び働くかどうかを見ます。そうでなければ、問題を引き起こしているsleep()コマンドではないことが分かります。 sleepコマンドの場合は、phpが応答するのを待っている間に、タイムアウトに関連する問題が発生する可能性があります。代わりに.1秒間スリープ状態にして、動作するかどうかをテストしてみてください。

関連する問題