Problem med kataloger i upload-script

PHP

3 svar · 299 visningar · startad av robbanf

Medlem sedan maj 200349 inlägg
Trådstart#1

Jag håller på att göra ett upload-script så jag kan ladda upp filer direkt till min webserver från en browser, men jag får inte riktigt ordning på kataloghanteringen.

Det går bra i ett steg, men sen blir det fel.

Jag kan förstå varför det inte fungerar, men jag har ingen aning om hur jag ska göra istället, för att få det att fungera i "obegränsat" antal nivåer.

Lite kod:


$homeurl = "http://robbanf.com";

if (false == isset($_GET['subdir'])) {
	$homedir = "/test/";
}
	else
	{
	$homedir = "/test/" . $_GET['subdir'] . '/';
	
}
$path = $_SERVER['DOCUMENT_ROOT'].$homedir;
if (!$path) {
	die("Kunde inte öppna katalogen.");
}

echo $homedir;
if ($handle = opendir($path)) {
	while (false !== ($file = readdir($handle))) {
	if ($file != "." && $file != ".." && is_dir($path.$file)) {
	echo '<tr><td width="5%"><img src="http://robbanf.com/kat.gif">
</td><td width="95%"><b><a href='.$_SERVER['PHP_SELF'].'?subdir='.$file.'">' . $file . '</a></b></td></tr>';
	}
}

closedir($handle);
}

Några tips?

/ Robban

Medlem sedan nov. 2001274 inlägg
#2

Satt själv och pillade lite med just det här idag. Det jag åstadkom var typ det du är ute efter. Om du förstår dig på koden så får du använda den till vad du nu vill. :)

<html>
<head>
<title>Filhantering</title>
</head>
<body>

<?php
if (isset($_GET["chosendir"])) {
	$dir =  $_GET["chosendir"];
} else {

	$dir = $_SERVER["SCRIPT_FILENAME"];
	$dir = str_replace(basename($dir), '', $dir);
}

$char = substr($dir, strlen($dir) - 1, strlen($dir));

if ($char !== "/") {
$dir = $dir ."/";
}

	$pos = strrpos($dir, "/");
	$back = substr($dir, 0, $pos);
	$pos = strrpos($back, "/");
	$back = substr($back, 0, $pos + 1);

if ($handle = opendir($dir)) {
echo "Innehåll i <span style=\"font-weight: bold;\">". $dir ."</span>:<br/>";

	while (false !== ($file = readdir($handle))) {

		if ($file !== ".." && $file !== ".") {
			if (filetype($file) == "dir") {
				$dirs[] = $file;
			} else {
				$files[] = $file;
			}
		}
	}
}

	echo "<a href=\"". $_SERVER["PHP_SELF"] ."?chosendir=". $back ."\">bakåt</a><br/>";

if (count($dirs) > 0) {
	sort($dirs);
	foreach ($dirs as $key) {
		echo "<a href=\"". $_SERVER["PHP_SELF"] ."?chosendir=". $dir . $key . "/" ."\">". $key ."</a><br/>";
	}
} else {
echo "Inga mappar i denna mappen.";
}

echo "<br/><br/>";

if (count($files) > 0) {
	sort($files);
	foreach ($files as $key) {
		echo $key ."<br/>";
	}
} else {
echo "Inga filer i denna mappen.";
}

?>
</body>
</html>
Medlem sedan maj 200349 inlägg
#3

Ditt exempel funkar bra, men jag vill inte använda absoluta sökvägar i url:en. Hur ska man göra för att använda relativa sökvägar istället (relativt katalogen man startar i alltså).

/ Robban

Medlem sedan maj 200349 inlägg
#4

Jag undrar även om man kan lösa det utan att skicka information i url:en? Som när man använder method="post" i ett formulär menar jag.

/ Robban

280 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
133 ms — deklarationer (db)
0 ms — hämta statistik (cache)
143 ms — hämta tråd, inlägg och bilagor (db)
133 ms — ändringar (db)