[UPHPU] simple??? php function (display an index)

Mac Newbold mac at macnewbold.com
Wed Jul 19 22:41:49 MDT 2006


Today at 9:59pm, Caleb Call said:

> thanks, that got me going, I found some examples.  (This php stuff is all new 
> but great to finally get playing with it).  This is what I have so far, can 
> anyone suggest a better way to do any of it?

> $drop = array("www.", "yourwebsite", ".com/");
> # here you drop the url, ex: www.yourwebsite.com/
> $pickup = array("", "", "");
>
> $folder = str_replace($drop, $pickup, $DirNow);

I was going to ask why you did an array of replacements if replacing the 
URL was what you were after, but then realized that this way it can 
replace individual parts where it finds them, which can be good or bad 
depending on your goal. Here it seems good. Neat trick I'll have to 
remember.

> if ($handle = opendir('.')) {
>  while (false !== ($file = readdir($handle))) {

One option that is even easier IMHO than opendir and readdir is the glob() 
function. foreach (glob(*) as $file) would seem to do exactly what you 
need.

>      if ($file != "." && $file != ".." && $file != "index.php" && $file != 
> "index.html") {

If you want, this can be streamlined:

if (!in_array($file,array(".","..","index.php","index.html"))) {

Of course, you can also put the array outside the call and save it in a 
variable too.

>      	   $file_size = filesize($file);
>      	   $file_size = round(($file_size/1024),0);
>          echo "<a href=$file <br>$file\t\t\t</a>$file_size KB<br>\n";
>      }
>  }
>  closedir($handle);

With glob there's no closedir either.

> is there a way I can display KB on smaller files and MB on larger files?  I 
> would assume a loop, something like this?
>
> if ($file_size >= 1024) {
> 			echo "($file_size/1024) MB";
>          } else {
>          	echo "($file_size) KB";
>          }
>
> it's not working so I know there is something wrong with it, but what???

It's probably printing things like "12983/1024 MB" right? The slash and 
the parentheses will be printed literally inside your double quotes, but 
this might come closer to what you intended:

echo round($file_size/1024)." MB";

In fact, you could replace your whole echo statement like so:

echo "<a href=$file <br>$file\t\t\t</a>".
   ($file_size < 1024 ? "$file_size KB" :
    round($file_size/1024)." MB")."<br>\n";

The ternary operator is kind of like an if statement that returns an 
expression, so ($cond ? $iftrue : $iffalse) saves you a real if statement 
and returns the proper string for you so that it can be echo'd. They're 
extremely handy for setting default values:

$var = (!isset($val) || !$val ? $defaultval : $val);

That works great if $val is something like $_GET['key'] for example.

If you wanted to fancy up your directory index a bit, you can always look 
for things that are images, for example, and show a thumbnail, or even 
turn the directory index script into a very simple gallery script you can 
drop into a directory of images. Or as fungus/Lonnie was suggesting, pass 
a directory name to it and have it show all the images in the folder. The 
way you've written it, it can be pretty generic so you can drop it in just 
about any folder and get an instant directory for it.

With a little bit more work, you could probably turn it into a file 
browser where you'd only need one copy of the script. An .htaccess file 
that specifies the script an ErrorDocument or something might be able to 
help with that.

A simple script like that is also the basis for a pretty list of 
downloadable files within a larger site. Throw a bit more html/css around 
it so it matches the rest of the site, or include it from another page, 
and it's easy to show them a list of files in a directory and let them 
view or download whatever you want them to.

Thanks,
Mac

--
Mac Newbold		MNE - Mac Newbold Enterprises, LLC
mac at macnewbold.com	http://www.macnewbold.com/


More information about the UPHPU mailing list