online 1
gast (50)

/ Forum / Skripte(PHP,ASP,Perl...)

Skripte(PHP,ASP,Perl...)Skripte(PHP,ASP,Perl...)

Fragevon Deuchert vom 03.06.2021, 09:13 Options

Verzeichnisstruktur auslesen

Hey Leute,
ich habe folgendes vor: Ich möchte mit nur einer Datei alle Verzeichnisse auf meinem Webserver auslesen können. Zuerst wird das Hauptverzeichnis ausgelsen, klickt man auf eine Datei wird diese an eine andere PHP-Datei weitergeleitet in welcher ich dann den Inhalt editieren will. Klickt man auf einen Ordner, soll alles dargestellt werden, was in diesem Ordner drin ist. Dateien werden wider an die PHP-Datei zum editieren weitergeleitet und Ordner sollen "geöffnet" werden. Ich hoffe ich versteht was ich mein, falls nicht => Fragen^^

Naja ich hab das ganze soweit schonmal versucht, das Hauptverzeichnis bekomme ich Problemlos dargestellt. Klicke ich dann auf einen Ordner, wird der Inhalt dieses Ordners auch dargestellt, jedoch werden Ordner als Dateien ausgegeben. Wäre cool wenn ihr das Script bei euch einfach mal testen könntet, dann wisst ihr sicher was ich mein.

Zitat:
<?php

$list_ignore = array ('.','..','exemples','phpmyadmin','sqlitemanager');
$handle = opendir(".");
while ($file = readdir ($handle))
{

if(is_dir($file) && !in_array($file, $list_ignore))
{
echo "<a href='?ordner=$file' target=''><img src='ordner.gif'> $file</a><br>\n";
}elseif(!is_dir($file) && !in_array($file, $list_ignore))
{
$pfad = "http://".$_SERVER[SERVER_ADDR].str_replace('index.php', '', $_SERVER[REQUEST_URI]);
echo "<a href='http://$_SERVER[SERVER_ADDR]/.../lesen.php?pfad=$pfad&datei=$file' target=''><img src='datei.jpg' width='12' height='15'> $file</a><br>\n";
}
}

closedir($handle);

?>



Danke euch!

Gruß Jan


Antwort schreiben

Antwort 1 von son_quatsch vom 03.06.2021, 10:01 Options

Übel übel.
Grundsätzlich falsch war, dass du is_dir() immer nur mit dem Dateinamen abgefragt hast ohne Pfad dazu. Hinzu kam die unnötige Doppelprüfung auf zu verbergen wollende Verzeichniseinträge, sowie die unnötige Nutzung von einfachen statt doppelten Anführungsstrichen in HTML und den entsprechend falsch generierten Links.

Ein funktionierendes Beispiel:
<?php

  $aIgnore= array( '.', '..', 'exemples', 'phpmyadmin', 'sqlitemanager' );
  $sDir= isset( $_REQUEST['ordner'] )? $_REQUEST['ordner']: '.';

  if ( $hDir= opendir( $sDir ) ) {
    if ( substr( $sDir, -1, 1 )!= '/' ) $sDir.= '/';

    while ( ( $sFile= readdir( $hDir ) )!== false ) {
      if ( in_array( $sFile, $aIgnore ) ) continue;

      if ( is_dir( $sDir. $sFile ) ) { 
        echo '<a href="?ordner='. $sDir. $sFile. '"><img src="ordner.gif" alt="Ordner" />'. $sFile. "</a><br>\n";
      } else {
        echo '<a href="http://'. $_SERVER['SERVER_ADDR']. '/.../lesen.php?datei='. $sDir. $sFile. '"><img src="datei.jpg" alt="Datei" />'. $sFile. "</a><br>\n";
      }
    }
    closedir( $hDir );
  } else die( 'opendir() failed' );

?>

Antwort 2 von Deuchert vom 03.06.2021, 11:23 Options

Hey Quatsch :D

Vielen Dank für dein Script, tut einwandfrei =)

Muss es mir nur jetzt mal ordentlich anschaun, damit ichs au kapier!

Gruß Jan

Antwort 3 von son_quatsch vom 03.06.2021, 12:36 Options

Frag einfach alles :-)

Antwort 4 von Deuchert vom 03.06.2021, 13:02 Options

hmmm ich habe jetzt noch ein Problem mit der lesen.php-Datei die den Inhalt der übergebenen Datei auslesen und in ein textarea schreiben soll.


Zitat:
<html>
<head>
<title>Datei Bearbeiten</title>
</head>
<body>


<?php


echo "$_GET[pfad]$_GET[datei]<br>";

echo "<br>";

