【问题标题】:how to execute class functions using cron script如何使用 cron 脚本执行类函数
【发布时间】:2012-06-26 18:11:44
【问题描述】:

我被困在一个 cron 脚本中,需要你的帮助。

我的网站托管在 1and1 服务器上。我使用类函数结构在 php 中编写了一个 cron 脚本。

实际上有两个脚本。那些是: 1) 初始化.php 2)job.php

在 init.php 中,我编写了必要的类和函数。 在 job.php 脚本中,我在顶部和下方包含了 init.php,为此我编写了其他功能(数据库查询和发送电子邮件)。

如果我直接使用浏览器 (http://www.abc.com/job.php) 执行脚本,则脚本执行良好。我收到电子邮件。 但是,在使用 shell 将此脚本设置为 cron 任务后,我没有得到任何响应。我也不知道如何检查 cron 的错误日志。

php文件的示例结构如下:

init.php:

define('DB_SERVER','***********');
define('DB_USERNAME','*******');
define('DB_PASSWARD','******');
define('DB_DATABASE','*******');


class information{

   public function __construct(){
        $connection = mysql_connect(DB_SERVER,DB_USERNAME,DB_PASSWARD) or die ('connection error'.mysql_error());
        mysql_select_db(DB_DATABASE,$connection) or die('database error'.mysql_error());
   }

   public function configuration(){

        $sql = "SELECT * FROM config order by id";
        $exe = mysql_query($sql);

        $site_config = array();

        while($res = mysql_fetch_array($exe)){      
            $site_config[$res['name']]=$res['value'];
        }
        return $site_config;
    }

}

$obj = new information;

job.php:

require('init.php');

class Achdirect_cmi
{
    private $ID;
    private $AID;
    private $Key;

    public $site_config;

    public function __construct()
    {
        global $obj;

        $this->site_config = $obj->configuration();


        $this->ID           = $this->site_config['id']; 
        $this->AID           = $this->site_config['A_id'];
        $this->Key = $this->site_config['key'];     

    }
.
.
.
.

}

请帮我执行这个脚本。

**使用 SSH 访问设置 cron 作业。

下面提到的命令已用于设置 cron 脚本。

          • /usr/bin/php /a/b/htdocs/scripts/job.php

为了检查我的 shell 命令和配置是否执行,我还添加了一个测试脚本。测试脚本正确执行。**

在对功能一一分析后,发现下面的代码没有执行。变量已正确初始化,但未创建“SoapClient”对象。请注意,SoapClient 类不是我定义的,而是 php5 的核心功能。

try{

$client = new SoapClient($url, array("location" => $location));

$params = array("ticket" => $auth_array, "MerchantID" => $MerchantID, "TransactionID" => $trace_number );

$response = $client->getTransaction($params);

}
catch (Exception $e){ 

echo $e->getMessage();
}

请给我建议。

【问题讨论】:

  • 在您的 crontab 文件中添加 MAILTO=me@example.org;如果任何 cron 作业输出某些内容,这将发送一封电子邮件
  • cronjob 是如何设置的?你有 SSH 访问权限吗?还是仅基于 Web 的控制台?
  • 如果访问 URL 有效,那么这意味着问题出在 cron 脚本中,而不是在 php 文件中。你能提供脚本的详细信息吗?你想运行什么程序?根据我的经验,您可以运行 curlwget
  • 我刚才提到了上面的示例代码结构,在我的原始脚本中包含邮件。如果我使用浏览器执行脚本,我会收到电子邮件。但是在将此脚本设置为 cron 脚本后,我没有收到电子邮件。我在上面也提到了这一点。 cron 作业是使用 shell 访问和命令设置的。我还使用测试脚本进行了测试,以检查 cron 是否使用相同的 shell 配置工作。
  • 亲爱的 andreuribe,我不明白您想通过“您尝试运行什么程序”来了解什么。基本上,我的脚本将用于从其他服务器获取交易详细信息并更新我的数据库。代码是用 PHP 编写的。

标签: php class shell cron cron-task


【解决方案1】:

您的问题很可能是“require('init.php');”

cron 作业从 cron 所在的位置运行,而不是从您拥有 job.php 文件的路径运行。因此,如果要包含该文件,则应包含包含文件的完整路径。

require('/a/b/htdocs/scripts/init.php');

(如果那是正确的目录 - 似乎是一个有趣的命名结构!)

【讨论】:

  • 我已按照您的建议设置了更正的目录路径。是的,给定的目录路径不是有效的结构。我还制作了另一个文件(check.php)并将init.php和job.php的所有功能复制到check.php文件中并设置了另一个cron任务。该文件正在使用直接访问执行,但未使用 cron 任务执行。
  • 功能一一分析,发现下面的代码没有执行。变量已正确初始化,但未创建“SoapClient”对象。请注意,SoapClient 类不是我定义的,而是 php5 的核心功能。尝试{ $client = new SoapClient($url, array("location" => $location)); $params = array("ticket" => $auth_array, "MerchantID" => $MerchantID, "TransactionID" => $trace_number ); $response = $client->getTransaction($params); }catch (Exception $e){ echo $e->getMessage(); } 请给我一些需要的建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-04
  • 2019-10-30
  • 2013-02-20
相关资源
最近更新 更多