Bestanden ophalen via FTP

Status
Niet open voor verdere reacties.

Jeppey

Gebruiker
Lid geworden
5 jun 2006
Berichten
26
Ik ben bezig om alle bestanden die op de ftp server staan in een tabel op de site te zetten. Ik gebruik daarbij een simpele for loop die een array langs gaat. Hieronder de code:
PHP:
$result = ftp_nlist( $connectionID, $directory );
		
		for( $i=0; $result.count(); $i++ ){
			echo "Bestand nr. ".$i." = ".$result[$i]."<br/>";
		}

Nu heb ik een probleem, er zijn teveel bestanden en hierdoor wordt er te lang gezocht!
Weet iemand toevallig een efficientere manier om alle bestanden te verwerken op de site. Het gaat hier om een radiostation dat dus nummers opgeslagen heeft.

Alvast bedankt!:)
 
Oeps:o
Ik heb dit probleem alweer voor de helft opgelost. De loop klopte niet!
Maar nu sta ik dus voor mijn tweede probleem: hoe kan ik alle subdirectory's uitlezen en alleen de bestanden weergeven? Ik heb php versie 4.3
 
gebruik geen FTP functies hiervoor, maar readdir en dir etc... heb ooit es een soort filebrowser gemaakt daarmee, hieronder de code die ik gebruikt heb, beetje zelf zoeken wat wat is...
PHP:
<html>
<head>
<title>FileBrowser Beta</title>
</head>
<body>
<?php
error_reporting(E_ALL);
if(!isset($_GET['dir']))
{
	$handle = opendir($_SERVER['DOCUMENT_ROOT']);
	?><table border="1">
	<tr><td>Naam</td><td>Grootte</td><td>Laatst gewijzigd</td></tr>
	<?
	$dirs  = array();
	$files = array();
	while(FALSE !== ($file = readdir($handle)))
	{
 	 	if($file != '.' && $file != '..')
		{
			if(is_dir($file))
				$dirs[] = '<tr><td>../<a href="?dir='.$file.'">'.$file.'</a></td><td></td><td></td></tr>';
			else
				$files[] = '<tr><td><a href="'.$file.'">'.$file.'</a></td><td>'.filesize($file).'</td><td>'.date('Y-d-m H:i:s',filemtime($file)).'</td></tr>';
		}
	}
	if(count($dirs > 0))
	{
		foreach($dirs AS $map)
		{
			echo $map.'
';
		}
	}
	if(count($files) > 0)
	{
		foreach($files AS $bestand)
		{
			echo $bestand.'
';
		}
	}
	?></table><?
	closedir($handle);
}
elseif(is_dir($_GET['dir']))
{
	$handle = opendir($_GET['dir']);
	$dirs  = array();
	$files = array();
	while(FALSE !== ($file = readdir($handle)))
	{
	  	//if(ereg('^.+/+$',$_GET['dir'])) {
	  	//	echo TRUE;
	  	//	$_GET['dir'] = preg_replace('~(.*?)\/*~','\\1',$_GET['dir']); }
		if($file != '.' && $file != '..')
		{
			if(is_dir($_GET['dir'].'/'.$file))
				$dirs[] = '<tr><td>../<a href="?dir='.$_GET['dir'].'/'.$file.'">'.$_GET['dir'].'/'.$file.'</a></td><td></td><td></td></tr>'; 
			else
				$files[] = '<tr><td><a href="'.$_GET['dir'].'/'.$file.'">'.$file.'</a></td><td>'.filesize($_GET['dir'].'/'.$file).'</td><td>'.date('Y-d-m H:i:s',filemtime($_GET['dir'].'/'.$file)).'</td></tr>';
		}
	}
	$dirtje  = explode('/',$_GET['dir']);
	if(count($dirtje) > 2)
	{
		$arr   = explode('/',$_GET['dir']);
		unset($_GET['dir']);
		$str   = array_pop($arr);
		$dirup = '?dir=';
		for($i=0;$i<=count($arr); $i++)
		{
			if($i<count($arr))
				$dirup .= $arr[$i].'/';
			else
				$dirup .= $arr[$i];
		}
	}
	elseif(count($dirtje) == 2)
	{
		$dirtje2 =	@count($dirtje) - 2;
		$dirup   =  '?dir='.@$dirtje[$dirtje2];
	}
	elseif(count($dirtje) == 1)
	{
		$dirup = 'showfiles.php';
	}
	?><table border="1">
	<tr><td>Naam</td><td>Grootte</td><td>Laatst gewijzigd</td></tr>
	<tr><td><a href="<?=$dirup;?>">Directory omhoog</a></td><td></td><td></td><?
	if(count($dirs > 0))
	{
		foreach($dirs AS $map)
		{
			echo $map.'
';
		}
	}
	if(count($files) > 0)
	{
		foreach($files AS $bestand)
		{
			echo $bestand.'
';
		}
	} ?></table<?
	closedir($handle);
}
else
{
	echo 'Map bestaat niet. <a href="'.$_SERVER['PHP_SELF'].'">Terug naar de beginpagina.</a>';
}
?>
</body>
</html>
 
Eh, dude..

Hij wilt het via FTP doen, waarschijnlijk omdat de nummers niet op de lokale computer staan.

En die filebrowser, werkt niet op remote computers..

Dus..

En nu wel iets handigs:
Als je de loop nou in een functie plaatst, dat telkens wordt uitgevoert als er een map geopent wordt.

Ja, lees die zin nog maar 'n paar keer :D
 
Laatst bewerkt:
Dankjewel allemaal! Het lukt nu steeds beter en ik kom er nu wel uit;)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan