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

#16 Mitglied ist offline   ps915 

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

geschrieben 20. Mai 2008 - 18:42

Ich arbeite ja shon mit basename( $_FILES['uploadedfile']['name'].

Ich möchte einfach nur dass die Datei wenn sie schon vorhanden ist umbenannt wird.
Ich weiß nicht wofür ich da noch bool move_uploaded_file() brauche, ich möchte sie ja nicht verschieben sonder umbenennen! :-(
0

Anzeige



#17 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 - 18:50

Poste bitte mal dein komplettes Skript. Verschieben und Umbenennen haben den gleichen Effekt :)
0

#18 Mitglied ist offline   ps915 

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

geschrieben 20. Mai 2008 - 19:23

Ich hab alles andere an HTML kram rauskopiert, deshalb sind dort so viele <?php und ?>, die sollten aber nicht stören.
Wie gesagt, das Script befindet sich noch in der Entwicklungsphase! :)
Wer aber hier schon größere Sicherheitslücken findet kann sie ja posten!
Danke
<?php
//_______________Optionen_______________//
// Uploadverzeichnis sowohl für speichern als auch für Vorschau
$zieldir = "uploads/";
// Passwort
$pass = "test";
//Passwort aktivieren(1)/deaktivieren(0) und sichtbar(1)/nicht sichbar(0)
$passopt ="1";
//Maximale Dateigröße
$max_filesize = 4200000; //4000 KB
//Dateiendungen anzeigen lassen
$types_on = 1;
//Erlaubte Dateiendungen
$f_type_er = array('jpg', 'jpeg', 'JPG', 'JPEG', 'png', 'PNG', 'gif', 'GIF', 'txt', 'doc', 'pdf','ppt','rar', 'zip', 'gz', 'tar', 'swf', 'html');
// Alle dateiendungen zulassen NICHT EMPFEHLENSWERT
$f_type_all_on = 0; // 0 = Nein 1= Ja
// Details anzeigen
$r_details = 1;
//_______________________________________//
?>
<?php
		if($types_on == 1){
			// ausgaber der erlaubten dateitypen
			$f_type_er_pruef = $f_type_er;
			
			echo "Dateitypen: ";
			for($n=0; $n<count($f_type_er_pruef); $n++)
			{
			echo "<b>.".$f_type_er_pruef[$n]."</b> ";
			}
			echo "sind erlaubt!";
		}
?>
<?php
			  if($passopt == 1)
			  {
			  echo "Aktiviert";
			  }
			   if($passopt == 0)
			  {
			  echo $pass;
			  }
?>
<?php
$zieldir2 = $zieldir; // Für die Vorschau der Datein
$zieldir = $zieldir . basename( $_FILES['uploadedfile']['name']); 
$_FILES['uploadedfile']['tmp_name'];  
$zieldir = "uploads/";
$zieldir = $zieldir . basename( $_FILES['uploadedfile']['name']); 
//Dateigröße bestimmen
$size = filesize($_FILES['uploadedfile']['tmp_name']);
// Dateigröße zum ausgeben
// Ausgabe von Else bei Filezise - Umrechnung
			$zugroß = $size-$max_filesize;
			$sizeR = bcdiv($size, 1024*1024, 2);
			$max_filesizeR = bcdiv($max_filesize, 1024*1024, 2);
			$zugroßR = bcdiv($zugroß, 1024*1024, 2);

// If / Else Funktionen Anfang

