Php directory help

thenewprogrammer

New Member
Messages
45
Reaction score
0
Points
0
I am trying to take files from a folder and output them into table under categories "filename", "filetype", "filesize". The script works fine but when it outputs any other file besides basic files such as txt,php,html. When the files are jpg, .zip, etc. it will create error not being able to find the filetype or size. I am new to php so plz point out anything that i should change.

better way to show the error. The files show but it wont say the filetype or filesize correctly unless its basic file

http://likeftp.com/download.php


Code:
<?php
 
// open this directory 
$myDirectory = opendir("./files/photo/");
// get each entry
while($entryName = readdir($myDirectory)) {
 $dirArray[] = $entryName;
}
// close directory
closedir($myDirectory);
// count elements in array
$indexCount = count($dirArray);
Print ("$indexCount files<br>\n");
// sort 'em
sort($dirArray);
// print 'em
print("<TABLE border=1 cellpadding=5 cellspacing=0 class=whitelinks>\n");
print("<TR><TH>Filename</TH><th>Filetype</th><th>Filesize</th></TR>\n");
// loop through the array of files and print them all
for($index=0; $index < $indexCount; $index++) {
        if (substr("$dirArray[$index]", 0, 1) != "."){ // don't list hidden files
  print("<TR><TD><a href=\"/files/photo/$dirArray[$index]\">$dirArray[$index]</a></td>");
  print("<td>");
  print(filetype($dirArray[$index]));
  print("</td>");
  print("<td>");
  print(filesize($dirArray[$index]));
  print("</td>");
  print("</TR>\n");
 }
}
print("</TABLE>\n");
?>
 

misson

Community Paragon
Community Support
Messages
2,572
Reaction score
72
Points
48
The issue isn't file type, it's the path.
Code:
<?php
while($entryName = readdir($myDirectory)) {
 $dirArray[] = $entryName;
}
The values returned by readdir() are file names, not paths...

Code:
  print(filetype($dirArray[$index]));
  print("</td>");
  print("<td>");
  print(filesize($dirArray[$index]));
so when you pass a value from $dirArray to filetype and filesize, you're passing just the name of the file. If there happens to be a file in the current directory with the same name, the call succeeds. You should put the code in a function with the directory path as a parameter.

A foreach loop over $dirArray is simpler than a for loop:
Code:
foreach ($files as $file) {
    if ('.' != $file[0]) {
        ...
    }
}
Note you can also access individual characters in a string by using square brackets.
 
Last edited:
Top