我有一个脚本可以生成我的大数据库的报告数据。
我创建了一个 cron,它每周在 Sundat 的 23:00 生成此报告并将其发送到许多电子邮件。
如果我直接运行脚本(在浏览器中复制 php 脚本的链接并启动它),脚本可以正常工作,因为每个客户端都会向我发送我想要的电子邮件。
如果 cron 启动脚本,我只收到第一个客户的电子邮件,但没有收到另一个客户的电子邮件,我收到的电子邮件数量是正确的,但不是客户的。示例:
我有 5 个客户名称:a、b、c、d、e。
如果我直接在浏览器中启动脚本,我会收到:
一封电子邮件 a
一封电子邮件 b
一封电子邮件 c
一封电子邮件 d
一封电子邮件 e
如果 cron 启动我收到的脚本:
5 封电子邮件
这怎么可能?剧本是一样的!cron 脚本在 crontab 中:
0 23 * * 0 root wget http://127.0.0.1/reports/generate_reports_settimanale.php
另一个考虑因素是这个脚本大约需要 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 不是...这是不可能的。为什么?