//Dateiendunge überprüfen
$f_type	= explode(".", $_FILES['uploadedfile']['name']);//Dateiname wird gesplittet um Dateiendung zu bestimmen
$f_endung  = end($f_type); //Letzter Wert im Array $f_type ist die Dateiendung und wir mit end($f_type) bestimmt
$f_type_ok = 0;
for($i=0; $i<=count($f_type_er); $i++) {
	  if($f_type_er[$i]==$f_endung)
	   	$f_type_ok = 1;}
		  if($f_type_ok == 1) {
			if($size <= $max_filesize){
				if (!empty($_POST)){
					if (isset($_POST["nameb"]{2})){
						if($_POST["passwd"] == $pass){
							if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $zieldir)){
							echo "Vielen Dank dass du die Datei ".basename( $_FILES['uploadedfile']['name']). 
							" erfolgreich hochgeladen hast!";
							// CHMOD RECHTE GEBEN
							chmod("uploads/".basename( $_FILES['uploadedfile']['name']), 0755);
							echo '<meta http-equiv="Refresh" content="3"; URL=index.php">';
							// 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);
							$exist_file_path="upload/".$neuername;
							rename("uploads/".$altername,"uploads/".$neuername);
							//Log schreiben
							$ip = $_SERVER['REMOTE_ADDR'];  
							$host = gethostbyaddr($ip); 
							$date = date("d/m/Y H:i:s");
							$file = basename( $_FILES['uploadedfile']['name']);
							$nameb = $_POST["nameb"];
							$fp = fopen("log/log.html","a");
							fwrite($fp, '<table><tr><td width="300">Datei: <b>'.$file . '<b/></td><td width="300">Ip: '.$ip . 
							'</td><td width="300">Datum: '.$date.'</td><td width="300">Name: '.$nameb.
							'</td><td width="300">Host: '.$host.'</td></tr></table>');
							fclose($fp);
							}else{
							echo "Es ist ein Fehler aufgetreten, die Datei wurde nicht hochgeladen!";
							}
						}else{ // Pass
						echo "Kein Zugriff, du hast das falsche Passwort angegeben!";
						}
					}else{ // Name
					echo "Bitte gib deinen Namen an! (Er muss mindestens 3 Zeichen lang sein!!)";
					}
				}// Post empty
			}else{
			echo "Die Datei darf nur ".$max_filesizeR." MB groß sein, sie ist aber ".$sizeR." MB groß, also ".$zugroßR." MB zu groß!";
			} // Ende von filsize
			//}
	}else{
	echo "Die Dateiendung ist nicht erlaubt, da sie <b>.".$f_endung."</b> ist!";
}
?>
<?php
$ip = getenv("REMOTE_ADDR");
$host = gethostbyaddr($ip); 
echo "Deine Ip, (".$ip.") und dein Host, (".$host.") werden beim Upload gespeichert!"; ?>
  </p>
</div>
<table width=650 align="center">
  <tr>
	<td align=center class="adminpanel"><font color=#000000>
  <p>
	<?php
$dateien = scandir($zieldir2, 1); // 1 bewirkt das die Alphabetische Reinfolge
$anzahl = count($dateien); 
$anzahl--;
$anzahl--;
if($anzahl == 1)
{
echo "Es ist  <b>".$anzahl."</b> Datei vorhanden!<p />"; 
}
if($anzahl > 1)
{
echo "Es sind  <b>".$anzahl."</b> Dateien vorhanden!<p />";
}
if($anzahl <= 0)
{
echo "Es sind keine Dateien vorhanden!";
}
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($zieldir2);
while (false != ($file = readdir ($handleordner)))
{
if ($file!= "." && $file!="..")
{
{
$h = Dateigroesse($zieldir2."/".$file);
echo "<a href=$zieldir$file>$file</a>$h<br>\n";
}
}
}
closedir($handleordner);
?>
<?php
	if($r_details == 1){
	//Dateigröße
	$r_size = "<strong>Maximale Dateigröße:</strong> ".$max_filesizeR." MB";
	//Passwort aktiv or not
	if($passopt == 1)
			  {
			  $r_pass = "Aktiviert";
			  }
	if($passopt == 0)
			  {
			  $r_pass = "$pass";
			  }
	// Dateiendungen
		if($types_on == 1){
		
			$f_type_er_pruef = $f_type_er;
			
			echo "<strong>Dateitypen:</strong>";
			for($n=0; $n<count($f_type_er_pruef); $n++)
			{
			echo ".$f_type_er_pruef[$n] ";
			}
			echo "<br />";
		}	  
	echo $r_size."<br />";
	echo "<strong>Passwort: </strong>".$r_pass."<br/>";
	
	$ip = getenv("REMOTE_ADDR");
	$host = gethostbyaddr($ip); 
	echo "<strong>Ip:</strong> " .$ip."<br/>";
	echo "<strong>Host:</strong> ".$host."<br/>";
	
	$ver= phpversion();
	echo "<strong>PHP Version:</strong> ".$ver."<br/>";
	}
	else{
	echo "Details sind deaktiviert!";
	}
	?>
<?php $ver= phpversion();
  echo "Die aktuelle PHP Version ist ".$ver."<br/>";
?>

