Revision [14957]

This is an old revision of FileView made by SmaugDragon on 2006-07-23 19:33:18.

 

Last edited by SmaugDragon
Sun, 23 Jul 2006 19:33 UTC [diff]

Download the latest Version
fileview.php action:
The only variable is "location" set to the location of the directory you want to show files from.
save as actions/fileview.php

examples:
{{fileview location="uploads/*.*"}} will show all files in uploads directory
{{fileview location="uploads/*.zip}} will show only zip files in uploads directory
{{fileview location="uploads/pic???.jpg}} will show only jpg files with names like pic000.jpg pic001.jpg etc
{{fileview location="uploads/*/*.*"}} all files in all subdirectorys of uploads !!!

Additionally you can set $md5checksum on or off in the fileview.php file to have md5checksums generated on the fly [off by default].
(Not recomended for large directories or files tested on FreeBSD, Apache Server. I don't know what windows would do leave comment)

Please comment if you find this action helpful It is my first "published" code and I would love to hear back from the community

KNOWN BUGS: file names with spaces ie. "This windows file.zip" will not link correctly.

<?php

#
# Displays a table of specified files from a local directory.
#
#               *** SECURITY NOTICE ***
# Currently this script has the ability to show ANY file on the local system
# I am working on a fix.  I believe that a fix could be made that would only
# show files in the ./uploads/UserName/directory I just have to write it.
#
# Credit:
# This action is derived from a script I wrote to display downloads for php-nuke
# Credit should be given to the author of the files action for the funtion
# bytesToHumanReadableUsage (see below)
#
# @package      Actions
# @name     FileView
#
# @author       {@link http://wikkawiki.org/SmaugDragon SmaugDragon} (first draft)
# @version      0.8
# @since        Wikka 1.1.6.0
#
# @input        Url  $location  optional: the url of the files you want displayed.
#                           wildcards work fine ie.
#               uploads /*/*.* all files in all directories under uploads
#               uploads/ps_*.jpg all jpg files in uploads with names starting with ps_
#              
# @Other Settings   on|off $md5checksum_on off by default set to 1 for md5 checksum of files or 0 for off
#
# @todo     1.) Restrict which files a user can show
#           2.) Files with spaces in the name do not link correctly
#           3.) I have to make files download instead of displaying that should fix 90% of my security worries.
#

/* CSS Info */

echo '<style type="text/css">
table.fv {border:1px solid #000; border-collapse:collapse; font-family:arial,courier,sans-serif; font-size:90%; }
td.fv,th.fv{border:0px solid #000; border-collapse:collapse; padding:5px; }
thead th.fv{text-align:center; background:#9cf; }
tbody th.fv{text-align:center; background:#69c; }
tbody td.fv{text-align:right; background:#DDDDDD; }
#ic{width: 0px;}
#nm{width: 80px; text-align: left; }
#sz{width: 80px; text-align: right; }
#mf{width: 80px; text-align: right; }
#cd{width:120px; text-align:right; font-family:courier; }
</style>'
;

if (!$location) { $location = "*.*"; }      /* if location is not specified show all files in uploads */
$md5checksum_on = 1;                    /* calculate md5 checksums (1 = yes | 0 = no)   */

/* Taken from WikkaWakka actions/files.php */

if (! function_exists('bytesToHumanReadableUsage')) {
        function bytesToHumanReadableUsage($bytes, $precision = 2, $names = '')
        {
           if (!is_numeric($bytes) || $bytes < 0) {
               return false;
           }
for ($level = 0; $bytes >= 1024; $level++) { $bytes /= 1024; }
    switch ($level)
    {
    case 0: $suffix = (isset($names[0])) ? $names[0] : 'Bytes'; break;
    case 1: $suffix = (isset($names[1])) ? $names[1] : 'KB'; break;
    case 2: $suffix = (isset($names[2])) ? $names[2] : 'MB'; break;
    case 3: $suffix = (isset($names[3])) ? $names[3] : 'GB'; break;
    case 4: $suffix = (isset($names[4])) ? $names[4] : 'TB'; break;
    default: $suffix = (isset($names[$level])) ? $names[$level] : ''; break;
    }
if (empty($suffix)) { trigger_error('Unable to find suffix for case ' . $level);
return false;
} return round($bytes, $precision) . ' ' . $suffix;
}
}

/* End of borrowed Code */

echo '<table class="fv" summary="This table lists the files '.$location."\">\n";

/* Comment the next 2 lines to remove the table header.*/

echo '<tr class="fv" ><th class="fv" scope="col">&nbsp;</th><th class="fv" scope="col">File</th><th class="fv" scope="col">Size</th><th class="fv" scope="col">Modified</th>';
if ($md5checksum_on == 1) echo '<th class="fv" scope="col">md5 Checksum</th></tr>'."\n"; else echo "</tr>\n";


foreach (glob($location) as $filename) {$filedesc = end(explode('/', $filename));
    echo '<td class="fv" id="ic">&nbsp;</td>';
    echo '<td class="fv" id="nm"><a href='."$filename>$filedesc</a>";
    echo '<td class="fv" id="sz">'.bytesToHumanReadableUsage(filesize($filename)).'</td>';
    echo '<td class="fv" id="mf">'.date ("m/d/Y", filemtime($filename)).'</td>';
if ($md5checksum_on == 1) echo '<td class="fv" id="cd">'.md5_file($filename).'</td>';
    echo "</tr>\n";
}
echo '</table>';
?>


CategoryUserContributions
There are 7 comments on this page. [Show comments]
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki