2013-07-10 76 views
0

我试图运行一些PHP内卷曲它每隔一段时间,以便它将检索信息从网站,然后将其插入到我的数据库。我能够让cronjob工作,而php的工作原理是,每当它运行时,它都会向我发送一封电子邮件,而且它确实如此。然而,没有工作的是CURL脚本和/或MySQL脚本。Crontab Linux与PHP,MySQL和Curl

的cronjob:

* * * * * /usr/bin/php -q /var/www/rstracker/cronjobs.php 

cronjobs.php:

<?php 
$to  = ''; 
$subject = 'RSTracker Cronjob Ran!'; 
$message = 'Successful cronjob!'; 
$headers = 'From: ' . "\r\n" . 
    'Reply-To: ' . "\r\n" . 
    'X-Mailer: PHP/' . phpversion(); 

mail($to, $subject, $message, $headers); 
?> 

<?php 
include("connect.php"); 

$query = mysql_query("SELECT id FROM users"); 
while($row = mysql_fetch_array($query)) 
{ 

    $userID = $row['id']; 
    $date = mktime(); 

    // create a new cURL resource 
    $ch = curl_init(); 

    // set URL options 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"); 
    curl_setopt($ch, CURLOPT_URL, "http://services.runescape.com/m=hiscore_oldschool/index_lite.ws?player=".$username); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 

    // grab HTML 
    $data = curl_exec($ch); 

    // close cURL resource, and free up system resources 
    curl_close($ch); 

    //echo "<textarea>$data</textarea><br />"; 


    $hs = explode("\n",$data); 
    $skills = array("Overall","Attack","Defence","Strength","Constitution","Ranged","Prayer","Magic","Cooking","Woodcutting","Fletching","Fishing","Firemaking","Crafting","Smithing","Mining","Herblore","Agility","Thieving","Slayer","Farming","Runecrafting","Hunter","Construction"); 
    $i = 0; 
    for($i = 0; $i<count($skills);$i++) { 
    // Explode each skill into 3 values - rank, level, exp 
    $stat = explode(',', $hs[$i]); 
    $out[$skills[$i]] = Array(); 
    $out[$skills[$i]]['rank'] = $stat[0]; 
    $out[$skills[$i]]['level'] = $stat[1]; 
    $out[$skills[$i]]['xp'] = $stat[2]; 
    } 




    foreach($out as $key => $value) 
    { 
     if($value['level']>0||$value['xp']>0||$value['rank']>0) 
     { 
      mysql_query("INSERT INTO skills SET userID='$userID', skill='$key', level='".$value["level"]."', xp='".$value["xp"]."', rank='".$value["rank"]."', date='$date'"); 
     } 
    } 

} 


?> 
+0

您是否尝试过在cron作业之外运行脚本?它会抛出任何错误吗? –

回答

1

最有可能connect.php是不是在正确的目录。当作为CRON作业运行时,php脚本的“工作目录”是其所运行的帐户的主目录。除非“connect.php”在include_path的某个地方,或者在同一个目录中,否则几乎肯定不会被找到。

由于没有加载,所以没有连接到数据库。

由于所有的数据库和卷曲代码都只是假设生活是完美的,所以它们没有设置为处理没有数据库连接的失败。

而且,即使这一切其他的东西是好的工作,无处在你的代码你要为$username,所以你刮去在RuneScape站点的URL仅仅是

http://services.runescape.com/m=hiscore_oldschool/index_lite.ws?player= 

所以你无论如何都要刮掉无效的数据。

一般提示:您不需要每次都创建一个新的卷曲对象。您可以在循环外创建一个卷曲对象,然后重置循环内的URL。

+0

噢我的,嗯,我想这就是当你尝试编码没有睡觉时会发生什么!谢谢。 我只是不确定是否必须包含“Curl”的路径,就像你必须使用php。如果没有,那么我可以得到这个工作。 –

1

我想到的问题是,因为这行:

include("connect.php"); 

注意的是,PHP的工作目录当它被crond执行时,脚本是文件系统根目录:/而不是目录e php脚本被存储。

更改路径:

include(__DIR__ . '/connect.php');