duan89197 2014-11-26 20:33
浏览 58
已采纳

Hostgator cron作业不使用此脚本

So I've been trying to use the Cron Job Manager at Hostgator, I select the php file and it should execute when sheduled. If i want to run the script manually, then I'd write http://thesitename.com/myfile.php and would execute, in this case, I'm sending PDFs to an email. Please check my code and see if I'm doing something wrong:

<?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
"; 
        $header .= "Content-Transfer-Encoding: 8bits
"; 
        $header .= "Content-Type: text/html; charset=ISO-8859-1

"; //plain 
        $header .= "$message
";
        $header .= "--$boundary
";
        $header .= "Content-Type: application/pdf; name=\"".$filename."\"
";
        $header .= "Content-Disposition: attachment; filename=\"".$filename."\"
";
        $header .= "Content-Transfer-Encoding: base64

";
        $header .= "$content
"; 
        $header .= "--$boundary--
";

        $header2 = "MIME-Version: 1.0
";
        $header2 .= "From: ".$from_name." 
"; 
        $header2 .= "Return-Path: $from_mail
";
        $header2 .= "Content-type: multipart/mixed; boundary=\"$boundary\"
";
        $header2 .= "$boundary
";


        $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条回答 默认 最新

  • douyakan8924 2014-11-27 18:33
    关注

    Before all: Hostgator doesn't allow Crons running with a difference of under 15 minutes, you can read that information here. If that is your case, your problem is solved.

    Now there are two ways of solving your problem:

    1. Fix the cron and run the script (the wrong or at least, the incorrect way, I'll explain below):

    You need to give read and write access to the file so the system can run it. Try 777 for debugging. If it's not working, please edit the OP with the cron instruction so we can debug it.

    It should look something like the example below, Hostgator give you information on how it should look here:

    /opt/php55/bin/php /home/username/public_html/cron.php
    

    Hostgator provides information about Crons here, about cURL here and there's someone complaining about the same thing in their forums here.

    Somewhere in your /home/ folder should be a file called cron.errors.log, you can find there relevant information, for sure.

    I'm pretty sure your problem is related with the include path.

    I say this is the incorrect way because you're using Wordpress and in that case you should use native WP core function in order to make your script work, particularly by doing a plugin and using wp_schedule_event()

    2. The correct way to do it - Plugin + wp_schedule_event();

    Transform your script into a plugin. This way there's no need to include the wp-blog-header.php to access the functions and things will work much more integrated.

    Here's a quick tutorial on how to do a plugin and you can access information about wp_schedule_event in the Wordpress page about it.

    Basically, should look something like this:

    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
    }
    

    But there's a catch: the scheduled event only runs if the site has visitors. It's not the best behavior but is what we have available.

    This way you'll be free of Hostgator and can have a cool plugin that is perfectly integrated with your system.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大