MyBB.de Forum

Normale Version: Task wird nicht richtig ausgeführt
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo mybb-forum,
Ich habe ein Problem mit selbst erstellten Tasks(/Aufgaben), erstmal zu meinem system:
MyBB 1.4.11
PHP: 5.2.6-1+lenny3
MySQL: 5.0.51

Jetzt will ich alle 10 minuten auf eine MySQL-Tabelle zugreifen, und überprüfen ob ein timestamp der dort eingetragen ist, in der vergangenheit liegt.
Wenn ja soll eine PN an mich gesendet werden.
Der code dazu funktioniert mit der einzelnen PHP super, keine fehler, der code wird normal ausgeführt so wie ich es will.
Um die PN zu senden greife ich auf eine selbst gecodete PHP zu, die nur die funktion beinhaltet um die PN zu versenden.
dazu binde ich diese PHP mit requre_once "./../../easypm.php" ein. Hier kommt schon die erste "Macke": beim direkten aufrufen der PHP die den task ausführt kommen keine fehler (die PHP ist in /inc/tasks/, die easypm.php befindet sich im rootverzeichnis.), wenn ich allerdings im A-CP den task eintrage und manuell, oder automatisch ausführen lasse, kommt eine fehlermeldung dass die datei easypm.php nicht existieren würde...
Gut, mit ein wenig rumfummeln habe ich es dann hinbekommen, dass die dateien gefunden werden (global.php konnte auch nicht eingebunden werden...), wenn ich direkt drauf zugreife UND wenn es über den aufgabenplaner geht, zumindest zeigt dieser keine fehler an.

Das problem ist jetzt aber:
bei direktem Zugriff wird alles normal ausgeführt, beim aufgabenplaner kommt keine PN....

PHP-Code:
<?php
        define
("IN_MYBB"1);
        require_once 
dirname(__FILE__)."/../../global.php";
        global 
$mybb$db$lang$cache;
        require_once 
dirname(__FILE__)."/../../easypm.php";
    
$getacc $db->simple_select("rspw""*""status='1'");
while(
$accdata $db->fetch_array($getacc)){
    
$remain $accdata['until'] - time();
    
//fehleranalyse
    
print_r($accdata);
    
print_r(time());
    
print_r($remain);
    if(
$remain 600){
$to = array(1075);
        
$name $accdata['login'];
        
$wann date('d\.m\.Y H\:i'$accdata['until']);
        
$msg "Hey, der Account {$name} (Nummer {$accdata['aid']}) muss am {$wann} abgeben werden.";
        
easypm('Account abgeben'$msg$to'1075');
    }
}
?>

Das ist das komplette script welches ausgeführt werden soll. Wie gesagt das einbinden von global.php und easypm.php ist etwas "kreativ" Big Grin

Ich bedanke mich schonmal für das lesen, und hoffe jemand kann mir helfen.
MfG
dämon
Hast du den Task im ACP korrekt eingerichtet?
Hoffe ich doch mal:
[attachment=5530]

Mit der Protokollierung habe ich auch schon etwas rumgespielt, wenn ich in der datei nach der easypm-funktion noch folgendes einfüge:
PHP-Code:
add_task_log($task'Reminder - PN Versendet'); 
und die protokollierung natürlich aktiviere, kommt folgende fehlermeldung:
Zitat:Fatal error: Call to a member function cache() on a non-object in /var/www/xxxxx/forum/global.php on line 278
wenn ich dies ausserhalb der if-schleife schreibe, kommt die fehlermeldung nicht, es wird aber auch nichts protokolliert bei manueller ausführung, PNs kommen in keinem fall an.

Bei dem task den ich über nacht habe laufen lassen, habe ich aber grad folgendes im log gefunden:
Warning - [2] 'Cannot modify header information - headers already sent by (output started at /var/www/xxxxxx/forum/task.php:59)' - Line: 1548 - File: inc/functions.php

MfG
dämon
/edit: sorry, hatte nur das thumb verlinkt...
Kannst du vielleicht ein lesbares Bild hochladen? Wink (Regel 5 beachten: https://www.mybb.de/forum/thread-171.html)
Auch wäre deine Task-Datei sehr hilfreich.
Sorry, habe den post korrigiert Wink
der task wird übrigens auch nicht ausgeführt wenn ich die if-schleife einfach weglasse...

Wenn mit task-datei die auszuführende datei gemeint ist - die ist komplett in post#1

MfG
Hast du mal die anderen Task-Dateien angesehen? Die müssen ein bestimmtes Format haben...
auch wenn ich das ganze einfach in eine funktion packe bleibt der fehler im log:
Zitat:Warning - [2] 'Cannot modify header information - headers already sent by (output started at /var/www/xxx/forum/task.php:59)' - Line: 1548 - File: inc/functions.php

ich hab mich schlau gemacht und der fehler kommt wohl von meiner test-fehlerausgabe, aber wenn ich den task manuell ausführe kommt zwar kein fehler, doch die aufgabe wird auch nicht richtig ausgeführt...
Du darfst die global.php nicht noch einmal einbinden, das ist ja schon geschehen.
In der Task-Datei muss genau eine Funktion namens task_<dateiname>, die den auszuführenden Code enthält.

Wenn die Task-Datei also mytask.php heißt, muss diese so aussehen:
PHP-Code:
<?php

function task_mytask($task) {
  
// Hier der auszuführende Code
}

?>

Wichtig: Keine Echos oder sonstige Ausgaben wie print_r(), kein erneutes Einbinden der global.php (wie Stefan schon amerkte).
(Innerhalb der Funktion sollte dann auch das add_task_log() von oben funktionieren, da du ja das $task mitgegeben bekommst.)
danke, war wohl das einbinden der global.php und der name der funktion Wink
komisch, denn ich hatte mir schon vorher mal tasks gemacht um bei allen usern den invisible-modus wieder zu deaktivieren, ganz ohne funktion, da war der code:
PHP-Code:
<?php
// NoMad 4 oXygen-warez

global $mybb$db$lang$cache;

$db->query("UPDATE `oxygen_forum`.`mybb_oxygen_users` SET `invisible` = '0' WHERE 1");
$db->query("UPDATE `oxygen_forum`.`mybb_oxygen_users` SET `invisible` = '1' WHERE `mybb_oxygen_users`.`uid` =5549 LIMIT 1");

add_task_log($task'Invisible-Modus bei allen Usern deaktiviert');
?>

und das ging manuell immer einwandfrei Big Grin
naja, jetzt löppt alles, danke für den support Wink
MfG
dämon
Seiten: 1 2