带有PHP参数的PHP cron作业

带有PHP参数的PHP cron作业,php,cron,parameter-passing,Php,Cron,Parameter Passing,您好,我要执行以下脚本: 30 12 * * * /usr/bin/php -q /var/www/dev/create_report.php type=NR date=$(date +\%Y\%m\%d --date='2 days') 但我仍然收到以下信息: PHP Notice: Undefined index: type in /var/www/dev/create_report.php on line 18 enter code here`PHP Notice: Undefine

您好,我要执行以下脚本:

30 12 * * * /usr/bin/php -q /var/www/dev/create_report.php type=NR date=$(date +\%Y\%m\%d --date='2 days')
但我仍然收到以下信息:

PHP Notice:  Undefined index: type in /var/www/dev/create_report.php on line 18
enter code here`PHP Notice:  Undefined index: date in /var/www/dev/create_report.php on line 28
PHP Notice:  Undefined offset: 2 in /var/www/dev/create_report.php on line 30
PHP Notice:  Undefined offset: 1 in /var/www/dev/create_report.php on line 30

PHP Notice:  Undefined offset: 1 in /var/www/dev/create_report.php on line 31
PHP Notice:  Undefined offset: 2 in /var/www/dev/create_report.php on line 31
PHP Notice:  Undefined index: type in /var/www/dev/create_report.php on line 41
PHP Notice:  Undefined variable: result in /var/www/dev/create_report.php on line 89
PHP Warning:  mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, null given in /var/www/dev/create_report.php on line 89
有人能帮我吗?我对此感到厌烦

提前谢谢

更新#1 create_report.php的代码

<!doctype html>

<html lang="en">
<head>
  <meta charset="utf-8">
 </head>
 <body>
<?php
ini_set('max_execution_time', 300);
require_once 'Classes/PHPExcel.php';
//PHPExcel_Shared_Font::setAutoSizeMethod(PHPExcel_Shared_Font::AUTOSIZE_METHOD_EXACT);
// pripojenie sa k dtb
$mysqli = new mysqli('192.168.0.20', 'mfric', 'mFRIC6389mf', 'asterisk');
if ($mysqli->connect_error) {
    die('Connect Error (' . $mysqli->connect_errno . ') '
            . $mysqli->connect_error);
}
switch ($_GET['type']){
    case 'BB' : $typ = "Banska_Bystrica";$result =mysqli_query($mysqli, "select tabulka from creator_db where campaign_id like 'RWEBB%' or campaign_id like 'RWEAKVBB';");break;
    case 'TN' : $typ = "Trencin";$result =mysqli_query($mysqli, "select tabulka from creator_db where campaign_id like 'RWETN%';");break;
    case 'NR' : $typ = "Nitra";$result =mysqli_query($mysqli, "select tabulka from creator_db where campaign_id like 'RWENR%';");break;
    //case 'ZA' : $typ = "Liptovsky_Mikulas";$result =mysqli_query($mysqli, "select tabulka from creator_db where campaign_id like 'RWEZA_RK' or campaign_id like 'RWEZA_LM';");break;
    case 'ZAA' : $typ = "Zilina";$result =mysqli_query($mysqli, "select tabulka from creator_db where campaign_id like 'RWEZA%' or campaign_id like 'RWEZA_LM' or campaign_id like 'RWEZA_RK';");break;
    case 'TT' : $typ = "Trnava";$result =mysqli_query($mysqli, "select tabulka from creator_db where campaign_id like 'RWETT%';");break;        
    case 'BA' : $typ = "Bratislava";$result =mysqli_query($mysqli, "select tabulka from creator_db where campaign_id like 'RWEBA%';");break;        
    default : $typ = "N/A";
}
$datum=$_GET['date'];
$datum2=explode("-",$datum);
$datum_c2 = $datum2[2].".".$datum2[1].".".$datum2[0];
$datum_sheetname = $datum2[0].$datum2[1].$datum2[2];
// inicializacia objektu
$objPHPExcel = new PHPExcel();
//nastavenie parametrov 
$objPHPExcel->getProperties()->setCreator("eCall Slovakia");
//$objPHPExcel->setLastModifiedBy("eCall Slovakia");
//$objPHPExcel->setTitle("eCall Slovakia - report RWE AUDIT NR");
//$objPHPExcel->setSubject("eCall Slovakia - report RWE AUDIT NR");
// inicializacia "sheetu" prveho
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->setTitle('RWE audit '.$_GET['type'].' '.$datum_sheetname);
//nastavenie rowcount na = 1 / zacinam prvym riadkom;
$rowCount = 5;
//nastavenie autosize na vsetky stlpce
foreach(range('D','Q') as $columnID) {
    $objPHPExcel->getActiveSheet()->getColumnDimension($columnID)
        ->setAutoSize(true);
}
foreach(range('A','B') as $columnID) {
    $objPHPExcel->getActiveSheet()->getColumnDimension($columnID)
        ->setAutoSize(true);
}