?>


<form action="datei_speichern.php" METHOD="POST">
<textarea name="datei_inhalt" cols="170" rows="45"><?php
$datei = file("$_POST[$pfad]$_GET[datei]");
for($i = 0; $i < count($datei); $i++)
{
echo $datei[$i];
}
?>

</textarea>
<input name="pfad" type="hidden" value="<?php echo $_GET[pfad]; ?>"> <input name="datei" type="hidden" value="<?php echo $_GET[datei]; ?>">

<input type="submit" value="Speichern"><input type="reset" value="L&ouml;schen">
</form>

</body>
</html>




Ich öffne lesen.php die Datei lesen.php (also die gleiche^^ ) Diese Datei hat ausgegeben in der Textarea dann nur noch folgenden Inhalt:

Zitat:
<html>
<head>
<title>Datei Bearbeiten</title>
</head>
<body>


<?php


echo "$_GET[pfad]$_GET[datei]<br>";

echo "<br>";

?>


<form action="datei_speichern.php" METHOD="POST">
<textarea name="datei_inhalt" cols="170" rows="45"><?php
$datei = file("$_POST[$pfad]$_GET[datei]");
for($i = 0; $i < count($datei); $i++)
{
echo $datei[$i];
}
?>


Die Inputs und das </textarea> werden nicht ausgegeben, bzw werden ausgeführt und erstellen dadurch halt den Submit und reset-Button :-(

Ich versteh net warum des net mit angezeigt wird, da HTML-Code oben ja auch nicht ausgeführt sondern ausgegeben wird.

Gruß Jan

Antwort 5 von son_quatsch vom 03.06.2021, 14:57 Options

Du machst dieselben Fehler erneut:

Falsch:
$feld[element]


Richtig:
$feld['element']


Warum? Elementnamen sind Texte, also müssen sie in Hochkommata (einfache oder doppelte ist egal).
Warum "funktioniert" es auch ohne? Weil das eigentlich Konstanten sind. PHP ist aber idiotenfreundlich und gibt als Wert für die Konstante ihren eigenen Namen aus - was wiederum einem Text entspricht. Mag oft gut gehen, kann aber auch mal gewaltig daneben gehen.

Folgende Lösung (Datei "lesen.php"):
<?php

	// schickt uns wieder zurück zur Ordneransicht
	function zurueck() {
		$sParam= $_REQUEST['datei'];
		$i1= strrpos( $sParam, '/' );
		if ( $i1=== false ) $sParam= ''; else $sParam= '?ordner='. substr( $sParam, 0, $i1 );
		header( 'Location: http://'. $_SERVER['SERVER_ADDR']. '/dir.php'. $sParam );
		exit;
	}

	// wurde überhaupt ein Dateiname übergeben?
	if ( !isset( $_REQUEST['datei'] ) ) die( 'keine Datei angegeben' );

	// soll ein Dateiinhalt gespeichert werden? 
	if ( isset( $_REQUEST['speichern'] ) ) {
		if ( file_put_contents( $_REQUEST['datei'], $_REQUEST['inhalt'] )=== false ) die(' konnte Datei nicht schreiben' );
		zurueck();
	} else 
	// ...oder wurde die Bearbeitung abgebrochen?
	if ( isset( $_REQUEST['zurueck'] ) ) {
		zurueck();
	// ...ansonsten Datei zum Bearbeiten anzeigen
	} else {
		// existiert sie überhaupt?
		if ( !file_exists( $_REQUEST['datei'] ) ) die( 'Datei existiert nicht' );

		// Inhalt lesen und anzeigen
		$sFile= file_get_contents( $_REQUEST['datei'] );
		echo '<html><head>
	<title>Datei bearbeiten</title>
</head><body>Datei: '. $_REQUEST['datei']. '
	<form action="'. $_SERVER['REQUEST_URI']. '" method="POST">
		<textarea name="inhalt" cols="170" rows="45" style="width: 100%; height: 80%;">'. $sFile. '</textarea>
		<input type="hidden" name="datei" value="'. $_REQUEST['datei']. '" />
		<input type="submit" name="speichern" value="Speichern" />
		<input type="submit" name="zurueck" value="Abbruch" />
	</form>
</body></html>';
	}

?>

Das funktioniert zwar einwandfrei, aber vor allem sollst du es versuchen zu verstehen.

Antwort 6 von Deuchert vom 04.06.2021, 08:35 Options

Okay, ich muss mir das mit den Hochkommas echt angewöhnen. Ich habs mir irgendwie ohne angewöhnt, da es ja auch ohne Hochkommas ging^^

Ich schaus mir nachher an, hab grad leider keine zeit :-(
Falls ich was net peil bin ich mal so frech und frag einfach nach....

Vielen Dank für deine Hilfe!

Gruß Jan

Antwort 7 von Deuchert vom 05.06.2021, 11:32 Options

Hey,

leider klappt auch deine Lösung nicht. ist genau das gleiche wie bei meiner :-( Wenn ich eine Datei mit nem Button oder nem Textfeld (z. B. die lesen.php) aufrufe werden die Buttons aus dem zu ladenden Quelltext direkt in Buttons umgewandelt und net als Code ausgegeben. Ich versteh echt net warum^^

=> http://img211.imageshack.us/img211/1636/dateiauslesenphp.png

Gruß Jan

Antwort 8 von son_quatsch vom 05.06.2021, 11:58 Options

Jetzt versteh ich überhaupt erst, was du mit "werden ausgeführt" gemeint hast. Oje.
Das hättest du natürlich von vornherein sagen müssen, dass deine zu bearbeitenden Dateien auch selbst HTML enthalten können. Details gefehlt - wie immer. Dieses muss natürlich entsprechend escaped werden, damit es nicht vom Browser interpretiert wird.
Damit ergibt sich folgende Version:

<?php

	// schickt uns wieder zurück zur Ordneransicht
	function zurueck() {
		$sParam= $_REQUEST['datei'];
		$i1= strrpos( $sParam, '/' );
		if ( $i1=== false ) $sParam= ''; else $sParam= '?ordner='. substr( $sParam, 0, $i1 );
		header( 'Location: http://'. $_SERVER['SERVER_ADDR']. '/dir.php'. $sParam );
		exit;
	}

	// wurde überhaupt ein Dateiname übergeben?
	if ( !isset( $_REQUEST['datei'] ) ) die( 'keine Datei angegeben' );

	// soll ein Dateiinhalt gespeichert werden? 
	if ( isset( $_REQUEST['speichern'] ) ) {
		$sFile= get_magic_quotes_gpc()? stripslashes( $_REQUEST['inhalt'] ): $_REQUEST['inhalt'];
		if ( file_put_contents( $_REQUEST['datei'], $sFile )=== false ) die(' konnte Datei nicht schreiben' );
		zurueck();
	} else 
	// ...oder wurde die Bearbeitung abgebrochen?
	if ( isset( $_REQUEST['zurueck'] ) ) {
		zurueck();
	// ...ansonsten Datei zum Bearbeiten anzeigen
	} else {
		// existiert sie überhaupt?
		if ( !file_exists( $_REQUEST['datei'] ) ) die( 'Datei existiert nicht' );

		// Inhalt lesen und anzeigen
		$sFile= htmlentities( file_get_contents( $_REQUEST['datei'] ) );
		echo '<html><head>
	<title>Datei bearbeiten</title>
</head><body>Datei: '. $_REQUEST['datei']. '
	<form action="'. $_SERVER['REQUEST_URI']. '" method="POST">
		<textarea name="inhalt" cols="170" rows="45" style="width: 100%; height: 80%;">'. $sFile. '</textarea>
		<input type="hidden" name="datei" value="'. $_REQUEST['datei']. '" />
		<input type="submit" name="speichern" value="Speichern" />
		<input type="submit" name="zurueck" value="Abbruch" />
	</form>
</body></html>';
	}

?>

Antwort 9 von Deuchert vom 08.06.2021, 08:22 Options

Hey,

okay sorry, hab mich wohl net deutlich genug ausgedrückt.... ^^

Aber ich hatte das gleiche Problem auch mit der PHP Funktion show_source(). Aber nur dann wenn ich show_source() in einer Textarea angewandt habe. Wenn ich es einfach so direkt ausgegeben habe, wurde HTML nicht "ausgeführt" sondern der Code ausgeschrieben. Das ist echt recht merkwürdig.

Jetzt tuts ja, auch wenn ich das Script nemme so wirklich peil. Ich schaus mir jetzt aber erst mal an.

Vielen Dank!

Gruß Jan

Ähnliche Themen

cookiewert auslesen
karim  27.11.2007 - 87 Hits - 3 Antworten

Wert aus Tabelle auslesen
fufufu  19.12.2007 - 185 Hits - 4 Antworten

mdb mit php auslesen
zetti  14.01.2008 - 118 Hits - 1 Antwort

selectbox auslesen mit php
newi  31.01.2008 - 43 Hits - 4 Antworten

Teamspeak Server Useranzahl auslesen
Rudi21  18.03.2008 - 14 Hits - 5 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Mon Jan 26 01:23:17 2026