dedlfix: sehr komisches cronjob problem

Beitrag lesen

echo $begrueszung;

nur eine funktion wird vom cronjob anders ausgeführt als wenn ich sie von hand aufrufe.

Wie ruft der cronjob das Script auf? Ruft er mit wget (o.ä.) das Script über den Webserver auf, oder wird es über die CLI-Version von PHP aufgerufen. Da gelten u.U. unterschiedliche Konfigurationsdateien. Vielleicht sind da einige Werte unterschiedlich gesetzt.

Rufst du das, was der cronjob macht, genauso auf? Ein Aufruf über den Webbrowser ist s.o. nicht in jedem Fall das selbe.

An welcher Stelle treten denn die Fehler auf? Hast du mal alle Zwischenergebnisse untersucht, ob diese deinen Erwartungen entsprechen?

Gibt es gar keine Fehler/Warnungen/Notizen? Hast du mal mit error_reporting = E_ALL getestet?
Schickt dir (oder dem root, oder wem auch immer) der cronjob Post über Ausgaben und Meldungen?
Man kann die PHP-Meldungen in ein Log-File schreiben lassen, siehe Kapitel zu Error Reporting im Manual.

Nun noch ein paar Kommentare zum abgebildeten Teil:
Deine Quelltextformatierung lässt zu wünschen übrig. Man erkennt nicht, welche {}-Klammern zusammengehören, wie die Blöcke geschachtelt sind.

for($i=0; $i<=(count($haben_n)-1); $i++)

^                ^^
Die markierten Zeichen (= und -1) können weggelassen werden. $i darf nur maximal eins weniger als count() werden und das entspricht $i < count...

{
    if($bedarf > 0)
          {
              $haben = explode('||' , $haben_n[$i]);

Enthält $haben_n[$i] _immer_ ein '||'? Oder gibt es vielleicht Situationen die du nicht bedacht hast? Hat $haben in jedem Fall überhaupt die zwei Elemente, die du später anzusprechen versuchst?

/// Nahrungs-Multiplikatoren ////
              if(trim($haben[1])=="20") $multi=1;
              if(trim($haben[1])=="21") $multi=2;
              if(trim($haben[1])=="22") $multi=3;
              if(trim($haben[1])=="23") $multi=4;

Welchen Wert hat denn $multi, wenn keine der Bedingungen zutreffen? Am Anfang gar keinen und bei jedem Schleifendurchlauf den, den ein erfolgreiches if in einem vorherigen Durchlauf gesetzt hat. Ist das so gewollt?

if(($bedarf*1) <= ($haben[0]*$multi))

^^
Welchen Sinn hat denn das *1 ?

{
    $abzug = ($bedarf* (1/$multi);

Wenn $multi nicht initialisiert ist, wird dir hier PHP eine Division durch 0 vorwerfen.

Im restlichen Quelltext habe ich keine Fehler gesehen. Prüfe wie oben erwähnt die Zwischenergebnisse, dann sollte dir sich der Fehler offenbaren.

echo "$verabschiedung $name";