$objPHPExcel->getActiveSheet()->getColumnDimension('C')
        ->setWidth('15');
$objPHPExcel->getActiveSheet()->getColumnDimension('K')
        ->setWidth('17')
        ->setAutoSize(false);
$objPHPExcel->getActiveSheet()->getColumnDimension('L')
        ->setWidth('10')
        ->setAutoSize(false);
$objPHPExcel->getActiveSheet()->getColumnDimension('M')
        ->setWidth('15')
        ->setAutoSize(false);
$objPHPExcel->getActiveSheet()->getColumnDimension('A')
        ->setWidth('15')
        ->setAutoSize(false);
$objPHPExcel->getActiveSheet()->SetCellValue('A1',"eCall Slovakia / RWE - audit - report zaujmov");
$objPHPExcel->getActiveSheet()->SetCellValue('A2',"Dátum : ".$datum_c2);
$objPHPExcel->getActiveSheet()->SetCellValue('A4',"IMK");
$objPHPExcel->getActiveSheet()->SetCellValue('B4',"Okres");
$objPHPExcel->getActiveSheet()->SetCellValue('C4',"Telefónne číslo");
$objPHPExcel->getActiveSheet()->SetCellValue('D4',"Meno");
$objPHPExcel->getActiveSheet()->SetCellValue('E4',"Priezvisko");
$objPHPExcel->getActiveSheet()->SetCellValue('F4',"Ulica");
$objPHPExcel->getActiveSheet()->SetCellValue('G4',"Číslo");
$objPHPExcel->getActiveSheet()->SetCellValue('H4',"Mesto");
$objPHPExcel->getActiveSheet()->SetCellValue('I4',"PSČ");
$objPHPExcel->getActiveSheet()->SetCellValue('J4',"Poschodie");
$objPHPExcel->getActiveSheet()->SetCellValue('K4',"Kontakt pre audítora");
$objPHPExcel->getActiveSheet()->SetCellValue('L4',"Volal agent - osobné číslo");
$objPHPExcel->getActiveSheet()->SetCellValue('M4',"Volal - dátum");
$objPHPExcel->getActiveSheet()->SetCellValue('N4',"Dátum stretnutia:");
$objPHPExcel->getActiveSheet()->SetCellValue('O4',"Čas stretnutia:");
$objPHPExcel->getActiveSheet()->SetCellValue('P4',"email");
$objPHPExcel->getActiveSheet()->SetCellValue('Q4',"Poznámky");
//nacitanie databaz a nasledne vytiahnutie potrebnych dat
$i=0;
while ($row = mysqli_fetch_assoc($result))
   {
    $pole[$i] = $row['tabulka'];
    $i++;
   }
