adminbereich zum bilder löschen

die delete-list.php
PHP:
<?php
require_once 'delete_config.php';

echo '<h3>Admin-Bereich</h3>';


$dir = opendir(PATH_TO_DIR);

while (($file = readdir($dir)) !== false) {
	if ($file == '.' || $file == '..') {
		continue;
	}
	
	$uploadedfile = explode('.', $file);
	$extension =$uploadedfile[count($uploadedfile) - 1];
	if (!in_array($extension, $extensions)) {
		continue;
	}
	echo $allowed_path.'<br/>';
    echo dirname($uploadedfile).'<br/>';  
	
	echo '<img src="' . PATH_TO_DIR . '/' . $uploadedfile . '" /> <a href="delete_img.php?file=' . $file .'">Bild Loschen</a><br/>';
}

closedir($dir);
?>

so siehts aus:

PHP:
Admin-Bereich

.
Bild Loschen

.
Bild Loschen

.
Bild Loschen

.
Bild Loschen

.
Bild Loschen

.
Bild Loschen
 
Sorry, ich habe mich undeutlich ausgedrückt. Ich meinte eigentlich die If-Abfrage in der delete_img.php :(

mfg
nosilume
 
nix Sry, ich muss Glücklich sein das du mir hilfst!

nun sieht der code von der delete-img.php so aus:

PHP:
<?php
require_once 'config.php';

$allowed_path = realpath(PATH_TO_DIR . $_GET['file']);  
$absolute_path_thumbs = realpath($_GET['file']);

if(dirname($absolute_path_thumbs) != $allowed_path) {
	echo 'Du kannst keine Dateien außerhalb des Verzeichnisses loschen !';
	exit;
}
	echo $allowed_path.'<br/>';
    echo dirname($uploadedfile).'<br/>';  

unlink(PATH_TO_DIR . $_GET['file']) OR die('Datei konnte nicht gelöscht werden.');

echo '<br/>Datei erfolgreich gelöscht !';

if(!is_file(PATH_TO_DIR . $_GET['file'])) {
echo 'Die Datei wurde nicht gefunden.';
exit;
} 
?>

Folgender Fehler:

PHP:
Du kannst keine Dateien außerhalb des Verzeichnisses loschen !
 
Ok, du hast da irgendwas verwechselt. Ersetz einmal deinen Code in der delete_img.php durch das hier.
PHP:
<?php
require_once 'config.php';

$allowed_path = realpath(PATH_TO_DIR . $_GET['file']);  
$absolute_path_thumbs = realpath($_GET['file']);

echo $allowed_path.'<br/>';
echo dirname($absolute_path_thumbs).'<br/>';  


if(dirname($absolute_path_thumbs) != $allowed_path) {
    echo 'Du kannst keine Dateien außerhalb des Verzeichnisses loschen !';
    exit;
}

if(!is_file(PATH_TO_DIR . $_GET['file'])) {
echo 'Die Datei wurde nicht gefunden.';
exit;
}

unlink(PATH_TO_DIR . $_GET['file']) OR die('Datei konnte nicht gelöscht werden.');

echo 'Datei erfolgreich gelöscht !';

?>

Aber freu dich bitte noch nicht zu früh, jetzt werden einmal ein paar Informationen ausgegeben, die mir helfen den Fehler zu finden. Eigentlich komisch, ich probiere die ganze Zeit den Fehler zu produzieren aber es gelingt mir nicht. Naja, Computer sind halt sehr unterschiedlich...

mfg
nosilume
 
nun kommt folgender fehler:

PHP:
/srv/www/web4/html/upload2/files/f73fcb2c14e3cfb7b4a46cf31cApophysis-7512-11.png

Du kannst keine Dateien außerhalb des Verzeichnisses loschen !

könnte es eventuel an der delete-list.php liegen?

PHP:
<?php
require_once 'config.php';

echo '<h3>Admin-Bereich</h3>';


$dir = opendir(PATH_TO_DIR);

while (($file = readdir($dir)) !== false) {
	if ($file == '.' || $file == '..') {
		continue;
	}
	
	$uploadedfile = explode('.', $file);
	$extension =$uploadedfile[count($uploadedfile) - 1];
	if (!in_array($extension, $extensions)) {
		continue;
	}
	
	echo '<img src="' . PATH_TO_DIR . '/' . $uploadedfile . '" /> <a href="delete_img.php?file=' . $file .'">Bild Loschen</a><br/><br/>';

}

closedir($dir);
?>

Aber Hey, Echt Danke das du dir für mich die Mühe machst:)
 
könnte es eventuel an der delete-list.php liegen?

Danke für den Hinweis !
In der Zeile
PHP:
echo '<img src="' . PATH_TO_DIR . '/' . $uploadedfile . '" /> <a href="delete_img.php?file=' . $file .'">Bild Loschen</a><br/><br/>';
wird zwar das richtige Bild angezeigt, aber es wird das falsche Bild an das Lösch-Script übergeben. Also bitte ersetzen durch
PHP:
echo '<img src="' . PATH_TO_DIR . '/' . $uploadedfile . '" /> <a href="delete_img.php?file=' . $uploadedfile .'">Bild Loschen</a><br/><br/>';

mfg
nosilume
 
