MyBB.de Forum

Normale Version: Task funktioniert nur manuell
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Community,
ich habe eine Task geschrieben,
die bei Ausführen durch den Button
"Diese Aufgabe jetzt ausführen" ohne Probleme funktioniert.

Wenn allerdings das Skript durch die Zeitplanung ausgeführt wird,
wird zwar im Task-Log vermerkt, dass die Task ausgeführt wurde
aber die Arbeit der Task wurde nicht ausgeführt.
Wie kann das sein!?!?

Hier mal der Code der Task:
PHP-Code:
<?php
function task_autoGelberDaumen($task) {
global 
$db$mybb;
require_once(
"/usr/www/users/xinvvnix/forum/inc/datahandlers/post.php");

//Konfiguration:
$progfid1=array(11); //FID Programmüberforum 7 Tage
$progfid2=array(10,13); //FID Programmüberforum 14 Tage

$checktime=7//Zeit in Tagen, ab wann gepostet wird, dass kein Update vorhanden ist.
$postmessage="[iconge]";

//Funktionen:
function sendPost($message,$forumid,$threadid,$db){
$posthandler = new PostDataHandler("insert");
$userarray=get_user($uid);
$new_post = array(
"tid" => $threadid//1468
"fid" => $forumid//134
"subject" => "",
"icon" => 36,
"uid" => 1,
"username" => "Nummer1",
"dateline" => TIME_NOW,
"message" => $message,
"ipaddress" => ""
);
$new_post['options']=array(
"signature" => 1,
"subscriptionmethod" => 0,
"disablesmilies" => 0
);
$posthandler->set_data($new_post);
$valid_post $posthandler->validate_post();
$posthandler->insert_post();
}

function 
zwischenstring ($start$ende$string) {
 return reset (explode ($endeend (explode ($start$string))));
}


//Get all threads with link to azthread
$progthreadids=array(); $firstposts=array(); $forumsids=array();
$querytext="SELECT DISTINCT pid,tid,fid,message FROM mybb_posts WHERE message like '%\[azb=%\]%'  
AND pid IN (SELECT firstpost FROM mybb_threads WHERE icon=29 AND fid IN ("
.implode(","$progfid1).",".implode(",",$progfid2)."))";


$query $db->query($querytext);
while(
$result $db->fetch_array($query)){
//Zeit in datetime Format umrechnen
$checktimen=TIME_NOW - ($checktime 24 60 60);

//auf String für auszahlungsthread prüfen
$temptid=zwischenstring("[azb=","]",$result['message']);

//checken ob 7 oder 14 Tage
if(in_array($result['fid'],$progfid2)) $checktimen=TIME_NOW - ($checktime 24 60 60);

$query2 $db->simple_select("threads""tid""lastpost<$checktimen AND tid=$temptid", array("order_dir" => 'DESC',"limit" => 1));

if(
$db->num_rows($query2)>&& is_numeric ($temptid)) {

$progthreadids[]=(int)$result['tid']; 
$firstposts[]=(int)$result['pid'];
$forumsids[]=(int)$result['fid'];
}
}
for(
$i=0;$i<count($progthreadids);$i++){
$db->update_query("threads",array('icon'=>36),"tid=$progthreadids[$i]");
$db->update_query("posts",array('icon'=>36),"pid=$firstposts[$i]");
sendPost($postmessage,$forumsids[$i],$progthreadids[$i],$db);

/*
echo $progthreadids[$i];
echo "  -  ";
echo $firstposts[$i];
echo "<br>";
*/
}

add_task_log($task"Auf zu alte Zahlungen gecheckt und gelbe Daumen verteilt.");
}
?>
Es würde sich anbieten an den kritischen Bereichen Logging zu nutzen. Der Fall, dass $posthandler->validate_post() false zurück gibt, wird beispielsweise einfach ignoriert.
Aber sollte nicht trotzdem das Icon durch die beiden unteren Querys angepasst werden, egal was der Posthandler zurück gibt?
Beim ersten Durchlauf der Schleife schon noch, aber insert_post() wird im Fehlerfall die() aufrufen.

Die Ergebnisse der Queries kannst du ja auch mal loggen und schauen, ob diese plausibel sind.