$pocet = $i;
mysqli_close($mysqli);
$mysqli = new mysqli('192.168.0.20', 'mfric', 'mFRIC6389mf', 'asterisk');
if ($mysqli->connect_error) {
    die('Connect Error (' . $mysqli->connect_errno . ') '
            . $mysqli->connect_error);
}
for($j=0;$j<$pocet;$j++){
    $mysqli->set_charset("utf8"); 
    $result = mysqli_query($mysqli, "select * from ".$pole[$j]." join vicidial_list on ".$pole[$j].".lead_id=vicidial_list.lead_id where (vicidial_list.status='ZP1' or vicidial_list.status='NZX') and left(".$pole[$j].".au_datum_a_stretnutie,10)='".$datum."';");
    while ($row = mysqli_fetch_assoc($result))
   {
    $okres = str_replace("Bánska","Banská",$row['slct_okres']); 
    $objPHPExcel->getActiveSheet()->SetCellValue('A'.$rowCount,$row['slct_kraj']);
    $objPHPExcel->getActiveSheet()->SetCellValue('B'.$rowCount,$okres);
    $objPHPExcel->getActiveSheet()->SetCellValue('C'.$rowCount,$row['tel']);
    $objPHPExcel->getActiveSheet()->SetCellValue('D'.$rowCount,$row['meno']);
    $objPHPExcel->getActiveSheet()->SetCellValue('E'.$rowCount,$row['priezvisko']);
    $objPHPExcel->getActiveSheet()->SetCellValue('F'.$rowCount,$row['ulica']);
    $objPHPExcel->getActiveSheet()->SetCellValue('G'.$rowCount,$row['popisne_cislo']);
    $objPHPExcel->getActiveSheet()->SetCellValue('H'.$rowCount,$row['mesto']);
    $objPHPExcel->getActiveSheet()->SetCellValue('I'.$rowCount,$row['psc']);
    $objPHPExcel->getActiveSheet()->SetCellValue('J'.$rowCount,$row['au_poschodie']);
    $objPHPExcel->getActiveSheet()->SetCellValue('K'.$rowCount,$row['au_kontakt_kv']);
    $objPHPExcel->getActiveSheet()->SetCellValue('L'.$rowCount,$row['kod_predajcu']);
    $objPHPExcel->getActiveSheet()->SetCellValue('M'.$rowCount,$row['last_local_call_time']);
    $objPHPExcel->getActiveSheet()->SetCellValue('N'.$rowCount,$row['au_datum_a_stretnutie']);
    $objPHPExcel->getActiveSheet()->SetCellValue('O'.$rowCount,$row['au_cas_a_stretnutie']);
    $objPHPExcel->getActiveSheet()->SetCellValue('P'.$rowCount,$row['email']);
    $objPHPExcel->getActiveSheet()->SetCellValue('Q'.$rowCount,$row['poznamka_klient']);
    $rowCount++;
   }
}

// stylovanie ------------------------------------------------------------------------------------
$styleArray = array(
  'borders' => array(
    'allborders' => array(
      'style' => PHPExcel_Style_Border::BORDER_MEDIUM
    )
  )
);

$objPHPExcel->getActiveSheet()->getStyle('A4:Q4')->applyFromArray($styleArray);
unset($styleArray);


$styleArray = array(
  'borders' => array(
    'allborders' => array(
      'style' => PHPExcel_Style_Border::BORDER_DOTTED
    )
  )
);

$objPHPExcel->getActiveSheet()->getStyle('A5:Q'.($rowCount-1))->applyFromArray($styleArray);
unset($styleArray);

$styleArray = array(
  'font'  => array(
        'bold'  => false,
        'color' => array('rgb' => '000000'),
        'size'  => 11,
        'name'  => 'Calibri'
    )
);

$objPHPExcel->getActiveSheet()->getStyle('A5:Q'.($rowCount-1))->applyFromArray($styleArray);
unset($styleArray);

$styleArray = array(
  'font'  => array(
        'bold'  => true,
        'color' => array('rgb' => '000000'),
        'size'  => 11,
        'name'  => 'Calibri'
    )
);

$objPHPExcel->getActiveSheet()->getStyle('A4:Q4')->applyFromArray($styleArray);
unset($styleArray);

$styleArray = array(
  'font'  => array(
        'bold'  => true,
        'color' => array('rgb' => '000000'),
        'size'  => 16,
        'name'  => 'Arial'
    )
);

$objPHPExcel->getActiveSheet()->getStyle('A1')->applyFromArray($styleArray);
unset($styleArray);

$styleArray = array(
  'font'  => array(
        'bold'  => true,
        'color' => array('rgb' => '000000'),
        'size'  => 14,
        'name'  => 'Arial'
    )
);

$objPHPExcel->getActiveSheet()->getStyle('A2')->applyFromArray($styleArray);
unset($styleArray);

