Contao-Camp 2024
Ergebnis 1 bis 15 von 15

Thema: Bilder per PHP-Script in files/ kopieren funktionert nicht als cronjob

  1. #1
    Contao-Nutzer
    Registriert seit
    11.04.2018.
    Beiträge
    5

    Standard Bilder per PHP-Script in files/ kopieren funktionert nicht als cronjob

    Hallo zusammen!

    Eines vorweg: Mit Contao arbeite ich noch nicht allzu lange, daher könnte es bei dem Problem, das ich habe, eventuell um etwas völlig Simples handeln. Doch da ich bisher nichts Erhellendes finden konnte, versuche ich es auf diesem Wege.

    Folgende Situation:
    - Auf dem Server gibt es einen "echten" Cronjob - eine PHP-Datei, die ein Verzeichnis auf eingegangene Text-Dateien prüft, und diese gegebenenfalls abarbeitet (deren Inhalte in die Datenbank schreibt).
    - Passend zu den eingelesenen Daten sollen dazugehörige Bilder von einer anderen Website in das eigene Bilder-Verzeichnis kopiert werden:
    PHP-Code:
     copy($sourceImage$destinationImage); 
    Grundsätzlich funktioniert das auch - sofern ich diese als Cronjob dienende PHP-Datei im Browser aufrufe. Ganz brav werden die Bilder von dem entfernten Server ins angegebene Contao-Verzeichnis kopiert.

    Sobald die gleiche Datei jedoch als "echter" Cronjob automatisch ausgeführt wird, funktionert das Kopieren nicht mehr.

    Okay, dachte ich mir, dann eben nicht! dachte ich mir. Dann lass ich die Bilder halt von einem anderen Cronjob, der auf dem entfernten Server läuft per ftp-upload (aus PHP) ins entsprechende Bilder-Verzeichnis unter files/ hineinkopieren und das PHP-Script auf dem eigenen Contao-Server lädt halt nur die Inhalte aus den Text-Dateien in die Datenbank.

    Doch auch dabei kam zu Problemen!
    Die Bilder werden nun zwar brav in das Verzeichnis auf dem Contao-Server per ftp übertragen, doch trotzdem sind diese hinterher nicht mehr verwendbar.
    Angeblich sollen sie nun die JPG-Datei fehlerhaft sein!

    Tatsächlich kann ich die so per ftp hineingeladenen Bilder nicht im Browser aufrufen:
    "Die Grafik "xy" kann nicht angezeigt werden, weil sie Fehler enthält"

    Und wenn ich die Datei per ftp manuell herunterlade, lässt sich diese auch tatsächlich nicht mehr öffnen. Obwohl die Original-Datei aber noch völlig in Ordnung war.

    Also stehe ich nun vor dem völlig bizarren Problem, einen (echten) Cronjob mehrmals täglich manuell im Browser aufrufen zu müssen, damit der "automatische" Datenabgleich gelingt.

    Meine Vermutung ist ja, dass irgendetwas innerhalb von Contao solche automatisierten Prozesse im files/-Verzeichnis verhindert - aber ich habe keine Idee, wo ich da ansetzen könnte ... und bin daher für Idee, Hinweis oder Anregung dankbar!

    Viele Grüße

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

    Standard

    Zitat Zitat von mictl Beitrag anzeigen
    Meine Vermutung ist ja, dass irgendetwas innerhalb von Contao solche automatisierten Prozesse im files/-Verzeichnis verhindert
    Nein . Die Ursache deiner Probleme muss in deinem PHP Code liegen. Du musst genauer erklären was du machst und was nicht funktioniert, sonst kann man dir nicht helfen.

  3. #3
    Contao-Urgestein Avatar von folkfreund
    Registriert seit
    09.04.2010.
    Beiträge
    1.928

    Standard

    Welche Contao-Version verwendest du?
    Poste das PHP deines 'echten' Cron-Jobs. Was steht z.B. in den beiden Variablen $sourceImage und $destinationImage?
    Deine ursprünglich angedachte Lösung funktioniert wenn man es richtig macht .

  4. #4
    Contao-Nutzer
    Registriert seit
    11.04.2018.
    Beiträge
    5

    Standard

    Hm ... sieht der entsprechende PHP-Code aus:
    PHP-Code:
    function copyImageFile($iSource,$iDestination)
    {
        if (
    file_exists($iDestination)) {
            
    unlink($iDestination);
        }
                        
        if (
    copy($iSource,$iDestination)) {
            
    $success 1;
        } else {
            
    $success 0;
        }
                        
        return 
    $success;
    }

    $sSource 'http://www.entfernterserver.de/bilder/bild123.jpg';
    $sDestination 'files/bilder/bild123.jpg';

    $success copyImageFile($sSource$sDestination); 

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

    Standard

    Wie lässt du diese PHP Datei aufrufen? Vermutlich stimmt der Pfad von $sDestination nicht. Der ist nämlich relativ zum Arbeitsverzeichnis.

  6. #6
    Contao-Nutzer
    Registriert seit
    11.04.2018.
    Beiträge
    5

    Standard

    Contao 3.5.31

  7. #7
    Contao-Nutzer
    Registriert seit
    11.04.2018.
    Beiträge
    5

    Standard

    Ja, der ist relativ. Aber das ist er ja auch, wenn das PHP-Script per Browser aufgerufen wird - und da funktioniert alles.

    Nach diesem Prinzip sind die Dateien verteilt:

    files/cronjob/meincronjob.php
    files/import/textdatei1234.txt
    files/bilder/bild123.jpg

  8. #8
    Wandelndes Contao-Lexikon Avatar von tab
    Registriert seit
    22.10.2013.
    Beiträge
    10.075
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Als Cronjob läuft dein Skript mit dem Rootverzeichnis als Arbeitsverzeichnis, wenn du es über den Browser aufrufst, mit der document root der Domain, also dem Installationsverzeichnis von Contao. Im ersten Fall führt dein relativer Pfad ins Nirwana, im zweiten passt er.

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

    Standard

    Zitat Zitat von mictl Beitrag anzeigen
    Ja, der ist relativ. Aber das ist er ja auch, wenn das PHP-Script per Browser aufgerufen wird - und da funktioniert alles.
    Ja, aber da ist das Arbeitsverzeichnis (= DocumentRoot) ein anderes. Du hast nicht alle Fragen beantwortet.

  10. #10
    Contao-Nutzer
    Registriert seit
    11.04.2018.
    Beiträge
    5

    Standard

    Super! Das war es!
    Danke für die Hinweise! :-)

  11. #11
    Contao-Nutzer
    Registriert seit
    23.08.2013.
    Beiträge
    87

    Standard

    Kleine Programmieraufgabe: ;-)

    PHP-Code:
    if (copy($iSource,$iDestination)) {
        
    $success 1;
    } else {
        
    $success 0;
    }
                    
    return 
    $success
    Was wäre vermutlich ein sinnvollerer Return-Type? Und: Wie lässt sich das in einer Zeile lösen?

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

    Standard

    Naja 1 und 0 sind wie true und false - und da kannst du ja gleich den return value von copy zurück geben

  13. #13
    Contao-Nutzer
    Registriert seit
    23.08.2013.
    Beiträge
    87

    Standard

    Na, dass du das weißt ist mir schon klar

  14. #14
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.939

    Standard

    Zitat Zitat von mvo Beitrag anzeigen
    Na, dass du das weißt ist mir schon klar
    Ok, damit es jemand anderes schreibt ;-)

    PHP-Code:
    return copy($iSource,$iDestination); 
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

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

    Standard

    Zitat Zitat von mvo Beitrag anzeigen
    Na, dass du das weißt ist mir schon klar
    Sorry, hatte nicht gesehen dass der Post von dir ist, nicht vom Thread Ersteller

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
  •