2013-07-10 3 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 или в том же каталоге, его почти наверняка не будет найдено.

Поскольку он не загружается, вы не получаете соединение с базой данных.

Поскольку все ваши базы данных и curl-код просто предполагают, что жизнь прекрасна, они не настроены на то, чтобы справиться с отсутствием соединения с DB.

Как хорошо, даже если все это другой материал был не работает нормально, нигде в коде вы настройка $username, поэтому URL вы соскабливание сайта RuneScape просто

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

так что вы хотите в любом случае соскабливать недействительные данные.

Общий совет: каждый раз вам не нужно создавать новый завиток. вы можете создать один объект curl вне цикла, а затем сбросить URL-адрес внутри цикла.

+0

ой, я думаю, это то, что происходит, когда вы пытаетесь закодировать без сна! Благодарю. Я просто не был уверен, должен ли я включать путь «Curl», как вы должны к php. если нет, то я могу заставить это работать. –

1

Я ожидаю, что проблема из-за этой линии:

include("connect.php"); 

Обратите внимание, что рабочий каталог PHP скрипт, когда он выполняется командой crond, - это корневой файл sytem: /, а не каталог wher e хранится php-скрипт.

Изменить путь к:

include(__DIR__ . '/connect.php'); 
Смежные вопросы