$styleArray = array(
  'borders' => array(
    'left' => array(
      'style' => PHPExcel_Style_Border::BORDER_MEDIUM
    )
  )
);

$objPHPExcel->getActiveSheet()->getStyle('A5:A'.($rowCount-1))->applyFromArray($styleArray);
unset($styleArray);

$styleArray = array(
  'borders' => array(
    'right' => array(
      'style' => PHPExcel_Style_Border::BORDER_MEDIUM
    )
  )
);

$objPHPExcel->getActiveSheet()->getStyle('Q5:Q'.($rowCount-1))->applyFromArray($styleArray);
unset($styleArray);

$styleArray = array(
  'borders' => array(
    'bottom' => array(
      'style' => PHPExcel_Style_Border::BORDER_MEDIUM
    )
  )
);

$objPHPExcel->getActiveSheet()->getStyle('A'.($rowCount-1).':Q'.($rowCount-1))->applyFromArray($styleArray);
unset($styleArray);

$objPHPExcel->getActiveSheet()->getStyle('M5:M50')
    ->getNumberFormat()
    ->setFormatCode('yyyy-mm-dd');
//-------------------------------------------------------------------------------------------------------------------------------------------   
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
$objWriter->save("rwe/report/eCall Slovakia - RWE - audit -  ".$typ." - report - zaujmy - ".$datum_sheetname.".xlsx" );
// ODOSIELANIE EMAILOM
$yourName = 'TEST';
$yourEmail_2 = 'martina.lunzerova@ecallslovakia.sk';
ini_set("include_path", "Classes/PHPMailer");
require("class.phpmailer.php");
$mail = new PHPMailer();

$mail->From     = 'rwereport@ecallslovakia.sk';
$mail->FromName = 'eCall Slovakia - RWE';
$mail->AddAddress($yourEmail_2);
$mail->AddCC('martin.fric@ecallslovakia.sk');
//$mail->AddCC('katarina.kralova@ecallslovakia.sk');
$mail->AddAttachment("rwe/report/eCall Slovakia - RWE - audit -  ".$typ." - report - zaujmy - ".$datum_sheetname.".xlsx", "eCall Slovakia - RWE - audit -  ".$typ." - report - zaujmy - ".$datum_sheetname.".xlsx");
$mail->WordWrap = 50;                              // set word wrap
$mail->IsHTML(true);  
$mail->CharSet = 'UTF-8';                             // send as HTML
$mail->Subject  =  'RWE - audit - report zaujmov - '.$typ.' '.$datume_sheetname;
$mail->Body     =  'Dobrý deň,<br/><br/>v prilohe Vám zasielame report záujmov z telemarketingovej kampane RWE<br/>-⁠ audit, ktorý je spracovávaný spoločnosťou eCall Slovakia.<br/><br/>Mesto:Nitra<br/>Na dátum:'.$datum_sheetname.'<br/></br>S pozdravom,<br/>';
//$mail->AltBody  =  'Dobrý deň,<br/><br/>v prilohe Vám zasielame report záujmov z telemarketingovej kampane RWE<br/>-⁠ audit, ktorý je spracovávaný spoločnosťou eCall Slovakia.<br/><br/>Mesto:Nitra<br/>Na dátum:'.$datum_sheetname.'<br/></br>S pozdravom,<br/>';

if ( $mail->Send()){
   ?><script>alert('Mail bol odoslany');</script><?
}

?>
</body>
</html>
更新#3



检查如何检索传递给php脚本的cli参数

出于测试目的,请将以下内容添加到脚本中:

var_dump($argc); //will print number of arguments passed 
var_dump($argv); //argument itself
然后将“日志记录”添加到cron表中

30 12 * * * /usr/bin/php -q /var/www/dev/create_report.php type=NR date=$(date +\%Y\%m\%d --date='2 days') &>/home/your_user/cron.log 
这样,输出将被写入
/home/your_user/cron.log
,您将看到作为参数传递的内容

为了实际获得值,我将运行
$argc
计数器,并分解
=
上的值以获得kvp对

list($key, $val) = explode('=', $argv[1]);
var_dump(array($key=>$val));
用于您的更新#1

