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
Umlaute und Leerzeichen im Dateisystem
Re: Umlaute und Leerzeichen im Dateisystem
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.
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.
Re: Umlaute und Leerzeichen im Dateisystem
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
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
Re: Umlaute und Leerzeichen im Dateisystem
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
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
Re: Umlaute und Leerzeichen im Dateisystem
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
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
Bugs cApiImgScale und include.upl_files_overview.php
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
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):
Viele Grüße
Michael
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: }
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: }
Michael