Löschen von Dateien mit &-Zeichen funktioniert nicht
Löschen von Dateien mit &-Zeichen funktioniert nicht
Technische Angaben: Admidio 3.0.2
Verwendete Plugins: appmidio, awards, birthday, login-form, sidebar (jeweils V3)
Browser: Firefox 40.0.3
BS: Windows 10
Löscht man im Downloadmodul Dateien mit einem &-Zeichen im Namen, erscheinen diese dann unter "Nicht verwaltete Dateien". Einzige Möglichkeit ist dann, auf "Zur Datenbank hinzufügen" zu klicken, was zur Meldung "Der ausgewählte Dateiname enthält ungültige Zeichen!" führt. Das kann man im Demo-Bereich so auch nachstellen.
Also muss man derzeit die Dateien manuell auf dem Server löschen.
Grüße,
magnet
Verwendete Plugins: appmidio, awards, birthday, login-form, sidebar (jeweils V3)
Browser: Firefox 40.0.3
BS: Windows 10
Löscht man im Downloadmodul Dateien mit einem &-Zeichen im Namen, erscheinen diese dann unter "Nicht verwaltete Dateien". Einzige Möglichkeit ist dann, auf "Zur Datenbank hinzufügen" zu klicken, was zur Meldung "Der ausgewählte Dateiname enthält ungültige Zeichen!" führt. Das kann man im Demo-Bereich so auch nachstellen.
Also muss man derzeit die Dateien manuell auf dem Server löschen.
Grüße,
magnet
Re: Löschen von Dateien mit &-Zeichen funktioniert nicht
Kannst du mal nachschauen was im feld "fil_name" in tabelle "TBL_FILES" in der DB steht bei einer datei die ein & hat?
Steht da der normale name oder ist er "escaped"? Also zb "test\&test.txt"
Steht da der normale name oder ist er "escaped"? Also zb "test\&test.txt"
Re: Löschen von Dateien mit &-Zeichen funktioniert nicht
Moin XimeX,XimeX hat geschrieben:Kannst du mal nachschauen was im feld "fil_name" in tabelle "TBL_FILES" in der DB steht bei einer datei die ein & hat?
Steht da der normale name oder ist er "escaped"? Also zb "test\&test.txt"
in der DB steht der "normale Name", exakt so wie die Datei benannt ist. Versuche ich die Datei zu löschen, wird der Eintrag auch korrekt aus der DB entfernt, der Löschbefehl der Datei selbst scheint aber fehlzuschlagen und so wird sie bei den unverwalteten Dateien angezeigt.
Grüße,
magnet
Re: Löschen von Dateien mit &-Zeichen funktioniert nicht
Hast du für den adm_my_files ordner die berechtigungen richtig gestellt?
Funktioniert es bei allen anderen Dateien sie richtig zu löschen?
Also der löschbefehl für die datei ist in der datei: adm_program/system/classes/tablefile.php
Dort in Zeile 41-49
Zeile 44 sollte die Datei vom Filesystem löschen.
Zeile 48 ("parent::delete()") löscht den DB eintrag.
Funktioniert es bei allen anderen Dateien sie richtig zu löschen?
Also der löschbefehl für die datei ist in der datei: adm_program/system/classes/tablefile.php
Dort in Zeile 41-49
Zeile 44 sollte die Datei vom Filesystem löschen.
Zeile 48 ("parent::delete()") löscht den DB eintrag.
Re: Löschen von Dateien mit &-Zeichen funktioniert nicht
Ja, die Berechtigungen sind korrekt und Dateien ohne & lassen sich problemlos löschen. Wie gesagt, der Fehler lässt sich auch in der Online-Demo schnell reproduzieren.XimeX hat geschrieben:Hast du für den adm_my_files ordner die berechtigungen richtig gestellt?
Funktioniert es bei allen anderen Dateien sie richtig zu löschen?
Also der löschbefehl für die datei ist in der datei: adm_program/system/classes/tablefile.php
Dort in Zeile 41-49
Zeile 44 sollte die Datei vom Filesystem löschen.
Zeile 48 ("parent::delete()") löscht den DB eintrag.
In den Quellcode habe ich noch nicht schauen können, weil ich noch mit anderen Problemchen gekämpft habe.
Grüße,
magnet
Re: Löschen von Dateien mit &-Zeichen funktioniert nicht
Erstell mal bitte folgende datei und führe sie aus und sag ob das funktioniert.
ausführen mit "php namedertestdatei.php" in einer console oder aufrufen der url.
ist es auch egal an welcher stelle das & zeichen steht?
Welche PHP version hast du?
ausführen mit "php namedertestdatei.php" in einer console oder aufrufen der url.
Code: Alles auswählen
<?php
unlink('relativer/pfad/zur/dateiMit&Zeichen.jpg');
?>
Welche PHP version hast du?
Re: Löschen von Dateien mit &-Zeichen funktioniert nicht
Ja, so funktioniert es, da ich genau über diesen Weg die Dateien gelöscht habe.XimeX hat geschrieben:Erstell mal bitte folgende datei und führe sie aus und sag ob das funktioniert.
ausführen mit "php namedertestdatei.php" in einer console oder aufrufen der url.
ist es auch egal an welcher stelle das & zeichen steht?Code: Alles auswählen
<?php unlink('relativer/pfad/zur/dateiMit&Zeichen.jpg'); ?>
Welche PHP version hast du?
Ob das &-Zeichen vorne oder mittig steht, ist egal.
PHP-Version: 5.4.45-0+deb7u1
PHP-Version eures Demo-Spielplatzes: 5.5.26-nmm1
Grüße,
magnet
Re: Löschen von Dateien mit &-Zeichen funktioniert nicht
Ich glaube ich hab das problem gefunden. Möglich das es auch nur ein Teil des Problems ist.
passe mal folgendes an:
adm_program/system/string.php Zeile 161-195
passe mal folgendes an:
adm_program/system/string.php Zeile 161-195
Code: Alles auswählen
function strValidCharacters($string, $checkType)
{
if(strlen(trim($string)) > 0)
{
switch($checkType)
{
case 'email':
$validChars = '/^[a-z0-9áàâåäæcccçéèeênnñóòôöõøœúùûüß\.\-_@]+$/';
break;
case 'file':
$validChars = '/^[a-z0-9áàâåäæcccçéèeênnñóòôöõøœúùûüß\.\-_$\&!\?\+ ]+$/';
break;
case 'noSpecialChar': // eine einfache E-Mail-Adresse sollte dennoch moeglich sein (Benutzername)
$validChars = '/^[a-z0-9\.\-_\+@]+$/';
break;
case 'url':
$validChars = '/^[a-z0-9áàâåäæcccçéèeênnñóòôöõøœúùûüß\.\-_:/#\?=%\&!]+$/';
break;
}
// check if string contains only valid characters
if(preg_match($validChars, admStrToLower($string)))
{
if($checkType == 'email')
{
// check structure of email address
return preg_match('/^[^@]+@[^@]+\.[^@]{2,}$/', trim($string));
}
return true;
}
}
return false;
}
Re: Löschen von Dateien mit &-Zeichen funktioniert nicht
XimeX hat geschrieben:Ich glaube ich hab das problem gefunden. Möglich das es auch nur ein Teil des Problems ist.
passe mal folgendes an:
adm_program/system/string.php Zeile 161-195
Guten Abend!
leider besteht das Problem auch nach der gewünschten Änderung.

Grüße,
magnet
Re: Löschen von Dateien mit &-Zeichen funktioniert nicht
Hab das jetzt noch etwas getestet. Sehr seltsam. Sieht mir schon fast nach einen PHP Bug aus. Über die CommandLine ausgeführt funktioniert es aber über die Webseite nicht. Kannst mal eine datei "test.php" im admidio hauptordner erstellen mit folgenden inhalt:
und dann ausführen mit "php test.php"
es sollte dann "bool(true)" stehen in der ausgabe.
https://github.com/Admidio/admidio/issues/168
Code: Alles auswählen
<?php
require_once('adm_program/system/classes/admexception.php');
require_once('adm_program/system/string.php');
$filename = urldecode('test&_file.png');
var_dump(admStrIsValidFileName($filename, true));
es sollte dann "bool(true)" stehen in der ausgabe.
https://github.com/Admidio/admidio/issues/168
Re: Löschen von Dateien mit &-Zeichen funktioniert nicht
Hi,XimeX hat geschrieben: und dann ausführen mit "php test.php"
Ich bekomme als Ausgabe ein "int(1)" zurück.
Grüße,
magnet
Re: Löschen von Dateien mit &-Zeichen funktioniert nicht
Ups mein fehler. Ja sollte int(1) liefern. Im master branch liefert er "bool(true)" 
@Fasse: Hast du eine Ahnung warum es über die Konsole geht aber über den Browser aufgerufen nicht?

@Fasse: Hast du eine Ahnung warum es über die Konsole geht aber über den Browser aufgerufen nicht?
Re: Löschen von Dateien mit &-Zeichen funktioniert nicht
Hallo zusammen,
der Fehler ist in der 3.0.3 gehoben, welche wir Ende der Woche veröffentlichen wollen.
Das Problem ist, dass & ein spezielles Html Zeichen ist, was in manchen Funktionen umgewandelt wurde zu & und dieser abgeänderte Dateinamen dann nicht gefunden wurde.
Viele Grüße
Fasse
der Fehler ist in der 3.0.3 gehoben, welche wir Ende der Woche veröffentlichen wollen.
Das Problem ist, dass & ein spezielles Html Zeichen ist, was in manchen Funktionen umgewandelt wurde zu & und dieser abgeänderte Dateinamen dann nicht gefunden wurde.
Viele Grüße
Fasse
Re: Löschen von Dateien mit &-Zeichen funktioniert nicht
Alles klar, Danke!fasse hat geschrieben:Hallo zusammen,
der Fehler ist in der 3.0.3 gehoben, welche wir Ende der Woche veröffentlichen wollen.
Das Problem ist, dass & ein spezielles Html Zeichen ist, was in manchen Funktionen umgewandelt wurde zu & und dieser abgeänderte Dateinamen dann nicht gefunden wurde.
Viele Grüße
Fasse
Grüße,
magnet