1

大きなデータベースのレポート データを生成するスクリプトがあります。
毎週 Sundat の 23:00 にこのレポートを生成し、多くの電子メールに送信する cron を作成しました。
スクリプトを直接実行すると (ブラウザ内で php スクリプトのリンクをコピーして起動すると)、スクリプトは正常に動作し、クライアントごとに必要なメールが送信されます。

cron がスクリプトを開始すると、最初のクライアントの電子メールのみを受信し、他のクライアントの電子メールは受信しません。クライアントの電子メールではなく正しい数の電子メールを受信します。例:
5 つのクライアント名が必要です: a、b、c、d、e。
ブラウザでスクリプトを直接起動すると、次
のメールが届きます。 a に 1 つのメール
b に
1 つのメール c に
1 つのメール d に
1 つのメール

cron が受け取ったスクリプトを起動した場合
:

それはどのように可能ですか?脚本はそのまま!cron スクリプトは crontab 内にあります。

0 23    * * 0   root    wget http://127.0.0.1/reports/generate_reports_settimanale.php

もう 1 つの考慮事項は、大量のデータと多数のクライアントがあるため、このスクリプトに約 30 分以上かかることです。

PHP のスクリプトは非常に大きいため、データ計算機の一部を切り取りました。

<?php
$db = DataManager::_getConnection();
ini_set("include_path", "../inc/phpmailer/");
require("class.phpmailer.php");
ini_set("memory_limit","64M");

//-----------------------------------REPORT SETTIMANALE------------------------------------------

$qry_inv = $db->query("SELECT * FROM customer WHERE ntype > 0 AND report_settimanale='1' ORDER BY name ASC");
while( $inv = $qry_inv->fetch_array() ) {
    //check if table exists
    $qry_tb = $db->query("SHOW TABLES LIKE 'chart_voltage_".$inv['id']."_".date('Y')."'");
    if($qry_tb->num_rows > 0){
        //saving the excel sheet
        //...
        //sending the emails
        $yourName = 'CLIENT';

        $mail = new PHPMailer();

        $mail->From     = 'email@email.com';
        $mail->FromName = 'Saeg';
        $mail->AddAddress('my_email@my_em.it'); 

        $mail->AddAttachment('/var/www/reports/my_reports.xls');

        $mail->WordWrap = 50;                              // set word wrap
        $mail->IsHTML(true);                               // send as HTML

        $mail->Subject  =  'Riepilogo settimanale dal '.$week_start_title.' al '.$week_end_title;

        $mail->Body     =  "Riepilogo settimanale dell'impianto: ".utf8_decode($inv['name']);

        $mail->AltBody  =  "Riepilogo settimanale dell'impianto: ".utf8_decode($inv['name']);

        if ( $mail->Send()){
            //ok
        }
        else{
        ?>
            <script type="text/javascript">
                alert('<?php echo ("ERROR");?>');
                window.close();
            </script>
        <?php
        }
    }
}

exit;

?>

問題がスクリプトの実行時間であるかどうかはわかりません...ブラウザで起動すると正常に動作し、cronでは動作しないということは不可能だからです...それは不可能です。なんで?

4

1 に答える 1