Contao-Camp 2024
Ergebnis 1 bis 20 von 20

Thema: MYSQL Datenformat bei Downloadelementen

  1. #1
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.280

    Standard MYSQL Datenformat bei Downloadelementen

    Servus beisammen,

    ich hoffe das ist hier richtig platziert. Eigentlich passt es auch in "Entwickler-Fragen" ;-)

    Ich habe ein Projekt das per Cronjob Benutzer, Ordner und Contentelemente vom Typ "Downloads" anlegt. Bei einer Contaoinstallation 2.x wurde das Feld src eines Downloadelements noch mit einem serialisierten Wert gefüllt:

    Code:
    a:1:{i:0;s:32:"files/hlg/download/bezirke/87300";}
    Seit 3.4 anscheinend teils serialisiert und zusätzlich noch mit kryptischen Zeichen:

    Code:
    a:1:{i:0;s:16:"‹ƒ4ú„>ä¥Ç
    Kann mir jemand sagen was das für ein Zeichensatz bzw. PHP Umwandlung ist? Ich muss das dringend für die aktuelle Version zum laufen kriegen. Wenn ich mit dem alten Cronjob Element anlegen lasse, meckert er "Dieses Element verwendet noch das alte Contao 2 SRC-Format. Haben Sie die Datenbank aktualisiert?"

    VG
    Frank
    Geändert von Kahmoon (15.12.2014 um 09:55 Uhr)

  2. #2
    Contao-Urgestein
    Registriert seit
    30.01.2011.
    Ort
    Stuttgart
    Beiträge
    4.138

    Standard

    das sieht nach uuid aus, d. h. der Pfad kommt dann aus tl_files

  3. #3
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.280

    Standard

    Das habe ich vermutet..aber wie ist das kodiert? Die uuid des Ordners wäre 61a1beec-8441-11e4-a5c7-001d60a40015. Wie wird da ‹ƒ4ú„>ä¥Ç draus?

  4. #4
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.280

    Standard

    Ahh jetzt hab ich verstanden was du meinst....aus der Tabelle tl_files :-)

    Da stehen so komische Werte drin....ich denke da bin ich richtig.

  5. #5
    Contao-Urgestein
    Registriert seit
    30.01.2011.
    Ort
    Stuttgart
    Beiträge
    4.138

    Standard

    richtig, und da unter path steht dann der Dateipfad, das ist das selbe wie bei den Bildern...

  6. #6
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.280

    Standard

    OK, ich versuch mal den Cron umzubiegen. Kann man auch eigentlich die Dateisynchronisierung per Script anstossen? Ich lege die Ordner ja per Script an....sprich zum Zeitpunkt an dem ich die uuid abfragen will ist der Ordner noch gar nicht synchronisiert bzw. in der Tabelle.
    Geändert von Kahmoon (15.12.2014 um 10:27 Uhr)

  7. #7
    Contao-Urgestein
    Registriert seit
    30.01.2011.
    Ort
    Stuttgart
    Beiträge
    4.138

    Standard

    ein sync sollte mit
    PHP-Code:
    $strLog Dbafs::syncFiles(); 
    funktionieren

  8. #8
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.280

    Standard

    Was muss ich denn hier laden damit er die Klasse kennt?

    Code:
    Fatal error:  Class 'Dbafs' not found in /www/htdocs/xxxx/projekte/kbv-vertrieb/files/kbv/cron/userimport.php

    Eigentlich würde es mir auch helfen wenn ich wüsste wie die uuid erzeugt wird. Dann könnte ich den String selbst erzeugen ohne den Sync zu fahren, da ich ja schon wiess wie er später heissen wird.
    Geändert von Kahmoon (15.12.2014 um 10:53 Uhr)

  9. #9
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.280

    Standard

    Und noch eine Frage. Warum wird die uuid serialisiert aber es fehlt das Anführungszeichen und Klammer am Ende?

    a:1:{i:0;s:16:"È#^„Dä¥Ç

  10. #10
    Contao-Urgestein
    Registriert seit
    30.01.2011.
    Ort
    Stuttgart
    Beiträge
    4.138

    Standard

    Frank
    das halte ich eher für einen Anzeige Fehler, da hier ja binary als uuid verwendet wird.
    Du kannst auch mit
    PHP-Code:
    $file Dbafs::addResource('files/james-wilson.jpg'); 
    die Angaben direkt hinzufügen - laut source

  11. #11
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.280

    Standard

    Das ist mir auch gerade aufgefallen.

    In PHPMyAdmin ist die uuid 39d38dfe844711e4a5c7001d60a40015 und in meinem SQL Tool Navicat 9Ӎþ„Gä¥Ç. Wenn ich das Feld abfrage ist es auch nur 16 Stellen lang. Die uuid ist ja viel länger. Ich denke ich muss hier noch etwas umwandeln bei der Query. bindec. oder hexdec...


    Super Tipp mit der Funktion ($file = Dbafs::addResource('files/james-wilson.jpg') einzelne Dateien direkt in tl_files aufzunehmen. Allerdings läuft das noch auf Fehler weil ich nicht weiss welche Dateien ich inlcuden muss damit er die Klasse kennt. Der Cronjob zieht sich aktuell nur die localconfig wegen der Datenbank.

    VG

  12. #12
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.507
    User beschenken
    Wunschliste

    Standard

    Wenn der Cron Job die Datei direkt aufruft, muss diese die system/initialize.php includen. Danach ist alles initialisiert , auch die DB.
    Vorher muss man aber wohl noch in einer Zeile sagen ob das ganze als Frontend oder Backend getan werden soll.
    Wenn sich dann der Job die auch noch selber suchen soll, sieht das in etwa so aus:
    PHP-Code:
    /**
     * Initialize the system
     */
    define('TL_MODE''BE');

    $dir __DIR__;

    while (
    $dir != '.' && $dir != '/' && !is_file($dir '/system/initialize.php'))
    {
        
    $dir dirname($dir);
    }

    if (!
    is_file($dir '/system/initialize.php'))
    {
        echo 
    'Could not find initialize.php!';
        exit(
    1);
    }
    require(
    $dir '/system/initialize.php'); 
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  13. #13
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.507
    User beschenken
    Wunschliste

    Standard

    Und falls benötigt: in der String Klasse gibt es zwei Methoden, uuidToBin und binToUuid, statisch aufrufbar.
    PHP-Code:
    $uuid_bin String::uuidToBin('61a1beec-8441-11e4-a5c7-001d60a40015');
    $uuid_string String::binToUuid(<binäre uuid>); 
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  14. #14
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.280

    Standard

    Voll gut...danke!

    Gerade die uuid Konvertierung raubte mir gerade den letzten Nerv....ich versuche gleich mal deine Tipps.
    Geändert von Kahmoon (15.12.2014 um 12:58 Uhr)

  15. #15
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.280

    Standard

    Sodale..dank euren Tipps habe ich schon mal einen Meilenstein erledigt. Wenn Ordner erzeugt werden, werde diese auch direkt in der tl_file Tabelle erfasst. Somit kann ich unmittelbar die uuid abfragen.

    Leider mag er jetzt meinen Wert nicht den ich bei einem neuen Downloadelement als src angebe. Ich habe in der tl_files doch die uuid als binary Wert. Wenn ich dann per $uuid_string = String::binToUuid($uuid_db); das Tabellenfeld "uuid" ausgebe, wird die korrekte uuid z.B. 913a7030-845b-11e4-a5c7-001d60a40015 ausgegeben.


    Ab hier hänge ich leider. Ich habe mir händisch mal ein "Downloads" Element angelegt und mir in der Datenbank den Feldwert angeschaut. Bei MultiSrc steht

    Code:
    a:1:{i:0;s:16:"‘:oþ„[ä¥Ç
    Keine Ahnung warum das abschließende Anführungszeichen und die Klammer da nicht stehen.

    Also mache ich einen DB Insert und baue mir diesen String nach:
    PHP-Code:
    $uuid_string String::binToUuid($uuid); 
    $uuid_query 'a:1:{i:0;s:16:"'.String::uuidToBin($uuid_string); 
    Leider klappt das nicht wie gewünscht ;-). Das Download-Element wird war angelegt...zeigt aber keine Dateien. Sprich die MultiSrcZuweisung stimmt nicht (siehe cron.jpg). Öffne ich dann das Element und weise den Ordner von Hand zu wird das Element auch korrekt angezeigt (manuell.jpg). Wenn ich ein vom Cron angelegtes Downloadelement bearbeite und den ORdner zuweise ändert sich in der Tabelle der Wert im MultiSrc nicht und es geht!

    Eigentlich macht das ja irgendwie keinen Sinn die uuid vorher umzuwandeln. Ich könnte sie ja aus dem einen Feld tl_files -> uuid (binary) auslesen und tl_content-> src (binary) reinschreiben. Aber auch da ist das Feld nachher leer (cron.jpg)


    Edit:
    Hier noch die Query
    PHP-Code:
    $query "INSERT INTO tl_content (pid, sorting, type, headline, sortOrder, multiSRC, perRow, numberOfItems, sortBy, protected, groups) 
                                            VALUES (28, "
    .$gruppe.", 'downloads', '".serialize($topic)."', 'ascending', '".$uuid_query."', 4, 0, 'name_asc', 1, '".serialize($benutzergruppe)."');"
    VG
    Angehängte Grafiken Angehängte Grafiken
    Geändert von Kahmoon (15.12.2014 um 14:04 Uhr)

  16. #16
    Contao-Urgestein
    Registriert seit
    30.01.2011.
    Ort
    Stuttgart
    Beiträge
    4.138

    Standard

    Frank ,
    meiner Meinung nach muss für eine Dateiliste da keine Konvertierung erfolgen.
    PHP-Code:
    $this->multiSRC deserialize($this->multiSRC);
    $this->objFiles = \FilesModel::findMultipleByUuids($this->multiSRC);
    while (
    $this->objFiles->next())
        {
    echo 
    $this->objFiles->path;


  17. #17
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.280

    Standard

    Ja, denke auch. Es ist aber immer nur ein Ordner der pro Gruppe vergeben wird. Ich check nur nicht warum das Downloadelement, das per Cron angelegt wurde, nicht funktioniert. Gehe ich rein und speichere es noch mal von Hand ist alles tiptop und der Benutzer sieht es. Davor nicht. hmmmm

    Die korrekte Schreibweise für den Pfad im Query habe ich wohl gefunden. Zumindest hat er jetzt schon den richtigen Ordner gewählt wenn ich das Element bearbeite.

  18. #18
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.280

    Standard

    So..nach 6,5 Std tüfteln....habe ich die Lösung. Man muss nur die neue Eingabe wieder serialisieren....

    PHP-Code:
    serialize($uuid); 
    Jetzt funktionieren die Elemente direkt!!! yay!


    Danke für die Hilfestellungen

  19. #19
    Contao-Nutzer
    Registriert seit
    30.03.2011.
    Beiträge
    18

    Standard

    das versteh ich leider nicht ganz. Kannst du nochmal genau sagen, welchen wert der uuid du verwendest? bin? uuid? hex????

    Und wieso serialisierst du die uuid denn direkt? Ich dachte, erst das Array, in das du die uuid einfügst, muss serialisiert werden bevor es in die DB geschrieben wird. So jedenfalls in dem Fall, dass du die uuid in das Feld multiSRC von tl_content einfügen willst. Oder?

    Liege ich da falsch? Wenn ja, wo denn bitte?

    Grüße
    Timtow

  20. #20
    Contao-Nutzer
    Registriert seit
    30.03.2011.
    Beiträge
    18

    Standard

    ich schlage vor, die Diskusion zu diesem Thema auf folgendem Thread weiter zu führen damit es sich an einer Stelle bündelt:

    https://community.contao.org/de/show...ng-mit-Artikel

    Ich hoffe, ich trete damit niemandem (Kahmoon) auf den Schlipps und verhalte mich entsprechend der Regeln.

    Gruß
    Timtow

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
  •