CronJob需要绝对路径

时间:2014-02-21 22:36:30

标签: php path cron require jobs

我正在使用CronJob以下方式触发php脚本:

/web/cgi-bin/php5 $HOME/html/library/myScript.php auth_key=xxxxxxx

但是我遇到了需要的问题,我已经尝试了在stackO上找到的所有内容。 它似乎无法加载SendGrid自动加载器

//myScript.php
#!/web/cgi-bin/php5
<?php
include('../config.php'); // this works well for some reason...

if(isset($_GET['auth_key']) && $_GET['auth_key'] == "xxxxxxx")
{
    // send email
    include('home/content/aa/bbbbbb/html/scripts/sendgrid/lib/SendGrid.php'); // this works only this way
    include('home/content/aa/bbbbbb/html/scripts/unirest/lib/Unirest.php'); // this too

    SendGrid::register_autoloader(); // fails here!
}
?>

这也不起作用:

set_include_path('/home/content/aa/bbbbbb/html/');
require 'scripts/sendgrid/lib/SendGrid.php';
require 'scripts/unirest/lib/Unirest.php';

这两件事都没有:

chdir(dirname(__FILE__));

SendGrid.php是folowwin,我认为问题在于某处,因为这也需要调用!

//SendGrid.php
<?php
class SendGrid {
const VERSION = "1.1.5";

protected $namespace = "SendGrid",
        $username,
        $password,
        $web,
        $smtp;

public function __construct($username, $password) {
    $this->username = $username;
    $this->password = $password;
}

public static function register_autoloader() {
    spl_autoload_register(array('SendGrid', 'autoloader'));
}

public static function autoloader($class) {
// Check that the class starts with "SendGrid"
if ($class == 'SendGrid' || stripos($class, 'SendGrid\\') === 0) {
    $file = str_replace('\\', '/', $class);

    if (file_exists(dirname(__FILE__) . '/' . $file . '.php')) {
    require_once(dirname(__FILE__) . '/' . $file . '.php');
    }
}
}

public function __get($api) {
$name = $api;

if($this->$name != null) {
  return $this->$name;
}

$api = $this->namespace . "\\" . ucwords($api);
$class_name = str_replace('\\', '/', "$api.php");
$file = __dir__ . DIRECTORY_SEPARATOR . $class_name;

if (!file_exists($file)) {
  throw new Exception("Api '$class_name' not found.");
}
require_once $file;

$this->$name = new $api($this->username, $this->password);
return $this->$name;
}
}

当然,非常感谢任何帮助! 在此先感谢,Lois

3 个答案:

答案 0 :(得分:0)

您需要包含libs

require 'scripts/sendgrid/lib/SendGrid.php';
require 'scripts/unirest/lib/Unirest.php';

我建议您使用文件的完全限定路径 - 否则您需要设置包含路径以使其进入范围

set_include_path('path/to/scripts/directory');

答案 1 :(得分:0)

使用

__DIR__     
带有require_once的

魔术常量。

文件的目录。如果在include中使用,则返回包含文件的目录。这相当于dirname( FILE )。除非它是根目录,否则此目录名称没有尾部斜杠。 (在PHP 5.3.0中添加。)

require_once(realpath(__DIR__ . "/../config.php"));

答案 2 :(得分:0)

没关系,Cron没有完成这项工作(没有双关语)。

我从现在开始使用它,似乎完美地完成了这项工作:http://atrigger.com/