Hostgator cron作业不使用此脚本

时间:2014-11-26 20:33:16

标签: php wordpress cron

所以我一直在尝试在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');

}


?>

1 个答案:

答案 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,并且可以拥有一个与您的系统完美集成的酷炫插件。