在PHP中不调用时运行的函数

时间:2012-01-09 12:23:26

标签: php function if-statement

您好我正在运行以下脚本,我遇到的问题是即使它不是本月的第一个星期一,月度函数也会被调用?应该发生的是每天运行的每一天,每个星期一每个星期一运行,每月运行一个月。

顺便说一下,我曾经在那些日期用cron调用这些脚本,因为我不得不要求服务器所有者每次都设置一个cron作业,因为他需要很长时间才能完成这项工作,所以更容易让cron每天都打到脚本,我用php控制其余部分。

// SETS THE TIMEZONE TO UK TIME
date_default_timezone_set('Europe/London');

// DEFINES WEEKDAY AND DAY OF THE MONTH
$weekday = date('D');
$dayOfMonth = date('d');

// RUNS THE EVERY DAY FUNCTIONS TO MAIL USERS IN THAT GROUP EVERY DAY
gasoildailyemailer();
dervdailyemailer();
kerodailyemailer();
if ($weekday == 'Mon')
{

// RUNS THE WEEKLY FUNCTIONS TO MAIL USERS IN THAT GROUP EVERY WEEK
 gasoilweeklyemailer();
 dervweeklyemailer();
 keroweeklyemailer();
if ($dayOfMonth <=6)

// RUNS THE MONTHLY FUNCTIONS TO MAIL USERS IN THAT GROUP EVERY MONTH
gasoilmonthlyemailer();
dervmonthlyemailer();
keromonthlyemailer();
}

?>

<?php

function gasoildailyemailer() {
echo 'GAS OIL DAILY';
};
function dervdailyemailer() {
echo 'DERV DAILY';
};
function kerodailyemailer() {
echo 'KERO DAILY';
};

?>

<?php

function gasoilweeklyemailer() {
echo 'GAS OIL WEEKLY';
};
function dervweeklyemailer() {
echo 'DERV WEEKLY';
};
function keroweeklyemailer() {
echo 'KERO WEEKLY';
};

?>

<?php

function gasoilmonthlyemailer() {
echo 'GAS OIL MONTHLY';
};
function dervmonthlyemailer() {
echo 'DERV MONTHLY';
};
function keromonthlyemailer() {
echo 'KERO MONTHLY';
};

?>

2 个答案:

答案 0 :(得分:1)

这是你不总是使用大括号的原因:

if ($dayOfMonth <=6) 
    gasoilmonthlyemailer();  // THIS IS INSIDE THE IF
    dervmonthlyemailer();    // BUT THIS IS OUTSIDE!
    keromonthlyemailer();    // THIS ONE TOO!

通过添加大括号来修复它,因为你总是总是做(警告:这里可能的宗教论点;这只是我自己的看法):

if ($dayOfMonth <=6) {
    gasoilmonthlyemailer();
    dervmonthlyemailer();
    keromonthlyemailer();
}

顺便说一句:你会知道三个函数中只有两个被错误地调用了。为什么不明确说明这一点,以便其他人从前面的知识中受益?

答案 1 :(得分:1)

您在if ($dayOfMonth <=6)之后错过了方括号。