WinFuture-Forum.de: Probleme Mit Verzeichnis Auslesen – Dateinamen Mit Einer Leerzeichen W - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
  • 2 Seiten +
  • 1
  • 2

Probleme Mit Verzeichnis Auslesen – Dateinamen Mit Einer Leerzeichen W


#1 Mitglied ist offline   ps915 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.119
  • Beigetreten: 17. Mai 07
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 17. Mai 2008 - 15:38

Habe ein Problem mit meinem Script:

<?php
$testdir="test_dir";

function Dateigroesse($URL){
	$Groesse = filesize($URL);
	if($Groesse < 1000){
		return " ".number_format($Groesse, 0, ",", ".")." Bytes";
	}
	elseif($Groesse < 1000000){
		return " ".number_format($Groesse/1024, 0, ",", ".")." kB";
	}
	else{
		return " ".number_format($Groesse/1048576, 2, ",", ".")." MB";
	}
}
$handleordner=opendir($testdir);
while (false != ($file = readdir ($handleordner)))
{
if ($file!= "." && $file!="..")
{
{
$h = Dateigroesse($testdir."/".$file);
echo "<a href=$zieldir$file>$file</a>$h<br>\n";
}
}
}
closedir($handleordner);
?>


Wenn in dem Verzeichnis nun eine Datei mit dem mit dem Namen "Die Todesstrafe.ppt" enthalten ist, zeigt er als link nur "http://www.link.de/uploads/Die" an!

Wie kann ich das fixen?
Danke
Toasterfraktion

Dieser Beitrag wurde von Toasterfraktion bearbeitet: 17. Mai 2008 - 15:39

0

Anzeige



#2 Mitglied ist offline   ph030 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.132
  • Beigetreten: 14. Juli 04
  • Reputation: 36
  • Geschlecht:unbekannt

geschrieben 17. Mai 2008 - 16:40

Escapen oder intelligenter Weise gleich auf solche Zeichen verzichten, die in einer URL nichts zu suchen haben.
0

#3 Mitglied ist offline   ps915 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.119
  • Beigetreten: 17. Mai 07
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 17. Mai 2008 - 17:44

Was soll ich denn da escapen?
Deine Beiträge sind immer so kurz und meistens muss ich nochmal nachfragen! Könntest ja deine Gedanken nochmal etwas genauer Ausführen. ;)

Es handelt sich um einen Ausschnitt eines Uploadssripts. Um das Problem zu beheben könnte ich doch auch den Dateinamen beim nach dem Speichern umbenennen.

Kann ich dass in einer If-Funktion unterbringen?
Also wenn Leerzeichen vorhanden sind ändere sie in "_" um!

Danke
0

#4 Mitglied ist offline   Diewie 

  • Gruppe: aktive Mitglieder
  • Beiträge: 409
  • Beigetreten: 18. Juni 06
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Geisenhausen / München

geschrieben 17. Mai 2008 - 17:45

Probier es mit string rawurlencode ( string $str ).

Generell ist es aber besser, wenn du z.B. bei Uploadscripts bzw. vor dem Upload per FTP die Leerzeichen mit Unterstrichen ersetzt. Gleiches gilt für Sonderzeichen wie ä, ö, und ü.

€: Genau, dann ist Ersetzen einfacher. Ich habe mal einen einfachen Code angehängt.

<?php

$dateiname = "äöütestß .php";

$sonderzeichen = array('Ä',  'Ü',  'Ö',  'ä',  'ö',  'ü',  'ß',  ' ');
$ersatzzeichen = array('Ae', 'Ue', 'Oe', 'ae', 'oe', 'ue', 'ss', '_');

$dateiname = str_replace($sonderzeichen, $ersatzzeichen, $dateiname); //Sonderzeichen mit Ersatzzeichen ersetzen

var_dump($dateiname);

?>


Gruß,
Stefan

Dieser Beitrag wurde von Diewie bearbeitet: 17. Mai 2008 - 18:03

0

#5 Mitglied ist offline   ps915 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.119
  • Beigetreten: 17. Mai 07
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 17. Mai 2008 - 18:18

