【问题标题】:Hostgator cron job not working with this scriptHostgator cron 作业无法使用此脚本
【发布时间】:2014-11-28 02:33:59
【问题描述】:

所以我一直在尝试使用 Hostgator 的 Cron 作业管理器,我选择了 php 文件,它应该在调度时执行。如果我想手动运行脚本,那么我会写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');

}


?>

【问题讨论】:

  • 只是想提醒一下这个脚本可以工作(当转到 mynameamesite.com/myfile.php 时),但在设置 cronjob 时它不工作

标签: php wordpress cron


【解决方案1】:

首先:Hostgator 不允许 Cron 运行时差小于 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。正确的做法 - Plugin + 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 并且可以拥有一个与您的系统完美集成的酷插件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-07
    • 1970-01-01
    • 1970-01-01
    • 2013-03-23
    • 2011-01-03
    • 1970-01-01
    相关资源
    最近更新 更多