0

#19 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 - 19:34

Also, wenn Sonderzeichen im Dateinamen sind, dann ist es doch geschickt, diese aus dem Dateinamen zu entfernen, bevor man sie ins Uploadverzeichnis verschiebt, also bei dir vor:

if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $zieldir)){


Du ersetzt einfach gleich zuvor in $zieldir die Sonderzeichen. Dann entfällt der ganze Teil mit dem rename().

Gruß,
Stefan
0

#20 Mitglied ist offline   ps915 

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

geschrieben 20. Mai 2008 - 19:58

Das verstehe ich nicht. Kann ich denn noch weiterhin mit $_FILES['uploadedfile']['name'] arbeiten wenn ich die Datei schon umbenannt habe?
0

#21 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 - 20:09

Beitrag anzeigenZitat (Toasterfraktion: 20.05.2008, 20:58)

Das verstehe ich nicht. Kann ich denn noch weiterhin mit $_FILES['uploadedfile']['name'] arbeiten wenn ich die Datei schon umbenannt habe?


Dann ersetze die Sonderzeichen in $_FILES['uploadedfile']['name'] schon hier
$zieldir = $zieldir . basename( $_FILES['uploadedfile']['name']);

Dann kannst du es ganz normal weiter verwenden :)
0

#22 Mitglied ist offline   ps915 

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

geschrieben 20. Mai 2008 - 20:29

Okay, das kann ich machen.

Nun brauche ich nur noch etwas was sowwas wie "Kopie1_von_" Oder "datei(2).xxx" oderso davor/anhängt.
Wenn ich die Datei "Deine Haustür.txt" einmal hochlade wird sie zu Deine_Haustuer.txt". Soweit so gut. Doch wenn ich sie dann nochmal hochalde, könnte ja sein dass ich sie aktualisieren möchte, wird nichts mehr verändert und es kommt der Fehler beim Auflisten der Datein dass die URL Abgeschnitten ist weil ne Leerstaste im Dateinamen steht! :-D

Das ist nun mein Problem! Trotzdem Umbenennen wenn schon vorhanden!
0

#23 Mitglied ist offline   ps915 

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

geschrieben 20. Mai 2008 - 20:47

So denke ich:
<?php
$wort_alt="Die Römer";
echo "Variable WORT ALT: ".$wort_alt."<br />"; //Ausgabe: Die Römer

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

$wort_neu = str_replace($sonderzeichen, $ersatzzeichen, $wort_alt);

echo "Variable WORT ALT: ".$wort_alt."<br />"; //Ausgabe: Die Römer
echo "Variable WORT NEU: ".$wort_neu."<br />"; //Ausgabe: Die_Roemer					
?>


Ich kann ja die alte Variable hier $wort_alt, in meinem Uploascript basename( $_FILES['uploadedfile']['name']) nicht mehr benutzen. Aber ich möchte/muss sie benuitzen weil ich im ganzen Script mit basename( $_FILES['uploadedfile']['name']) arbeite!

Kann mir jemand helfen?
0

#24 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 - 20:58

Was spricht dagegen mit $wort_neu im Skript weiter zu arbeiten? Das ist viel sauberer, und führt zu keinen Verwirrungen :blink:

Für den Fall, dass eine Datei schon existiert, habe ich was vorbereitet:

<?php

$uploadpath = 'uploads/';
$filename = 'test.txt';

$dateien_array = scandir($uploadpath, 1);

$filename_split = explode('.', $filename);
$filename_ext = end($filename_split);	//Dateierweiterung
array_pop($filename_split);
$filename_wo_ext = implode('.', $filename_split); //Dateiname ohne Dateierweiterung

unset($filename_split);

for ($i=2; file_exists($uploadpath.$filename); $i++) {
	$filename = $filename_wo_ext.'('.$i.').'.$filename_ext;
}

unset($filename_wo_ext);
unset($filename_ext);

echo $filename;

?>

0

#25 Mitglied ist offline   ps915 

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

geschrieben 20. Mai 2008 - 23:00

Puh, habe das Script nun rapide geändert und überarbeitet. Jetzt funktioniert alles so wie ich es möchte!
Mir hat vorallem der Code und die Infos von Diewie geholfen.

Besten Dank! :blink:
0

Thema verteilen:


  • 2 Seiten +
  • 1
  • 2

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