所以我一直在尝试在Hostgator上使用Cron作业管理器,我选择了php文件,它应该在sheduled时执行。如果我想手动运行脚本,那么我会写http://thesitename.com/myfile.php并执行,在这种情况下,我将PDF发送到电子邮件。请检查我的代码,看看我做错了什么:
<?php
define('WP_USE_THEMES', true);
require( dirname( __FILE__ ) . '/wp-blog-header.php' );
set_time_limit(0);
ignore_user_abort(1);
$args = array(
'post_type' => 'inversion',
'orderby' => 'meta_value_num',
'meta_key' => 'numero_de_ordenamiento',
'order' => 'ASC',
'meta_query' => array(
array(
'key' => 'inversionista'
)
)
);
$the_query = new WP_Query( $args );
$current_posts = $the_query->get_posts();
print_r($current_posts);
foreach ($current_posts as $post)
{
$post_id = $post->ID;
$inversion = get_post($post_id);
$eluser = get_field('inversionista',$post_id);
$numconf=get_field('numero_de_cliente', 'user_'.$eluser['ID']);
$numord = get_field('numero_de_ordenamiento',$post_id);
ob_start(); ?>
<section class="wrap">
<img src="<?php bloginfo('template_directory');?>/images/CherryV.jpg" width="20%" alt="Site Logo">
<img style="float:right;" src="<?php bloginfo('template_directory');?>/images/info.jpg" width="45%" alt="Site Logo">
</section>
<br>
<a href="<?php echo wp_logout_url(); ?>">Logout</a>
<br>
<h3 style="color:red;"><u>Estado de movimientos <?php $month = date(m);
if($month==1)
{
$elmes = "Enero";
}elseif($month==2){
$elmes = "Febrero";
}elseif($month==3){
$elmes = "Marzo";
}elseif($month==4){
$elmes = "Abril";
}elseif($month==5){
$elmes = "Mayo";
}elseif($month==6){
$elmes = "Junio";
}elseif($month==7){
$elmes = "Julio";
}elseif($month==8){
$elmes = "Agosto";
}elseif($month==9){
$elmes = "Septiembre";
}elseif($month==10){
$elmes = "Octubre";
}elseif($month==11){
$elmes = "Noviembre";
}elseif($month==12){
$elmes = "Diciembre";
}
echo $elmes;
echo " ";
echo date(Y); ?></u></h3>
<h3>Cliente confidencial: <?php echo $numconf; ?> </h3>
<h3>Movimientos correspondientes al periodo: 1 al 31 de <?php echo $elmes ." ".date(Y); ?></h3>
<br>
<div id="customers">
<table class="tabla" autosize="1" cellpadding="0" cellspacing="0" width="100%" border="1">
<thead>
<tr>
<td>
<h3 class="table2" >Periodo de Inversión</h3>
</td>
<td>
<h3 class="table2">Saldo Inicial</h3>
</td>
<td>
<h3 class="table2" >Inversión en el Periodo</h3>
</td>
<td>
<h3 class="table2" >Interés Causado en el Periodo</h3>
</td>
<td>
<h3 class="table2" >Intereses Pagados</h3>
</td>
<td>
<h3 class="table2" >Intereses Reinvertidos</h3>
</td>
<td>
<h3 class="table2" >Saldo Final</h3>
</td>
</tr>
</thead>
<tbody>
<?php
$igalf = 0;
if( have_rows('datos_especificos') ):
?>
<?php
$highest = 0;
$arraycount=0;
$thearrayking = array();
$arrayinsert = array();
while ( have_rows('datos_especificos') ) : the_row();
$icelpx = get_sub_field('interes_causado_en_el_periodo',$post_id);
$cpx = get_sub_field('cantidad_pagada',$post_id);
$crx = get_sub_field('cantidad_reinvertida',$post_id);
$sal1x = get_sub_field('saldo',$post_id);
$ipx = get_sub_field('inversion_en_el_periodo',$post_id);
$sal2x = get_sub_field('saldo_final',$post_id);
$fech = get_sub_field('fecha',$post_id);
$fecharray0 = substr($fech,0,4);
$fecharray1 = substr($fech,4,2);
$fecharray = $fecharray1."/".$fecharray0;
$sal1 = get_sub_field('saldo',$post_id);
$ielp = get_sub_field('inversion_en_el_periodo',$post_id);
$icelp = get_sub_field('interes_causado_en_el_periodo',$post_id);
$cp = get_sub_field('cantidad_pagada',$post_id);
$elsf2 = get_sub_field('saldo_final',$post_id);
$cr = get_sub_field('cantidad_reinvertida',$post_id);
$crt = $crt+$cr;
$sal2 = get_sub_field('saldo_final',$post_id);
$igalf = $igalf+$icelp;
$fech2 = $fech+100;
$ID= $the_query->ID;
if($highest<$elsf2)
{
$highest = $elsf2;
}
$arrayinsert = array($fecharray, $elsf2);
array_push($thearrayking, $arrayinsert);
$arraycount = $arraycount+1;
$fechstring="$fech";
$part1=substr("$fechstring", 0, 4);
$part2=substr("$fechstring", 4, 2);
$part3=substr("$fechstring", 6,2);
//$date = DateTime::createFromFormat('Ymd', $retrieved); ?>
<tr>
<td>
<p class="table" style="text-align:center;"> <?php echo $part3."/".$part2."/".$part1; ?> </p>
</td>
<td>
<p class="table" style="text-align:center;"> <?php echo "$ ".number_format($sal1,2); ?> </p>
</td>
<td>
<p class="table" style="text-align:center;"> <?php echo "$ ".number_format($ielp,2); ?> </p>
</td>
<td>
<p class="table" style="text-align:center;"> <?php echo "$ ".number_format($icelp,2); ?> </p>
</td>
<td>
<p class="table" style="text-align:center;"> <?php echo "$ ".number_format($cp,2); ?> </p>
</td>
<td>
<p class="table" style="text-align:center;"> <?php echo "$ ".number_format($crx,2); ?> </p>
</td>
<td>
<p class="table" style="text-align:center;"> <?php echo "$ ".number_format($sal2x,2); ?> </p>
</td>
</tr>
<?php
endwhile;
else :
// no rows found
endif;
?>
</tbody>
</table>
</div>
<br>
<br>
<h1>Resumen de Inversión</h1>
<br>
<table autosize="5">
<?php
$fech7 = $fech + 100;
$ptest = substr($fech7,4,2);
if($ptest==12)
{
$fech7=$fech7-1200+10000;
}
$fechstringxx = $fech7;
$part1x=substr("$fechstringxx", 0, 4);
$part2x=substr("$fechstringxx", 4, 2);
$part3x=substr("$fechstringxx", 6, 2);
// $date2 = DateTime::createFromFormat('Ymd', $retrieved2); ?>
<tr>
<td>
<h3 class="table2" style="text-align:center;"> Saldo Inicial <?php echo $part3."/".$part2."/".$part1; ?> </h3>
</td>
<td>
<p class="table" style="text-align:center;"> <?php echo "$ ".number_format( $sal1,2); ?> </p>
</td>
</tr>
<tr>
<td>
<h3 class="table2" style="text-align:center;"> Nuevas Inversiones </h3>
</td>
<td>
<p class="table" style="text-align:center;"> <?php echo "$ ".number_format( $ielp,2); ?> </p>
</td>
</tr>
<tr>
<td>
<h3 class="table2" style="text-align:center;"> Intereses Pagados </h3>
</td>
<td>
<p class="table" style="text-align:center;"> <?php echo "$ ".number_format( $cp,2); ?> </p>
</td>
</tr>
<tr>
<td>
<h3 class="table2" style="text-align:center;"> Intereses Reinvertidos </h3>
</td>
<td>
<p class="table" style="text-align:center;"> <?php echo "$ ".number_format( $crx,2); ?> </p>
</td>
</tr>
<tr>
<td>
<h3 class="table2" style="text-align:center;"> Total Intereses Generados a la fecha</h3>
</td>
<td>
<p class="table" style="text-align:center;"> <?php echo "$ ".number_format( $igalf,2); ?> </p>
</td>
</tr>
<tr>
<td>
<h3 class="table2" style="text-align:center;"> Saldo Final <?php echo $part3x."/".$part2x."/".$part1x; ?> </h3>
</td>
<td>
<p class="table" style="text-align:center;"> <?php echo "$ ".number_format( $sal2,2); ?> </p>
</td>
</tr>
</table>
<?php $tableVar = ob_get_contents();
$numord2 = str_replace(".","-",$numord);
$correo = $current_user->user_email;
// echo $correo;
$mpdf = new mPDF('c');
$stylesheet = file_get_contents(get_template_directory_uri() . '/table.css');
$mpdf->WriteHTML($stylesheet,1);
$mpdf->WriteHTML($tableVar,2);
$mpdf->Output('test24.pdf','F');
$content = $mpdf->Output('', 'S');
$content = chunk_split(base64_encode($content));
$mailto = $correo; //Mailto here
$from_name = 'Cherry'; //Name of sender mail
$from_mail = '9@gmail.com'; //Mailfrom here
$subject = 'Reporte De Inversion'.$numord;
$message = 'Hola te mando tu reporte de inversion';
$filename = "Reporte-De-Inversiones-".date("m-Y",time())." ".$numord2; //Your Filename whit local date and time
//Headers of PDF and e-mail
$boundary = "XYZ-" . date("dmYis") . "-ZYX";
$header = "--$boundary\r\n";
$header .= "Content-Transfer-Encoding: 8bits\r\n";
$header .= "Content-Type: text/html; charset=ISO-8859-1\r\n\r\n"; //plain
$header .= "$message\r\n";
$header .= "--$boundary\r\n";
$header .= "Content-Type: application/pdf; name=\"".$filename."\"\r\n";
$header .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n";
$header .= "Content-Transfer-Encoding: base64\r\n\r\n";
$header .= "$content\r\n";
$header .= "--$boundary--\r\n";
$header2 = "MIME-Version: 1.0\r\n";
$header2 .= "From: ".$from_name." \r\n";
$header2 .= "Return-Path: $from_mail\r\n";
$header2 .= "Content-type: multipart/mixed; boundary=\"$boundary\"\r\n";
$header2 .= "$boundary\r\n";
$bob = "bobsemail@email.com";
//$sended = mail($mailto,$subject,$header,$header2, "-r".$from_mail);
$sended2 = mail($bob,$subject,$header,$header2, "-r".$from_mail);
//echo($sended);
echo($sended2);
$mpdf->Output($filename ,'F');
}
?>
答案 0 :(得分:0)
在所有情况下:Hostgator不允许Crons以不到15分钟的差异运行,您可以阅读该信息here。如果是这种情况,你的问题就解决了。
现在有两种方法可以解决您的问题:
<强> 1。修复cron并运行脚本(错误或至少,错误的方式,我将在下面解释):
您需要提供对文件的读写访问权限,以便系统可以运行它。尝试777进行调试。 如果它不起作用,请使用cron指令编辑OP,以便我们进行调试。
它应该类似于下面的示例,Hostgator会为您提供有关它应该如何显示的信息here:
/opt/php55/bin/php /home/username/public_html/cron.php
Hostgator提供有关Crons here的信息,关于cURL here以及有人在论坛here抱怨同样的事情。
/ home /文件夹中的某个地方应该是一个名为cron.errors.log的文件,您可以找到相关信息。
我非常确定您的问题与包含路径有关。
我说这是不正确的方式,因为您正在使用Wordpress,在这种情况下,您应该使用本机WP核心功能,以使您的脚本工作,特别是通过执行插件并使用wp_schedule_event()
<强> 2。正确的方法 - 插件+ wp_schedule_event();
将您的脚本转换为插件。这样就不需要包含wp-blog-header.php来访问这些功能,而且事情将更加集成。
这里有关于如何插件的quick tutorial,您可以在Wordpress page中访问有关wp_schedule_event的相关信息。
基本上,应该看起来像这样:
register_activation_hook( __FILE__, 'prefix_activation' );
/**
* On activation, set a time, frequency and name of an action hook to be scheduled.
*/
function prefix_activation() {
wp_schedule_event( time(), 'hourly', 'prefix_hourly_event_hook' );
}
add_action( 'prefix_hourly_event_hook', 'prefix_do_this_hourly' );
/**
* On the scheduled action hook, run the function.
*/
function prefix_do_this_hourly() {
// do something every hour
}
但是有一个问题:只有在网站有访问者时才会运行预定活动。它不是最好的行为,而是我们现有的行为。
通过这种方式,您可以免除Hostgator,并且可以拥有一个与您的系统完美集成的酷炫插件。