2014-02-21 45 views
0

我使用的cronjob以下方式来触发一个PHP脚本:的cronjob需要绝对路径

/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; 
} 
} 

当然,任何帮助是非常感谢! 由于提前,洛伊丝

回答

0

没关系,克朗没有完成这项工作(没有双关语意图)。

我使用这个从现在开始,它似乎做的工作只是完美:http://atrigger.com/

0

您需要包括在库

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

我建议你使用完全合格的路径的文件 - 否则,你将需要设置包括路径,让他们进入范围

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

大家好,感谢您的回复!那么我试图包括这些库,它只有当我这样做时才起作用我在我的帖子中描述 – Lois

0

使用

__DIR__  

魔术常量require_o NCE。

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

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

你好,感谢你的时间。我试过这个解决方案,但没有工作。我真的迷路了: - /很奇怪.. – Lois

+0

你试过var_dump realpath的结果吗? – enterx

+0

是的,就在现在。它的工作原理和返回我正在使用的正确的一个,这意味着:“/ home/content/aa/bbbbbb/html/library”,这是我的PHP脚本播放的地方。现在的问题是如何欺骗内部使用这些路径的SendGrid加载器:require_once(dirname(__ FILE__)。'/'。$ file。'.php');还有$ file = __dir__。 DIRECTORY_SEPARATOR。 $ CLASS_NAME; (检查我的帖子上面) – Lois