Ok, ich sollte mir wenn den ganzen Code anschauen...
Die Variable $uploadedfile ist ein Array. Wir wollen aber den Dateinamen haben und nehmen darum $file:
PHP:
echo '<img src="' . PATH_TO_DIR . '/' . $file . '" /> <a href="delete_img.php?file=' . $file .'">Bild Loschen</a><br/><br/>';

Jetzt sollten aber dann langsam mal alle Fehlerquellen bereinigt sein, viele gibts eh nicht mehr :)

mfg
nosilume
 
nun kommt wieder dieser Fehler:


PHP:
/srv/www/web4/html/upload2/files/f73fcb2c14e3cfb7b4a46cf31cApophysis-7512-11.png

Du kannst keine Dateien außerhalb des Verzeichnisses loschen !

delete-list.php
PHP:
<?php
require_once 'config.php';

echo '<h3>Admin-Bereich</h3>';


$dir = opendir(PATH_TO_DIR);

while (($file = readdir($dir)) !== false) {
	if ($file == '.' || $file == '..') {
		continue;
	}
	
	$uploadedfile = explode('.', $file);
	$extension =$uploadedfile[count($uploadedfile) - 1];
	if (!in_array($extension, $extensions)) {
		continue;
	}
	
	echo '  <table width="300" style="border-color:#000000; border-style:dashed; border-width:1px">
  <tr>
    <td width="298">Vorschau</td>
    <td width="90">Aktion</td>
  </tr>
  <tr>
    <td><img src="' . PATH_TO_DIR . '/' . $file . '" /></td>
    <td><a href="delete_img.php?file=' . $file .'">Bild Loschen</a></td>
  </tr>
</table>
';

}

closedir($dir);
?>

delete-img.php
PHP:
<?php
require_once 'config.php';

$allowed_path = realpath(PATH_TO_DIR . $_GET['file']);  
$absolute_path_thumbs = realpath($_GET['file']);

echo $allowed_path.'<br/>';
echo dirname($absolute_path_thumbs).'<br/>';  


if(dirname($absolute_path_thumbs) != $allowed_path) {
    echo 'Du kannst keine Dateien außerhalb des Verzeichnisses loschen !';
    exit;
}

if(!is_file(PATH_TO_DIR . $_GET['file'])) {
echo 'Die Datei wurde nicht gefunden.';
exit;
}

unlink(PATH_TO_DIR . $_GET['file']) OR die('Datei konnte nicht gelöscht werden.');

echo 'Datei erfolgreich gelöscht !';

?>

config:

PHP:
<?
define('PATH_TO_DIR', realpath('.')."/files/");  
$extensions = array('gif', 'png', 'jpg', 'PNG',);

ini_set("max_execution_time", "300");  //maximale ausfuehrzeit des scriptes festlegen, nach 300 sek abbruch!
ini_set("upload_max_filesize", "2M"); //maximale upload groesse festlegen
setlocale (LC_ALL, 'de_DE@euro', 'de_DE', 'de', 'ge'); //Sprach und Format einstellung
// Aenderungen !!
// Pfade für PHP Funktionen wie move_uploaded_file,imagejpeg, copy usw
$absolute_path_thumbs = "/srv/www/web4/html/upload2/files/thumbs/"; //Pfad auf Webserver fuer Thumbnails
$absolute_path_images = "/srv/www/web4/html/upload2/files/"; //Pfad auf Webserver fuer Original Bilder
// Pfade für den User später zum abrufen des Bildes, also bei http://domain.de/....
$relative_path_thumbs = "upload2/files/thumbs/";
$relative_path_images = "upload2/files/";
// << Ende Aenderungen !!
$x_size      = "130";        //Bild maximal 100px breit
$y_size      = "130";        //Bild maximal 100px hoch
$quali       = "75";         //Jpeg Qualitaet bei 75%
$error       = "";

	if (!isset($_GET["loechen"]))	$_GET["loechen"] = "";
	if (!isset($_GET["file"]))		$_GET["file"] = "";
?>
 
Ok, ich muss zugeben dass mich der Fehler verwirrt.

Aber ich will einmal erklären was ich versuche zu machen, vielleicht habe ich ja einen logischen Fehler: Der Teil hier
PHP:
$allowed_path = realpath(PATH_TO_DIR . $_GET['file']);  
$absolute_path_thumbs = realpath($_GET['file']);

if(dirname($absolute_path_thumbs) != $allowed_path) {
    echo 'Du kannst keine Dateien außerhalb des Verzeichnisses loschen !';
    exit;
}
soll eigentlich nur überprüfen ob die zu löschende Datei auch in diesem Ordner liegt.$allowed_path ist logischerweise der Ordner indem Dateien gelöscht werden dürfen und $absolute_path_thumbs ist der Pfad zur löschenden Datei. Probiere bitte mal folgendes: Ersetze
PHP:
echo $allowed_path.'<br/>';
echo dirname($absolute_path_thumbs).'<br/>';
durch
PHP:
echo var_dump($allowed_path) . '<br/>';
echo var_dump($absolute_path_thumbs) . '<br/>';
echo var_dump(dirname($absolute_path_thumbs)) . '<br/>';
Und überprüfe bitte ob ich die Variablen richtige geschrieben habe, ohne Syntax Highlighting (richtig ) tu ich mir echt schwer...

mfg
nosilume
 
Zurück