Umlaute und Leerzeichen im Dateisystem

Alles rund um Module und Plugins in CONTENIDO 4.9.
Antworten
Franky_K
Beiträge: 4
Registriert: So 14. Jan 2007, 23:05
Kontaktdaten:

Umlaute und Leerzeichen im Dateisystem

Beitrag von Franky_K » So 18. Dez 2016, 14:57

Liebe Forenmitglieder,

wegen fehlender weiterer Unterstützung von alten PHP Versionen musste ich ein Update von Version 4.8 auf 4.9 durchführen.
Leider gibt es seither Probleme mit unserer Bildergalerie (welches Hauptbestandteil von http://www.fotofreunde-altbach.de ist).
Das Modul wurde von Timo H. Hummel übernommen und angepasst.

In den Upload Verzeichnissen laden wir Bilder per FTP hoch, die aus einem Mitgliederkürzel und dem Bildtitel besteht.
Blöderweise werden seit dem Update auf 4.9 Dateien mit Leerzeichen und/oder Umlauten nicht mehr richtig behandelt.
Das Problem scheint aus capiImgScale zu kommen. Es wird einfach kein verkleinertes Bild mit MD5 Hash im Cache abgelegt.

Kennt jemand das Problem? Gibt es einen Workaround?
Die Bildtitel aus den Dateinamen zu extrahieren ist für uns ein ziemlich praktischer und effizienter workflow.

Viele Grüße
Franky_K

homtata
Beiträge: 1142
Registriert: Mi 14. Jan 2004, 14:41
Kontaktdaten:

Re: Umlaute und Leerzeichen im Dateisystem

Beitrag von homtata » Mo 19. Dez 2016, 00:01

versuch mal durch debuggen der function cApiImg herauszufinden, ob dort der Dateiname, den du in der function übergibts, überhaupt im Dateisystem als "gefunden" berichtet wird oder ob DAS fehlschlägt. Vielleicht wird ja auch schon der Dateiname leicht verändert an die cApiImg-Funktion übergeben?

Falls der Dateiname ok übergeben wird und das System die Datei als "gefunden" meldet, musst du weitersuchen in den functions cApiImgScaleLQ oder cApiImgScaleHQ.
Guggst du hier:
http://api.contenido.org/con4911/source ... ml#499-618

Ich denke nicht, dass es einen einfachen "Workaround" gibt. Wenn die 4.9 das Dateihandling tatsächlich anders handhabt, dann musst du die Stelle im Sourcecode finden, wo das Problem dann zuschlägt.
Es ist allerdings - Workflow hin oder her - schon immer riskant, das auf diese Weise zu lösen mit FTP und nicht URl-konformen Zeichen in den Dateinamen. Etliche neuere Module fragen NICHT mehr ab, was im Dateisystem steht, sondern welche Einträge in der Upload-Tabelle stehen und würden per FTP hochgeladene Dateien ohne Refresh erstmal ignorieren.

Franky_K
Beiträge: 4
Registriert: So 14. Jan 2007, 23:05
Kontaktdaten:

Re: Umlaute und Leerzeichen im Dateisystem

Beitrag von Franky_K » Mo 19. Dez 2016, 09:55

Hallo homtata,

vielen Dank für den Hinweis. Ich dachte ich komme ums debuggen herum :-)
Ich spiele auch mit dem Gedanken alle Dateinamen mit URL Encoding zu versehen vor dem Upload via ftp.
Müsste dann ein kleiner Rename Tool schreiben. Das wäre aber kein Problem
Blöderweise gibt es schon tonnenweise hochgeladene Dateien, die Leerzeichen und Umlaute enthalten.
Die funktionieren auch, weil der Cache noch lebt. Was passiert aber, wenn der Cache mal geleert wird.
Alle Dateien auf dem Webserver umzubenennen ist auch keine rechte Option, weil der Dateiname ein Index auf ein Bewertungssystem ist...

Naja ich geh mal debuggen!

Viele Grüße
Frank

rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Re: Umlaute und Leerzeichen im Dateisystem

Beitrag von rethus » Mo 19. Dez 2016, 13:03

Franky_K hat geschrieben: Blöderweise gibt es schon tonnenweise hochgeladene Dateien, die Leerzeichen und Umlaute enthalten.
Die funktionieren auch, weil der Cache noch lebt. Was passiert aber, wenn der Cache mal geleert wird.
Alle Dateien auf dem Webserver umzubenennen ist auch keine rechte Option, weil der Dateiname ein Index auf ein Bewertungssystem ist...

