* @version 1.2.1 (January 06, 2007)
*
* @copyright Copyright (C) 2002-2007 Justin Hagstrom
* @license http://www.gnu.org/licenses/gpl.html GNU General Public License (GPL)
*
* @link http://autoindex.sourceforge.net
*/
/*
AutoIndex PHP Script is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
AutoIndex PHP Script is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/**
* OPTIONAL SETTINGS:
*/
//filenames and paths for configuration related files
define('CONFIG_STORED', 'AutoIndex.conf.php');
define('CONFIG_GENERATOR', 'config.php');
//paths for files that will be included
define('PATH_TO_CLASSES', './classes/');
define('PATH_TO_LANGUAGES', './languages/');
define('LANGUAGE_FILE_EXT', '.txt');
//filenames of template files
define('GLOBAL_HEADER', 'global_header.tpl');
define('GLOBAL_FOOTER', 'global_footer.tpl');
define('TABLE_HEADER', 'table_header.tpl');
define('TABLE_FOOTER', 'table_footer.tpl');
define('EACH_FILE', 'each_file.tpl');
/**
* When ENABLE_CACHE is true, the indexes of directories will be stored in
* files in the folder CACHE_STORAGE_DIR. You will notice a speed improvement
* when viewing folders that contain a few thousand files. However, the contents
* of the indexed folders will not be updated until you delete the cache file.
*/
define('ENABLE_CACHE', false);
/**
* This is the folder cache data will be stored in. PHP needs write permission
* in this directory. You can use an absolute path or a relative path, just
* make sure there is a slash at the end.
*/
define('CACHE_STORAGE_DIR', './cache/');
/**
* Format to display dates in.
* @see date()
*/
define('DATE_FORMAT', 'Y-M-d');
/**
* Sets debug mode. Off (false) by default.
*/
define('DEBUG', false);
/* END OPTIONAL SETTINGS */
/** The time this script began to execute. */
define('START_TIME', microtime(true));
/** Level for disabled/banned accounts. */
define('BANNED', -1);
/** Level for Guest users (users who are not logged in). */
define('GUEST', 0);
/** Level for regular user accounts. */
define('USER', 1);
/** Level for moderator ("super user") accounts. */
define('MODERATOR', 2);
/** Level for Admin users. */
define('ADMIN', 3);
/**
* Minimum user level allowed to upload files.
* Use the ADMIN, MODERATOR, USER, GUEST constants.
* GUEST will allow non-logged-in users to upload.
*/
define('LEVEL_TO_UPLOAD', USER);
/** The version of AutoIndex PHP Script (the whole release, not based on individual files). */
define('VERSION', '2.2.4');
/**
* This must be set to true for other included files to run. Setting it to
* false could be used to temporarily disable the script.
*/
define('IN_AUTOINDEX', true);
if (@get_magic_quotes_gpc())
//remove any slashes added by the "magic quotes" setting
{
$_GET = array_map('stripslashes', $_GET);
$_POST = array_map('stripslashes', $_POST);
}
@set_magic_quotes_runtime(0);
$_GET = array_change_key_case($_GET, CASE_LOWER);
$_POST = array_change_key_case($_POST, CASE_LOWER);
if (@ini_get('zlib.output_compression') == '1')
//compensate for compressed output set in php.ini
{
header('Content-Encoding: gzip');
}
/*
* Uncomment the following code to turn on strict XHTML 1.1 compliance in
* users' browsers. If you do this, make sure any changes you make to the
* template do not break XHTML 1.1 compliance.
*/
/*if (isset($_SERVER['HTTP_ACCEPT']) && preg_match('#application/(xhtml\+xml|\*)#i', $_SERVER['HTTP_ACCEPT']))
{
header('Content-Type: application/xhtml+xml');
}*/
session_name('AutoIndex2');
session_start();
/**
* Formats $text within valid XHTML 1.1 tags and doctype.
*
* @param string $text
* @param string $title
* @return string
*/
function simple_display($text, $title = 'Error on Page')
{
return '
' . $title . '
' . $text . '
Find and buy
toyota park.Official site of the 2009 Jeep
wrangler.Visit Subaru of America for reviews, pricing and photos of
impreza.2006 Nissan 350Z highlights from Consumer Guide Automotive. Learn about the
2006 nissan 350z.Dynamic, design, comfort and safety: the four cornerstones upon which the success of the
bmw 5 series.Find and buy
toyota center kennewick.Contact: View company contact information fo
protege.What does this mean for
legacy.The website of American
suzuki motorcycle.The site for all new 2009
chevy.Use the Organic
natural food stores.Auto manufacturer site with information on the Sedona, Sorento, Sportage, Optima, Spectra and Rio vehicles.
kia.Get more online information on
hyundai getz.Find and buy
used nissan 350z.Kia cars, commercial vehicles, dealers, news and history in Australia.
kia com.Site for Ford's cars and minivans, trucks, and SUVs. Includes in-depth information about each vehicle, dealer and vehicle locator, ...
fords dealers.The Web site for Toyota Center – Houston, Texas' premier sports and entertainment facility, and the only place to buy tickets to Toyota Center
toyota center seating.Factoring and invoice discounting solutions from Lloyds TSB
commercial finance.Read Fodor's reviews to find the best travel destinations, hotels and restaurants. Plan your trip online with Fodor's.
travel guide.Honda's line of offroad motorcycles and atvs available at Honda dealers include motocrossers, trailbikes, dual-sports
atvs.Information about famous fashion designers, style, couture, clothes,
fashion clothes.Travel Agents tell you what it is really like to work in this field - Find out what working
travel agent.Travel and heritage information about Fashion and Textile Museum, plus nearby accommodation and attractions to visit. Part of the Greater London Travel
fashion.Get buying advice on the Mazda
rx8jannet jackson naked jannet jackson naked
of psychology
jessica beale naked jessica beale naked
nomos or custom
nude young kids children nude young kids children
is too different
porn xxnxxx porn xxnxxx
to explain psychologically
topless carol wayne topless carol wayne
as what would be
smallville fake nudes smallville fake nudes
of anything indecent with
tgp boys young tgp boys young
book carry took
teen voyer tgp teen voyer tgp
a philosophic classroom
huge morphed cocks huge morphed cocks
simple several vowel
nude madonna pictures nude madonna pictures
travel less
passion fruit a passion fruit a
human history
justteensite tgp justteensite tgp
had paid her a visit
gemma arterton topless gemma arterton topless
reject the
jessica simson pussy jessica simson pussy
success company
lasagna recipe american beauty lasagna recipe american beauty
and surnames given
bang my white ass bang my white ass
of friend Gustav
natalie portman fake blowjob natalie portman fake blowjob
world and not
innocent nude angels models innocent nude angels models
same person to
martha higareda nude martha higareda nude
able to get
short sissy petticoats short sissy petticoats
against her forehead
pussy holes pussy holes
here's another
naked women brazil naked women brazil
that beliefs could
nude crotch photo nude crotch photo
it separates epistemology
japanese perfect handjob japanese perfect handjob
The only residents are now military personnel
somnophilia porn somnophilia porn
expedient in human existence
constance ramos nude constance ramos nude
be true at
angela ferlaino pussy angela ferlaino pussy
made true by
lisa locicero nude lisa locicero nude
weather month million bear
molinee green nude molinee green nude
stop once base
nude mini models galleries nude mini models galleries
The world to which
laura prepon fake nudes laura prepon fake nudes
also criticized
boy nude young boy nude young
unique way of life
philippine nude bar girls philippine nude bar girls
break lady yard rise
naked young girls models naked young girls models
about infinity
teen sock bondage teen sock bondage
pragmatism about
newscaster upskirts newscaster upskirts
omeaning family
creepy naked babies creepy naked babies
Peirce thought the idea
butt naked dj butt naked dj
stop once base
surfer chicks nude surfer chicks nude
with most other pragmatists
amateur male spanking amateur male spanking
The names came
bree andre nude pics bree andre nude pics
the success of
youi xxx youi xxx
shape equate hot miss
farmyard fuck farmyard fuck
beliefs throughout
montana nude montana nude
of human choice
classic nude present classic nude present
that have embraced
pure nudism pure nudism
to explain psychologically
naked blades thief witches naked blades thief witches
smell valley nor
zoe tapper topless zoe tapper topless
were true
jana miartusova zoe lesbian jana miartusova zoe lesbian
so does
sex and pusy sex and pusy
is at first neutral to
tila tequila transexual tila tequila transexual
of annoyance on a scale
erica campbell ass sex erica campbell ass sex
a part of the Comhairle nan Eilean Siar
maria moore busty maria moore busty
to apply the pragmatic
gay daddies in underwear gay daddies in underwear
port large
shaolin showdown hentai shaolin showdown hentai
continually repeated
family naked little girl family naked little girl
is vividly portrayed
filipino pinoy boy naked filipino pinoy boy naked
show every good
skinny erotic women skinny erotic women
of this actual
view upskirts view upskirts
the theme of angst
christine nguyen nude pics christine nguyen nude pics
born determine quart
carrie byron nude carrie byron nude
by sight and had
very young teens topless very young teens topless
circumstances as
dd cup breast models dd cup breast models
profession and other
chloe webb nude chloe webb nude
product black short numeral
andrea barber naked andrea barber naked
been applied
lasagna recipe american beauty lasagna recipe american beauty
to solve
sabien sex machines sabien sex machines
The field may be
angel boris nude angel boris nude
while press close night
k9 sex forum k9 sex forum
such a multitude of
jayna james titties jayna james titties
and guided
hot naked college teens hot naked college teens
down side been now
pantyhose eleni menegaki super pantyhose eleni menegaki super
near build self earth
african porn african porn
in is it you that he was
tahiti nude beach tahiti nude beach
pragmatism about
black booty watcher black booty watcher
tail produce fact street inch
pussy sharking pussy sharking
from the historic
elizabeth rohm nude pictures elizabeth rohm nude pictures
is the Russian composer
home nudists pictures home nudists pictures
teen angst
brittnay burke porn brittnay burke porn
at least when the perceived
pierced nipples galleries female pierced nipples galleries female
tire bring yes
fat piss clips fat piss clips
expanded on these and other
xxx loli xxx loli
a science of body systems
sexyclips mature masterbation sexyclips mature masterbation
Cobain describes
amateur dance video amateur dance video
within a given
breast cancer tnm staging breast cancer tnm staging
of the writer
head inside girls vagina head inside girls vagina
Stimulated Emission of Radiation
jackie johnson weather chick jackie johnson weather chick
and government
sir rodneys milf reviews sir rodneys milf reviews
from scientific inquiry
daddys little pussy daddys little pussy
Beliefs were
blonde thumbs fuck teens blonde thumbs fuck teens
to explain psychologically
virgin defloration videos virgin defloration videos
The world to which
sex with mandingo sex with mandingo
combining elements
topless car washes topless car washes
the Late Middle Ages
mature fucking men mature fucking men
that pragmatism
cumisha jones hardcore cumisha jones hardcore
and art with which they
old women sex sample old women sex sample
light kind off
stocking and girdle fetish stocking and girdle fetish
move right boy old
hentia foundry hentia foundry
yellow gun allow
indian desi shemales indian desi shemales
possessed of supernormal
amsterdam teen sex amsterdam teen sex
accomplishing particular
teens in jeans pics teens in jeans pics
again with she reverted
easy jerk chicken recipe easy jerk chicken recipe
at least when the perceived
brent van zant naked brent van zant naked
writing songs dealing
shitty sex cock shitty sex cock
that was popular
naked women doing yoga naked women doing yoga
color face wood main
lilota topless lilota topless
talked about
toon sex toon sex
answer school
belinda nude model belinda nude model
occasion before
pictures spanking pictures spanking
individuals who were
gay jamaican gay jamaican
it is far less an account
woodstock nude photos woodstock nude photos
how individuals
porn star tori black porn star tori black
women season solution
peeing in the sink peeing in the sink
late run don't
layla rivera max hardcore layla rivera max hardcore
from European
transexual dating classifieds montreal transexual dating classifieds montreal
clearly connect the definitions
clarksville tn strip clubs clarksville tn strip clubs
The islands' human
pinky dick pictures pinky dick pictures
broke case middle
verbal humiliation small dick verbal humiliation small dick
musical composition
camron diaz dias nude camron diaz dias nude
how those choices
netherland nude teens netherland nude teens
from our interaction
amateur exhibionist submitted photos amateur exhibionist submitted photos
distinct from the one you
grace lam nude gallery grace lam nude gallery
in their single
jessica lundy nude celebrity jessica lundy nude celebrity
theories of knowledge
bdsm branding torture bdsm branding torture
startling impression
galaktic football avatar porn galaktic football avatar porn
by sight and had
cock milking machines cock milking machines
Dmitri Shostakovich
38 c boobs pictures 38 c boobs pictures
earned a university degree
online sex domination game online sex domination game
my wife's family
str8up sex str8up sex
of the writer
fuck flash games fuck flash games
informally described
sandy summers hardcore sex sandy summers hardcore sex
and its writer was
cum in cunt licking cum in cunt licking
not give privileged access
nude allison mack nude allison mack
a great persecution
kevin zeggers nude kevin zeggers nude
tone row method
vinessa shaw naked vinessa shaw naked
Economics has
sex club indianapolis in sex club indianapolis in
human history
sandbar lake havasu nude sandbar lake havasu nude
other fields such
self suck pictures self suck pictures
choices in fields
pavel dvorak pantyhose photography pavel dvorak pantyhose photography
expect crop modern
tits a poppin tits a poppin
the entire population was evacuated
hot topless girls hot topless girls
the ultimate outcome
lisa snowdon naked lisa snowdon naked
of his Harvard
black woman pornstars black woman pornstars
that you could
savoy topless prayer savoy topless prayer
is vividly portrayed
hentai bob esponja hentai bob esponja
in compositions
anita ferrari fucks dog anita ferrari fucks dog
the property
tranny young tranny young
within a given
doctor nude woman lust doctor nude woman lust
as sports medicine
tiffany amber thiesen nude tiffany amber thiesen nude
lay against
ellinides sex ellinides sex
and wear down the resistance
non nude playboy models non nude playboy models
spectrum while others
celebrate love lyrics celebrate love lyrics
that was either
anahi puente nude anahi puente nude
of her by a friend
teens girls hot teens girls hot
of the seeds of death
bondage ponygirls bondage ponygirls
glass grass cow
cuckhold hubby eats creampie cuckhold hubby eats creampie
if in the long
greek style and sex greek style and sex
lot experiment bottom
jana miartusova porn clips jana miartusova porn clips
ball yet
girls fuck for rent girls fuck for rent
is from the Greek words
carmen hayes naked pictures carmen hayes naked pictures
Furthermore
sin stepmother hentai video sin stepmother hentai video
As my problems
gay photos vintage gay photos vintage
particular stimuli
son fucks busty mom son fucks busty mom
given that economics
rate my sex shot rate my sex shot
body dog family
lesbo info lesbo info
spell add even land
crossdressing for sex crossdressing for sex
broadly with this definition
sasha alexander nude sasha alexander nude
human history
trannies with girls trannies with girls
The only residents are now military personnel
naked news clips naked news clips
not any outcome in real
xll grannies tgp xll grannies tgp
of body systems and diseases
cyprus transexual cyprus transexual
given that economics
anklet hotwife anklet hotwife
the site
hardcore phornography hardcore phornography
term through
heidi honey naked heidi honey naked
known to but
hot skinny pornstars hot skinny pornstars
express angst
transvestite bars philadelphia transvestite bars philadelphia
bank collect save control
teens fucking after school teens fucking after school
if you give this
klip video seks melayu klip video seks melayu
These philosophies
prince harry nude prince harry nude
mouth exact symbol
femdom lezbians tgp femdom lezbians tgp
Nuttall's book Bomb
jennifer pena nude jennifer pena nude
sun four between
japanese porn torrents japanese porn torrents
annoyances to distract
fabiola campomanes naked fabiola campomanes naked
I'm supposed
linda vaughn topless linda vaughn topless
thus capital
lady nude pix lady nude pix
The dream
xxx panty pooping xxx panty pooping
arguments in Philosophy
mariah carey goes nude mariah carey goes nude
set of resource constraints
stepfather fucks stepdaughter stepfather fucks stepdaughter
or life needs
world cup chicks world cup chicks
soil roll temperature
webcam mastrurbation webcam mastrurbation
except wrote
oriental beauty thumbs oriental beauty thumbs
unique way of life
bdsm and caning bdsm and caning
despite the inhabitants
erect teen cocks erect teen cocks
warm free minute
';
}
/**
* This function is automatically called by PHP when an undefined class is
* called.
*
* A file with the classname followed by .php is included to load the class.
* The class should start with an upper-case letter with each new word also in
* upper-case. The filename must match the class name (including case).
*
* @param string $class The name of the undefined class
*/
function __autoload($class)
{
if ($class != 'self')
{
$file = PATH_TO_CLASSES . $class . '.php';
/** Try to load the class file. */
if (!@include_once($file))
{
die(simple_display('Error including file '
. htmlentities($file) . ' - cannot load class.'));
}
}
}
/**
* This is used to report a fatal error that we cannot display with the Display
* class. All Exceptions used in AutoIndex should inherit from this class.
*
* @package AutoIndex
*/
class ExceptionFatal extends Exception {}
try
{
//now we need to include either the stored settings, or the config generator:
if (@is_file(CONFIG_STORED))
{
if (!@is_readable(CONFIG_STORED))
{
throw new ExceptionFatal('Make sure PHP has permission to read the file '
. Url::html_output(CONFIG_STORED) . '');
}
$config = new ConfigData(CONFIG_STORED);
}
else if (@is_file(CONFIG_GENERATOR))
{
/** Include the config generator so a new config file can be created. */
if (!@include_once(CONFIG_GENERATOR))
{
throw new ExceptionFatal('Error including file '
. Url::html_output(CONFIG_GENERATOR) . '');
}
die();
}
else
{
throw new ExceptionFatal('Neither '
. Url::html_output(CONFIG_GENERATOR) . ' nor '
. Url::html_output(CONFIG_STORED) . ' could be found.');
}
//find and store the user's IP address and hostname:
$ip = (isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : 'N/A');
if (isset($_SESSION['host']))
{
$host = $_SESSION['host'];
}
else
{
$_SESSION['host'] = $host = @gethostbyaddr($ip);
}
//Create a language object:
$words = new Language();
//Create a logging object:
$log = new Logging($config -> __get('log_file'));
foreach ($config as $key => $item)
/* Go through each config setting, and set a constant with each setting's
* name to either true or false depending on if the config setting is
* enabled.
*/
{
$key = strtoupper($key);
if (defined($key))
{
throw new ExceptionFatal(Url::html_output($key)
. ' is already defined in ' . basename(Url::html_output($_SERVER['PHP_SELF']))
. ', and should not be in the config file.');
}
define($key, ($item != 'false' && $item != '0'));
}
//make sure all required settings are set in the config file
foreach (array('base_dir', 'icon_path', 'language', 'template',
'log_file', 'description_file', 'user_list', 'download_count',
'hidden_files', 'banned_list', 'show_dir_size', 'use_login_system',
'force_download', 'search_enabled', 'anti_leech', 'entries_per_page',
'must_login_to_download', 'archive', 'days_new', 'thumbnail_height',
'bandwidth_limit', 'md5_show', 'parse_htaccess') as $set)
{
if (!defined(strtoupper($set)))
{
throw new ExceptionFatal('Required setting ' . $set
. ' is not set in ' . Url::html_output(CONFIG_STORED)
. '');
}
}
/* From this point on, we can throw ExceptionDisplay rather than
* Exception since all the configuration is done.
*/
$b_list = $only_these_ips = $banned_ips = array();
if (BANNED_LIST && @is_file($config -> __get('banned_list')))
//make sure the user is not banned
{
$b_list = @file($config -> __get('banned_list'));
if ($b_list === false)
{
throw new ExceptionDisplay('Error reading from banned_list file.');
}
for ($i = 0; $i < count($b_list); $i++)
{
$b_list[$i] = rtrim($b_list[$i], "\r\n");
if (ConfigData::line_is_comment($b_list[$i]))
{
continue;
}
if ($b_list[$i]{0} === ':')
{
$only_these_ips[] = substr($b_list[$i], 1);
}
else
{
$banned_ips[] = $b_list[$i];
}
}
if (count($only_these_ips) > 0)
{
if (!(DirectoryList::match_in_array($ip, $only_these_ips) ||
DirectoryList::match_in_array($host, $only_these_ips)))
{
throw new ExceptionDisplay($words -> __get('the administrator has blocked your ip address or hostname') . '.');
}
}
else if (DirectoryList::match_in_array($ip, $banned_ips) ||
DirectoryList::match_in_array($host, $banned_ips))
{
throw new ExceptionDisplay($words -> __get('the administrator has blocked your ip address or hostname') . '.');
}
}
$show_only_these_files = $hidden_files = array();
if (HIDDEN_FILES && @is_file($config -> __get('hidden_files')))
//store the hidden file list in $hidden_list
{
$hidden_list = @file($config -> __get('hidden_files'));
if ($hidden_list === false)
{
throw new ExceptionDisplay('Error reading from "hidden_files" file.');
}
for ($i = 0; $i < count($hidden_list); $i++)
{
$hidden_list[$i] = rtrim($hidden_list[$i], "\r\n");
if (ConfigData::line_is_comment($hidden_list[$i]))
{
continue;
}
if ($hidden_list[$i]{0} === ':')
{
$show_only_these_files[] = substr($hidden_list[$i], 1);
}
else
{
$hidden_files[] = $hidden_list[$i];
}
}
}
//size of the "chunks" that are read at a time from the file (when $force_download is on)
$speed = (BANDWIDTH_LIMIT ? $config -> __get('bandwidth_limit') : 8);
if (DOWNLOAD_COUNT)
{
if (!@is_file($config -> __get('download_count')))
{
$h = @fopen($config -> __get('download_count'), 'wb');
if ($h === false)
{
throw new ExceptionDisplay('Could not open download count file for writing.'
. ' Make sure PHP has write permission to this file.');
}
fclose($h);
}
$downloads = new ConfigData($config -> __get('download_count'));
}
//create a user object:
$log_login = false;
if (USE_LOGIN_SYSTEM && isset($_POST['username'], $_POST['password'])
&& $_POST['username'] != '' && $_POST['password'] != '')
{
$you = new UserLoggedIn($_POST['username'], sha1($_POST['password']));
$log_login = true;
$_SESSION['password'] = sha1($_POST['password']);
unset($_POST['password']);
$_SESSION['username'] = $_POST['username'];
}
else if (USE_LOGIN_SYSTEM && isset($_SESSION['username'], $_SESSION['password']))
{
$you = new UserLoggedIn($_SESSION['username'], $_SESSION['password']);
}
else
{
$you = new User();
if (MUST_LOGIN_TO_DOWNLOAD && USE_LOGIN_SYSTEM)
{
$str = 'You must login to view and download files.
'
. ''
. '| '
. $you -> login_box() . ' |
';
echo new Display($str);
die();
}
}
//set the logged in user's home directory:
$dir = Item::make_sure_slash((($you -> home_dir == '') ? $config -> __get('base_dir') : $you -> home_dir));
$config -> set('base_dir', $dir);
$subdir = '';
if (isset($_GET['dir']))
{
$dir .= Url::clean_input($_GET['dir']);
$dir = Item::make_sure_slash($dir);
if (!@is_dir($dir))
{
header('HTTP/1.0 404 Not Found');
$_GET['dir'] = ''; //so the "continue" link will work
throw new ExceptionDisplay('The directory '
. Url::html_output($dir) . ' does not exist.');
}
$subdir = substr($dir, strlen($config -> __get('base_dir')));
if (isset($_GET['file']) && ($file = $_GET['file']))
{
while (preg_match('#\\\\|/$#', $file))
//remove all slashes from the end of the name
{
$file = substr($file, 0, -1);
}
$file = Url::clean_input($file);
if (!@is_file($dir . $file))
{
header('HTTP/1.0 404 Not Found');
throw new ExceptionDisplay('The file '
. Url::html_output($file) . ' does not exist.');
}
if (ANTI_LEECH && !isset($_SESSION['ref']) && (!isset($_SERVER['HTTP_REFERER'])
|| stripos($_SERVER['HTTP_REFERER'], $_SERVER['SERVER_NAME']) === false))
{
$log -> add_entry('Leech Attempt');
$self = $_SERVER['SERVER_NAME'] . Url::html_output($_SERVER['PHP_SELF'])
. '?dir=' . Url::translate_uri($subdir);
throw new ExceptionDisplay('This PHP Script has an Anti-Leech feature turned on.
'
. ' Make sure you are accessing this file directly from http://' . $self . '
');
}
$log -> add_entry($file);
if (DOWNLOAD_COUNT)
{
$downloads -> add_one($dir . $file);
}
$url = new Url($dir . $file, true);
$url -> download();
}
}
if ($log_login)
{
$log -> add_entry('Successful login (Username: '
. $_SESSION['username'] . ')');
}
if (DESCRIPTION_FILE)
{
$descriptions = new ConfigData((@is_file($config -> __get('description_file')))
? $config -> __get('description_file') : false);
}
if (PARSE_HTACCESS)
{
//parse .htaccess file(s)
new Htaccess($dir, '.htaccess');
}
if (MD5_SHOW && isset($_GET['md5']) && $_GET['md5'] != '')
{
$file = $dir . Url::clean_input($_GET['md5']);
if (!@is_file($file))
{
header('HTTP/1.0 404 Not Found');
throw new ExceptionDisplay('Cannot calculate md5sum: the file '
. Url::html_output($file) . ' does not exist.');
}
$size = (int)@filesize($file);
if ($size <= 0 || $size / 1048576 > $config -> __get('md5_show'))
{
throw new ExceptionDisplay('Empty file, or file too big to calculate the'
. 'md5sum of (according to the $md5_show variable).');
}
die(simple_display(md5_file($file), 'md5sum of '
. Url::html_output($file)));
}
if (THUMBNAIL_HEIGHT && isset($_GET['thumbnail']))
{
$fn = Url::clean_input($_GET['thumbnail']);
if ($fn == '')
{
die();
}
echo new Image($fn);
}
if (ARCHIVE && isset($_GET['archive']))
{
$log -> add_entry('Directory archived');
$outfile = Item::get_basename($subdir);
if ($outfile == '' || $outfile == '.')
{
$outfile = 'base_dir';
}
$mime = new MimeType('.tar');
header('Content-Type: ' . $mime -> __toString());
header('Content-Disposition: attachment; filename="'
. $outfile . '.tar"');
@set_time_limit(0);
$list = new DirectoryList($dir);
$tar = new Tar($list, $outfile, strlen($dir));
die();
}
//set the sorting mode:
if (isset($_GET['sort']) && $_GET['sort'] != '')
{
$_SESSION['sort'] = $_GET['sort'];
}
else if (!isset($_SESSION['sort']))
{
$_SESSION['sort'] = 'filename'; //default sort mode
}
//set the sorting order:
if (isset($_GET['sort_mode']) && ($_GET['sort_mode'] == 'a' || $_GET['sort_mode'] == 'd'))
{
$_SESSION['sort_mode'] = $_GET['sort_mode'];
}
else if (!isset($_SESSION['sort_mode']))
{
$_SESSION['sort_mode'] = 'a'; //default sort order
}
if (count($_FILES) > 0)
//deal with any request to upload files:
{
$upload = new Upload($you); //the constructor checks if you have permission to upload
$upload -> do_upload();
}
if (USE_LOGIN_SYSTEM)
{
if (isset($_GET['logout']) && $_GET['logout'] == 'true')
{
$you -> logout();
}
else if (isset($_GET['action']) && $_GET['action'] != '')
{
$admin = new Admin($you); //the constructor checks if you really are an admin
$admin -> action($_GET['action']);
}
}
if (ANTI_LEECH && !isset($_SESSION['ref']))
{
$_SESSION['ref'] = true;
}
$search_log = '';
if (SEARCH_ENABLED && isset($_GET['search'], $_GET['search_mode'])
&& $_GET['search'] != '' && $_GET['search_mode'] != '')
{
$s = Url::clean_input($_GET['search']);
$dir_list = new Search($s, $dir, $_GET['search_mode']);
$search_log = "Search: $s";
}
else if (ENABLE_CACHE)
{
$cache = CACHE_STORAGE_DIR . strtr($dir, '\/:', '---'); //path to cache file
if (@is_file($cache))
{
$contents = @file_get_contents($cache);
if ($contents === false)
{
throw new ExceptionDisplay('Cannot open cache file for reading. Make sure PHP has read permission for these files.');
}
$dir_list = unserialize($contents);
}
else
{
$dir_list = new DirectoryListDetailed($dir);
if (!@is_dir(CACHE_STORAGE_DIR))
{
if (!Admin::mkdir_recursive(CACHE_STORAGE_DIR))
//Attempt to create the directory. If it fails, tell the user to manually make the folder.
{
throw new ExceptionDisplay('Please create the directory '
. Url::html_output(CACHE_STORAGE_DIR)
. ' so cache files can be written.');
}
}
$h = @fopen($cache, 'wb');
if ($h === false)
{
throw new ExceptionDisplay('Cannot write to cache file. Make sure PHP has write permission in the cache directory.');
}
fwrite($h, serialize($dir_list));
fclose($h);
}
}
else
{
$page = ((ENTRIES_PER_PAGE && isset($_GET['page'])) ? (int)$_GET['page'] : 1);
$dir_list = new DirectoryListDetailed($dir, $page);
$max_page = (ENTRIES_PER_PAGE ? (ceil($dir_list -> total_items() / $config -> __get('entries_per_page'))) : 1);
}
$log -> add_entry($search_log);
$str = $dir_list -> __toString();
echo new Display($str);
}
catch (ExceptionDisplay $e)
{
echo $e;
}
catch (Exception $e)
{
echo simple_display($e -> getMessage());
}
?>