您的脚本包含html和php代码。因此,当您使用
php/var/www/dev/create_report.php
调用脚本时,它将始终输出未经解释的html代码。想想看,如果你真的想这样做。将html代码输出到cli非常难看。但这是可能的。您的代码的缺点是
$\u GET
用法。如上所述,这在cli脚本中不起作用

$parameter = []; //create a array that will hold parameter
for($i=1; $i<$argc; $i++){//iterate over one parameter at a time
    list($key, $val) = explode('=', $argv[$i]);//explode parameter at =
    $parameter[$key]=$val;//make kvp pair in $parameter
}

var_dump($parameter);

现在,您可以根据需要访问cli参数。只需使用
$datum=$parameter['date']而不是
$datum=$\u GET['date']

检查如何检索传递到php脚本的cli参数

出于测试目的,请将以下内容添加到脚本中:

var_dump($argc); //will print number of arguments passed 
var_dump($argv); //argument itself
然后将“日志记录”添加到cron表中

30 12 * * * /usr/bin/php -q /var/www/dev/create_report.php type=NR date=$(date +\%Y\%m\%d --date='2 days') &>/home/your_user/cron.log 
这样,输出将被写入
/home/your_user/cron.log
,您将看到作为参数传递的内容

为了实际获得值,我将运行
$argc
计数器,并分解
=
上的值以获得kvp对

list($key, $val) = explode('=', $argv[1]);
var_dump(array($key=>$val));
用于您的更新#1

您的脚本包含html和php代码。因此,当您使用
php/var/www/dev/create_report.php
调用脚本时,它将始终输出未经解释的html代码。想想看,如果你真的想这样做。将html代码输出到cli非常难看。但这是可能的。您的代码的缺点是
$\u GET
用法。如上所述,这在cli脚本中不起作用

$parameter = []; //create a array that will hold parameter
for($i=1; $i<$argc; $i++){//iterate over one parameter at a time
    list($key, $val) = explode('=', $argv[$i]);//explode parameter at =
    $parameter[$key]=$val;//make kvp pair in $parameter
}

var_dump($parameter);

现在,您可以根据需要访问cli参数。只需使用
$datum=$parameter['date']而不是
$datum=$\u GET['date'] 

如果您的脚本打算通过Web运行,请考虑使用诸如“代码> WGET-O/DEV/null”之类的代码。http://www.example.com/create_report.php?type=NR
用于cron(而不是
php create_report.php
),并在脚本中使用php date()/time()作为输入,而不是依赖shell中的日期/时间戳。直接通过网络进行测试会容易得多


请删除您的脚本中的登录细节。

< P>如果您的脚本打算通过Web运行,请考虑使用诸如“代码> WGET-O/DEV/NULL”之类的代码。http://www.example.com/create_report.php?type=NR
用于cron(而不是
php create_report.php
),并使用php date()/time()在脚本中作为输入,而不是依赖shell中的日期/时间戳。直接通过网络进行测试会容易得多


请删除脚本中的登录详细信息。

如何检索值?您好,在使用$\u get的create_report.php中,如果您真的想进行此调试,您必须共享create_report.php文件的代码。我不明白其中的意思。我在这里找到了这个解决方案,但它就是不起作用。我是否应该将$\u GET方法更改为其他方法?如何检索值?您好,在使用$\u GET的create\u report.php中,如果您真的想进行此调试,您必须共享create\u report.php文件的代码。我不明白其中的含义。我在这里找到了这个解决方案,但它就是不起作用。我是否应该将$\u GET方法更改为其他方法?我的cron中没有contentnt。Log请同时显示新代码,因为无法访问第10行中的数组键
1
。我的错误是,for循环统计信息位于
1
而不是
0
。但是,这些错误
PHP注意:未定义索引:第24行键入/var/www/dev/create_report.PHP
仍然不清楚。我的cron中没有contentnt.log也请显示新代码,因为第10行中没有访问数组键
1
的权限,正如错误所示。我的错误是,for循环统计信息位于
1
而不是
0
。但是,这些错误
PHP注意:未定义索引:第24行的/var/www/dev/create_report.PHP仍然不清楚