Nun ich würde erstmal ein Backup des Cache-Verzeichnisses machen, bis das Poblem behoben ist
Dann eine Kopie der Webseite in die lokale Entwicklungsumgebung und dort in Ruhe debuggen... da kannste dann auch cache löschen (oder wieder von LIVE holen) wie es dir beliebt.
Zudem kannst du lokal gut mit dem XDebug arbeiten (auf dem LIVE hat der wiederum nichts zu suchen [zumindest nicht dauerhaft]).

Viel Erfolg.
Could I help you... you can help me... buy me a coffee . (vielen ❤ Dank an: Seelauer, Peanut, fauxxami )

xstable.com: - HighSpeed Hosting, Domains, DomainReselling, Linux-Administration
suther.de: - App-Programierung, High-Performance-Webpages, MicroServices, API-Anbindungen & Erstellung

Software... ein Blick wert: GoogleCalender Eventlist, xst_dynamic_contentType

Franky_K
Beiträge: 4
Registriert: So 14. Jan 2007, 23:05
Kontaktdaten:

Re: Umlaute und Leerzeichen im Dateisystem

Beitrag von Franky_K » Di 27. Dez 2016, 14:05

So, jetzt hab ich etwas Zeit gefunden und das Problem "niedergekämpft":
Eigentlich sind es 2 Probleme:

1. Leerzeichen werden in Dateinamen nicht erkannt:

Dieses Problem ist ein Bug im functions.api.images.php
Dort steht u.A. folgender Code für das resizing mit image magick:

$cmd = "'{$program}' -quality {$quality} -geometry {$targetX}x{$targetY} '{$source}' '{$destination}'";
Man beachte die einfachen Anführungszeichen um $program $source und $destination.
Ein paar Zeilen zuvor werden diese 3 Parameter mit escapeshellarg behandelt.
Diese Funktions setzt bereits einfach Anführungszeichen.
Damit wird jeder Parameter mit 2 mal einfachen Anführungszeichen escaped.
Das ist für Strings ohne Leerzeichen kein Problem. Mit Leerzeichen kommt das CmdLine System von ImageMagick aus dem Tritt...

Also: DIe einfachen Anführunszeichen aus der command line rausnehmen.

2. Umlaute:

Das ist ein Problem mit escapeshellarg.
Dieses fIltert auch Umaute und Sonderzeichen raus. Dieses Verhalten wird allerdings in der Dokumentation verschwiegen.
Deshalb hab ich folgenden Tipp beherzigt und statt escapeshellarg myescapeshellarg verwendet.

function myescapeshellarg($arg){
return "'".str_replace("'","\\'",$arg)."'";
}

Viele Grüße und Danke für eure Unterstützung

Frank

dermicha
Beiträge: 95
Registriert: Mi 9. Dez 2009, 17:57
Kontaktdaten:

Bugs cApiImgScale und include.upl_files_overview.php

Beitrag von dermicha » Di 28. Mär 2017, 12:59

Das Problem 1 kann ich bestätigen. Auf Servern mit ImageMagick funktioniert cApiImgScale daher nicht mit Dateien, die Leerzeichen enthalten. Wäre schön, wenn das im Core korrigiert wird.

Das Problem 2 taucht bei mir (PHP 7) nicht auf. Dafür bin ich aber auf ein anderes Problem in der include.upl_files_overview.php gestoßen: Die Zeilen

Code: Alles auswählen

260:                 if (cString::isUtf8($_FILES['file']['name'][$key])) {
261:                     $_FILES['file']['name'][$key] = utf8_decode($_FILES['file']['name'][$key]);
262:                 }
führen bei mir (frische 4.9.11 mit Update auf 4.9.12, komplett UTF-8) und vermutlich allen UTF-8-Systemen zu Problemen mit Umlauten (werden nicht mehr ersetzt, sondern entfernt). Ich denke, es sollte zusätzlich der PHP-Zeichensatz geprüft werden (dann funktioniert es bei mir wieder):

Code: Alles auswählen

260:                 if (cString::isUtf8($_FILES['file']['name'][$key]) && (!$cfg['php_settings']['default_charset'] == 'UTF-8')) {
261:                     $_FILES['file']['name'][$key] = utf8_decode($_FILES['file']['name'][$key]);
262:                 }
Viele Grüße

Michael

Antworten