Speicherabfrage

hi, ich versuche gerade, abzufragen, wie viel bytes in einem pfad sind, habe dafür auch folgende funktion gebastelt, klappt super NUR: manche datei typen scheinen nicht unterstützt zu werden: bei jpg z.b. kommt folgende fehlermeldung:

Im bplaced speicherscript klappts komischerweise :astonished:

hier also die funktion:

function Speicher($dir){ $files = scandir($dir); $numberoffiles = 0; $numberofdir = 0; $belspei = 0; foreach($files as $myfile){ if ($myfile == '..' || $entry == '..'){ continue; } if ($myfile == '.' || $entry == '.'){ continue; } if (!is_dir($myfile)){ $numberoffiles = $numberoffiles + 1; $belspei = $belspei + filesize($myfile);#zeile366 } else{ $numberofdir = $numberofdir + 1; $erneutarray = Speicher($myfile); $belspei = $belspei + $erneutarray[1]; $numberoffiles = $numberoffiles + $erneutarray[2]; $numberofdir = $numberofdir + $erneutarray[3]; } echo "$myfile<BR>";#nur zum testen } return array($belspei, $numberoffiles, $numberofdir); }

da muss ne klammer drum…

wo denn? wenn du in der zeile 366 meinst, dann klappts nicht :cry:

function Speicher($dir){ $files = scandir($dir); $numberoffiles = 0; $numberofdir = 0; $belspei = 0; foreach($files as $myfile){ if ($myfile == '..' || $entry == '..'){ continue; } if ($myfile == '.' || $entry == '.'){ continue; } if (!is_dir($myfile)){ $numberoffiles = $numberoffiles + 1; $belspei = ($belspei + filesize($myfile));#hier } else{ $numberofdir = $numberofdir + 1; $erneutarray = Speicher($myfile); $belspei = $belspei + $erneutarray[0]; $numberoffiles = $numberoffiles + $erneutarray[1]; $numberofdir = $numberofdir + $erneutarray[2]; } echo "$myfile<BR>";#nur zum testen } return array($belspei, $numberoffiles, $numberofdir); }

Ist die Bilddatei denn für PHP lesbar? (Mit is_readable checken.)

Also ich bin mir ziemlich sicher, dass sie für php lesbar ist, sie wird ja auch durchs echo mit ausgegeben :sunglasses: , ich kanns aber nochmal testen :hail:

Tatsache!! es liefert nichts (false) zurück, wie mach ist das bild phplesbar :qst: :qst:

Na da schau mal an …

Dass dein echo den Dateinamen ausgegeben hat, heisst ja logischerweise noch lange nicht, dass PHP für die Datei auch Leserechte hat. (Sondern höchstens, dass es die für’s Verzeichnis hat - dessen Inhalt du ja damit ausgegeben hast.)

Rechte ändern - chmod/FTP-Programm.

das bild hat das chmodrecht 644 (also 0644) genau wie die scripts… auch mit 777 ists nicht besser :neutral_face:

Na dann würd’ ich mal vermuten, dass der Pfad nicht stimmt - allerdings müsste das dann wiederum alle Dateien eines Verzeichnisses betreffen, und nicht nur bestimmte.

Jedenfalls musst du, wenn das ausgelesene Verzeichnis nicht das aktuelle Scriptverzeichnis ist, den Pfad natürlich noch vor den Dateinamen davorsetzen, bevor du irgendwelche Dateioperationen darauf aufrufen kannst.

So, hab mir jetzt den code aus dem :bp: speicherscript gepickt, weiß zwar noch nicht so 100%ig wie es funktioniert, aber das ist mir jetzt erstmalwurscht, danke nochmal für eure hilfe :slight_smile:

[code]function Speicher($dir){

$size = $files = $dirs = 0;

// Iterate queue
$queue = array($dir);
for ($i = 0, $j = count($queue); $i < $j; ++$i)
{
// Open directory
$parent = $i;
if (is_dir($queue[$i]) && $dir = @dir($queue[$i]))
{
$subdirs = array();
while (($entry = $dir->read()) !== false)
{
if ($entry == ‚…‘ || $entry == ‚.‘)
{
continue;
}

		// Get list of directories or filesizes
		$path = $queue[$i] . $entry;
		if (is_dir($path))
		{
			$path .= DIRECTORY_SEPARATOR;
			$subdirs[] = $path;
			++$dirs;
		}
		elseif (is_file($path))
		{
			$size += filesize($path);
			++$files;
		}
	}

	// Add subdirectories to start of queue
	unset($queue[0]);
	$queue = array_merge($subdirs, $queue);

	// Recalculate stack size
	$i = -1;
	$j = count($queue);

	// Clean up
	$dir->close();
	unset($dir);
}

}
return array($size, $files, $dirs);
}[/code]