Ergebnis 1 bis 10 von 10

Thema: Benutzerdefinierte Cronjob-Klasse hat keinen Zugriff auf globale Variable

  1. #1
    Contao-Nutzer
    Registriert seit
    12.08.2015.
    Beiträge
    89

    Standard Benutzerdefinierte Cronjob-Klasse hat keinen Zugriff auf globale Variable

    Hallo Leute,

    bis vor kurzem habe ich gemerkt, dass meine selbstgemachte CronJob-Klasse keinen Zugriff auf globale Variablen wie $GLOBALS['TL_LANG'] oder Systemklassen wie "\Environment" hat.
    Alles andere funktioniert einwandfrei!

    Vielleicht hilft euch das:
    Mein Script ist durch ...
    PHP-Code:
    if(PHP_SAPI!=='cli') { exit; } 
    von außen geschützt, aber wenn ich die Zeile rausnehme und den Cronjob im Browser aufrufe, habe ich wieder Zugriff auf die Variablen.

    Hinweis:
    ich habe das initialize.php-Script wie beim originalen Cron-Script mit included.
    PHP-Code:
    define('TL_SCRIPT''system/cron/cronjobs.php');

    define('TL_MODE''FE');
    require 
    dirname(__DIR__) . '/initialize.php'
    Wisst ihr was das Problem sein kann?

    Danke & Grüße

  2. #2
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.283
    Partner-ID
    10107

    Standard

    PHP-Code:
    require dirname(__DIR__) . '/initialize.php'
    Ist nur dann richtig, wenn sich deine Datei im Ordner /system/cron befindet: http://php.net/manual/en/function.dirname.php
    Given a string containing the path of a file or directory, this function will return the parent directory's path that is levels up from the current directory.
    In __DIR__ steht …/system/cron drin, daher gibt
    PHP-Code:
    dirname(__DIR__
    den Pfad
    Code:
    …/system
    zurück.

  3. #3
    Contao-Nutzer
    Registriert seit
    12.08.2015.
    Beiträge
    89

    Standard

    Meine Datei befindet sich auch im welben Ordner wie die Cron.php von Contao.
    Also kann es daran nicht liegen.
    Geändert von joeker (04.10.2016 um 12:33 Uhr)

  4. #4
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.283
    Partner-ID
    10107

    Standard

    Wie rufst du den Cron auf?

  5. #5
    Contao-Nutzer
    Registriert seit
    12.08.2015.
    Beiträge
    89

    Standard

    Das System ruft es mit dem PHP-Befehl auf.

  6. #6
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.283
    Partner-ID
    10107

    Standard

    Zitat Zitat von joeker Beitrag anzeigen
    Das System ruft es mit dem PHP-Befehl auf.
    Das beantwortet meine Frage nur unzureichend . Wie genau lässt du das PHP Script ausführen?

  7. #7
    Contao-Nutzer
    Registriert seit
    12.08.2015.
    Beiträge
    89

    Standard

    Ich weiß nicht genau, was du meinst, aber die Zeile, die es aufruft sieht folgendermaßen aus:
    PHP-Code:
    */* * * * php /var/www/websitetest/system/cron/cronjobs.php 1> /dev/null 2> /var/log/apache2/websitetest/cronjobs.err 

  8. #8
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.283
    Partner-ID
    10107

    Standard

    Und was steht alles in cronjobs.err drin?

  9. #9
    Contao-Nutzer
    Registriert seit
    12.08.2015.
    Beiträge
    89

    Standard

    Nichts, die Datei ist leer.

    Ich hab gerade etwas recherchiert und festgestellt, dass globale Variablen von PHP nur eingeschränkt im CLI-Mode unterstützt werden - vl liegt es daran.
    Geändert von joeker (04.10.2016 um 13:46 Uhr)

  10. #10
    Contao-Nutzer
    Registriert seit
    12.08.2015.
    Beiträge
    89

    Standard

    Ja gut, da ich keine andere Lösung gefunden habe, blieb mir nichts anderes übrig, als eine Alternative mir auszudenken:

    Hiermit kann ich zumindset auf meine Sprachdatei zugreifen:
    PHP-Code:
    \System::loadLanguageFile('tl_blabla''de'); 
    Und mit einer einfachen globalen Variable die URL definiert (da ja Environment::get('url) nicht funktionierte):
    PHP-Code:
    $objTemplate->url $GLOBALS['meine_seite']['url'] . '/'
    Eine andere Lösung ist leider nicht möglich.

    Trotz allem danke ich dir Spooky für deine engagierte Hilfe


    Viele Grüße

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •