PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Umlaut in Dateinamen


abenstex
23.11.2007, 10:15:27
Hallo zusammen,

ich arbeite gerade an einer abteilungsinternen webapp, die es den Benutzern ermöglichen soll, Dateien zu öffnen/herunterzuladen und zu kommentieren. Soweit funktioniert auch alles ganz gut nur sobald Dateinamen mit Umlauten auftauchen gibt es Probleme.
Hier werden die Dateien aus einem Verzeichnis gelesen.

$files[$i]["name"] = htmlentities($it);
$tmp = $dir."/".$files[$i]["name"];
$files[$i]["realpath"] = $dir."/".$files[$i]["name"];//realpath($tmp);
$it = $dir."/".$it;
$files[$i]["extension"] = fileExtension($it);
$files[$i]["size"] = fileRealSize($it);
$files[$i]["changed"] = filemtime($it);
$files[$i]["comment"] = readFileComments($dir, $files[$i]["name"], $connection);
$i++;

Und hier tritt der Fehler auf, dass PHP felsenfest behauptet, dass es die Datei nicht gibt:

function readFileComments($path, $file, $connection)
{
echo "Exists? ".file_exists($path."/".$file)."<br/>"; //liefert ständig 0, obwohl es die Datei gibt.
$file = utf8_decode($file);
$real_path = realpath($path."/".$file); //Liefert ebenfalls nichts im Gegensatz zu anderen Dateien ohne Umlaut
echo "File: ".$file." path: ".$path." realpath: ".$real_path."<br/>";
$real_path = str_replace("\\", "/", $real_path);
if(substr_count($real_path, '/') > 1)
$real_path = substr($real_path, 0, strrpos($real_path, '/'));
$query = "SELECT comment FROM file_comments WHERE file='$file' and path='$real_path'";
echo "Query: ".$query."<br/>";
if($connection)
$result = pg_query($connection, $query) or die('Abfrage fehlgeschlagen: ' . pg_last_error(). " " . $query);
else
$result = pg_query($query) or die('Abfrage fehlgeschlagen: ' . pg_last_error(). " " . $query);
if(!$result)
return "Kein Kommentar";
$row = pg_fetch_row($result);
if(strlen($row[0]) < 1)
return "Kein Kommentar";
return $row[0];
}


Ich wäre wirklich für jeden Vorschlag dankbar. Und die Dateien umbenennen ist keine wirkliche Option, obwohl mir das persönlich auch am Liebsten wäre, aber die lieben User...

rambi
23.11.2007, 11:12:26
Solange das alles in einer OS Familie bleibt, sollte das klappen!
Aber wenn du es, wie die meisten, mit einem Unix oder Linux Server und Win Clients, zu tun hast, sehe ich "umbenennen" als einzige Alternative!

Mir ist es bisher nicht gelungen, ähnliche Probleme, sauber zu lösen.

Der Umweg, den ich meist verwende:
Den original Dateinnamen in einer Tabelle speichern und die Datei mit der DatensatzID benamen.

defabricator
23.11.2007, 11:19:10
Aber in diesem Fall ist es ja der selbe Server, der die namen anzeigt und darüber auch die Dateien aufrufen soll.

Also erstmal wundere ich mich über das htmlentities gleich in der ersten Zeile.

rambi
23.11.2007, 11:38:38
Trari, trara.. klar ein Server...!!
Das heißt aber auch, dass die Dateien schon mal irgendwie dadrauf gekommen sein müssen ...!! Egal ob HTTP oder FTP Upload, an der Stelle kann schon der erste Hammer hängen.
Ich denke mal, bei solchen Problemen sollte man an der Wurzel ansetzen und nicht irgendwo mitten drin...

defabricator
23.11.2007, 12:11:00
Das heißt aber auch, dass die Dateien schon mal irgendwie dadrauf gekommen sein müssen ...!! Ja und? Dann sind die Dateien halt per http oder ftp auf den Server gelangt. Sie sind drauf und die Namen (richtig oder falsch dargestellt) im lokalen Dateisystem gespeichert. Und genau diesen Namen liest das Skript aus. Da sehe ich kein prinzipielles Problem.

abenstex
23.11.2007, 12:13:21
Aber in diesem Fall ist es ja der selbe Server, der die namen anzeigt und darüber auch die Dateien aufrufen soll.

Also erstmal wundere ich mich über das htmlentities gleich in der ersten Zeile.
Das htmlentities war auch das Problem, das ich übersehen hatte...Ohne htmlentities klappts auf jeden Fall. Trotzdem danke für eure Antworten.