Cool, schonmal schönen Dank an Stefan, aber warum var_dump()?

Ich habe mir auch mal Gedanken gemacht. In meinem Script arbeite ich mit basename( $_FILES['uploadedfile']['name'].

Ich habe mir gedacht man könnte es doch auch so machen oder?
$altername= basename( $_FILES['uploadedfile']['name']);
$neuername= str_replace(" ","_",$alter name); 
							 
rename($altername,$neuername); // Bin mir nicht ganz sicher aber das kann ich ja dann eigentlich weglassen oder?


Kann ich basename( $_FILES['uploadedfile']['name']) so benutzen, also als Inhalt der Variable $altername?

Herzlichen Dank an Diewie
0

#6 Mitglied ist offline   ph030 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.132
  • Beigetreten: 14. Juli 04
  • Reputation: 36
  • Geschlecht:unbekannt

geschrieben 17. Mai 2008 - 18:33

Statt zweier Arrays würde ich eher auf einen einzigen Hash setzen...
0

#7 Mitglied ist offline   ps915 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.119
  • Beigetreten: 17. Mai 07
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 17. Mai 2008 - 19:06

Hm ich habe es nun so gemacht, dass ich ganz am Ende den Dateinamen einfach umbenenne.
Ich habe vorher im Script zeihmlich oft $_FILES['uploadedfile']['name'] und $_FILES['uploadedfile']['type'] genutzt. Wenn ich den Namen schon vor dem Upload geändert hätte, müsste ich doch den namen per variable abrufen, kann sein dass ich mich auch irre.
Hauptsache ist, dass Ich nun aber eine Lösung gefunden habe.

Danke an euch!

Hier mein Code:
// Datei umbenennen wenn nötig
$altername= basename( $_FILES['uploadedfile']['name']);
$sonderzeichen = array('Ä',  'Ü',  'Ö',  'ä',  'ö',  'ü',  'ß',  ' ');
$ersatzzeichen = array('Ae', 'Ue', 'Oe', 'ae', 'oe', 'ue', 'ss', '_');
$neuername = str_replace($sonderzeichen, $ersatzzeichen, $altername);
rename("uploads/".$altername,"uploads/".$neuername);


EDIT:

Habe spontan noch einen Fehler gefunden!
Warning: rename(uploads/Haustür.jpg,uploads/Haustuer.jpg) [function.rename]: File exists in D:\xampp\htdocs\TOASTLOAD\index.php on line 187


Ich wollte die Datei nochmal hochladen. Dann hat er zwar die Fehlermeldung ausgegeben aber die Datei nicht umbenannt.
Was nu?

Dieser Beitrag wurde von Toasterfraktion bearbeitet: 17. Mai 2008 - 19:09

0

#8 Mitglied ist offline   Diewie 

  • Gruppe: aktive Mitglieder
  • Beiträge: 409
  • Beigetreten: 18. Juni 06
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Geisenhausen / München

geschrieben 18. Mai 2008 - 18:52

Beitrag anzeigenZitat (ph030: 17.05.2008, 19:33)

Statt zweier Arrays würde ich eher auf einen einzigen Hash setzen...

Was willst du uns damit sagen?

Also, du kannst die Datei nicht einfach so verschieben, da sie ja noch unter einem temporären Namen im Temp Verzeichnis liegt. Du musst das immer mit bool move_uploaded_file ( string $filename , string $destination ) machen. Da kannst du den "neuen" Dateinamen gleich als Ziel mit angeben. Such einfach mal nach ein paar Datei Upload-Scripts und schau dir an, wie diese laufen.

Gruß,
Stefan
0

#9 Mitglied ist offline   MaliMaster 

  • Gruppe: aktive Mitglieder
  • Beiträge: 907
  • Beigetreten: 10. April 02
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Deutschland

geschrieben 18. Mai 2008 - 19:10

Da gibt es eine Klasse Funktion die es schon gibt:

http://de.php.net/urlencode
0

#10 Mitglied ist offline   Diewie 

  • Gruppe: aktive Mitglieder
  • Beiträge: 409
  • Beigetreten: 18. Juni 06
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Geisenhausen / München

geschrieben 18. Mai 2008 - 19:17

Beitrag anzeigenZitat (MaliMaster: 18.05.2008, 20:10)

Da gibt es eine Klasse Funktion die es schon gibt:

http://de.php.net/urlencode

Geeignet für diese Problem ist jedoch eher rawurlencode(), was übrigens bereits gepostet wurde :ph34r:
0

#11 Mitglied ist offline   K050V4 

  • Gruppe: aktive Mitglieder
  • Beiträge: 788
  • Beigetreten: 13. August 04
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Stuttgart
  • Interessen:(X)HTML<br />CSS2+<br />PHP 4/5<br />MySQL 5<br />Symfony 1.2+<br />JavaScript / AJAX<br />jQuery<br />C++<br />C#<br />Java<br />...

geschrieben 18. Mai 2008 - 19:51

Tosterfraktion:

<?php
...
while(file_exists($neuername)) {
  //generiere einen anderen dateinamen
}
...
?>

Zitat

"In der Welt des Erkennbaren ist die Idee des Guten die höchste." - Platon

Spritify! Easy CSS-Sprite-Generator | Albanisch Deutsch Wörterbuch
0

#12 Mitglied ist offline   ps915 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.119
  • Beigetreten: 17. Mai 07
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 20. Mai 2008 - 12:42

Ich habe es mal mit einer If- versucht und dann ein "Kopie_von_" vorgesetzt. Das ging leider nicht. Und damit kann ich dich nur 1 Datei umbenennen. Wenn es nun schon eine Kopie ist brauche ich doch dann while oder?


Wie sieht denn die whileschleife aus?


Lg Toasterfraktion

EDIT:

Warum gibt er denn immernoch den Fehler aus?
$altername= basename( $_FILES['uploadedfile']['name']);
$sonderzeichen = array('Ä',  'Ü',  'Ö',  'ä',  'ö',  'ü',  'ß',  ' ');
$ersatzzeichen = array('Ae', 'Ue', 'Oe', 'ae', 'oe', 'ue', 'ss', '_');
$neuername = str_replace($sonderzeichen, $ersatzzeichen, $altername);
$exist_file_path="upload/".$neuername;

							
if (file_exists($exist_file_path)) {
   rename("uploads/".$altername,"uploads/Kopie_von_".$neuername);
} else {
   rename("uploads/".$altername,"uploads/".$neuername);
}

Dieser Beitrag wurde von Toasterfraktion bearbeitet: 20. Mai 2008 - 12:54

0

#13 Mitglied ist offline   ph030 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.132
  • Beigetreten: 14. Juli 04
  • Reputation: 36
  • Geschlecht:unbekannt

geschrieben 20. Mai 2008 - 14:41

*** deleted by the author ***

Dieser Beitrag wurde von ph030 bearbeitet: 03. Juni 2008 - 18:00

0

#14 Mitglied ist offline   Diewie 

  • Gruppe: aktive Mitglieder
  • Beiträge: 409
  • Beigetreten: 18. Juni 06
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Geisenhausen / München

geschrieben 20. Mai 2008 - 17:12

Hast du es jetzt eigentlich schonmal direkt mit bool move_uploaded_file ( string $filename , string $destination ) probiert? Warum extra mit rename() hantieren?

@ph030: Durch die Art der Implementierung der Funktion str_replace() müsste man das indizierte Array vorher manuell wieder aufsplitten in Keys und Values, daher kann man hier keinen Gewinn mehr rausziehen. Es wäre zwar noch etwas übersichtlicher, aber wenn man seinen Code einigermaßen formatiert, ist das kein Problem.


Gruß,
Stefan
0

#15 Mitglied ist offline   ph030 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.132
  • Beigetreten: 14. Juli 04
  • Reputation: 36
  • Geschlecht:unbekannt

geschrieben 20. Mai 2008 - 18:33

*** deleted by the author ***

Dieser Beitrag wurde von ph030 bearbeitet: 03. Juni 2008 - 18:00

0

Thema verteilen:


  • 2 Seiten +
  • 1
  • 2

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0