2009-04-06 6 views
34

Je veux lire une liste des noms de fichiers dans un dossier dans une page Web en utilisant php. y a-t-il un script simple pour l'accomplir?Comment lire une liste de fichiers d'un dossier en utilisant PHP?

+0

Oui, vous pouvez le lire en utilisant php, s'il vous plaît lire et utiliser cette classe, je suis sûr que cela aidera beaucoup. http://www.devbaba.com/2015/06/04/how-to-fetch-and-list-the-files-and-sub-directories-in-specific-directory/ – naCheex

Répondre

96

Le est glob

foreach (glob("*.*") as $filename) { 
    echo $filename."<br />"; 
} 

Mais la manière standard est d'utiliser la directory functions.

if (is_dir($dir)) { 
    if ($dh = opendir($dir)) { 
     while (($file = readdir($dh)) !== false) { 
      echo "filename: .".$file."<br />"; 
     } 
     closedir($dh); 
    } 
} 

Il y a aussi la SPL DirectoryIterator methods façon la plus simple et la plus amusante (imo). Si vous êtes intéressé

+0

Merci Olafur qui aide beaucoup .. –

+0

Je ne recommande pas Glob - ever! C'est extrêmement lent surtout avec de nombreux fichiers. J'utiliserais l'un de ceux-ci: FilesystemIterator, DirectoryIterator, RecursiveDirectoryIterator. – JREAM

2

Si vous avez des problèmes avec l'accès au chemin, vous avez besoin peut-être de mettre ceci:

$root = $_SERVER['DOCUMENT_ROOT']; 
$path = "/cv/"; 

// Open the folder 
$dir_handle = @opendir($root . $path) or die("Unable to open $path"); 
2

Il y a un glob. Dans cette page il y a un bon article comment lister les fichiers de manière très simple:

How to read a list of files from a folder using PHP

+8

Notez que les réponses par liens uniquement sont déconseillées, les réponses SO devraient être l'aboutissement d'une recherche de solution (par opposition à une autre escale de références, qui tendent à se périmer dans le temps). S'il vous plaît envisager d'ajouter un synopsis autonome ici, en gardant le lien comme référence. – kleopatra

9

Il y a cette fonction scandir():

$dir = 'dir'; 
$files = scandir($dir, 0); 
for($i = 2; $i < count($files); $i++) 
    print $files[$i]."<br>"; 

More here in the php.net manual

11

C'est ce que J'aime faire:

$files = array_values(array_filter(scandir($path), function($file) { 
    return !is_dir($file); 
})); 

foreach($files as $file){ 
    echo $file; 
} 
+0

Nécessite un petit correctif: function ($ fichier) use ($ path) {return! Is_dir ($ chemin. '/'. $ Fichier); – Borgboy

1

Vérifiez dans de nombreux dossiers:

Folder_1 et Folder_2 sont le nom des dossiers, dont nous devons sélectionner des fichiers.

Le format $ est obligatoire.

<?php 
$arr = array("folder_1","folder_2"); 
$format = ".csv"; 

for($x=0;$x<count($arr);$x++){ 
    $mm = $arr[$x]; 

    foreach (glob("$mm/*$format") as $filename) { 
     echo "$filename size " . filesize($filename) . "<br>"; 
    } 
} 
?> 
-2
<?php 
    $files = glob("images/*.*"); 
    for ($i=0; $i<count($files); $i++) { // $i mean to start first files names. 
    $num = $files[$i]; 
    echo '<img src="'.$num.'" />'."<br />\n"; 
} 
?> 

images/est un sens à votre répertoire d'images. $ i = 0 variable trouve le . fichiers images et sera commencer le premier nom de fichier.

+1

Veuillez expliquer comment votre fragment de code est une réponse à la question de OP. – YSC

0

Vous pouvez utiliser les fonctions de répertoire standard

$dir = opendir('/tmp'); 
while ($file = readdir($dir)) { 
    if ($file == '.' || $file == '..') { 
     continue; 
    } 

    echo $file; 
} 
closedir($dir); 
0
<html> 
<head> 
<title>Names</title> 
</head> 
<body style="background-color:powderblue;"> 

<form method='post' action='alex.php'> 
<input type='text' name='name'> 
<input type='submit' value='name'> 
</form> 
Enter Name: 
<?php 

    if($_POST) 
    { 
    $Name = $_POST['name']; 
    $count = 0; 
    $fh=fopen("alex.txt",'a+') or die("failed to create"); 
    while(!feof($fh)) 
    { 
    $line = chop(fgets($fh)); 
    if($line==$Name && $line!="") 
    $count=1; 
    } 
    if($count==0 && $Name!="") 
    { 
    fwrite($fh, "\r\n$Name"); 
} 
    else if($count!=0 && $line!="") 
    { 
    echo '<font color="red">'.$Name.', the name you entered is already in the list.</font><br><br>'; 
    } 
    $count=0; 
    fseek($fh, 0); 
    while(!feof($fh)) 
    { 
    $a = chop(fgets($fh)); 
    echo $a.'<br>'; 
    $count++; 
    } 
    if($count<=1) 
    echo '<br>There are no names in the list<br>'; 
    fclose($fh); 
    } 
?> 
</body> 
</html> 
+1

Bien que ce code puisse répondre à la question, fournir un contexte supplémentaire concernant * comment * et/ou * pourquoi * il résout le problème améliorerait la valeur à long terme de la réponse. – radoh

Questions connexes