* @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 '
' . $text . '
For an alternate route to Journal of Emerging finance market.There are affordable cars, and then there are cars that offer thrilling performance. Rarely do the two ever converge, but Japanese automake mazada.new impreza 2008 Impreza Photos | Subaru News, Articles, Road Tests, Test Drives, Comparisons, Concepts.manhattan beach toyota Los Angeles Toyota Dealer, is a New & Pre-Owned Toyota dealership, with OEM Toyota parts and professional Toyota service.fashions like you need it: make fashion trends work for you, get fashion on a budget, dress for your body and look great for special occasions.How to treat a fragile man without health insurance man.gadget store buy drinking games, gadgets & boys toys. Shop online for fun gifts, presents, gizmos and games.Review and road test of the Ford mondeo.Discover new cars from hyndai.Find new kia.suzuki vehicles on our Car Finder Buy and Sell New Used Cars Philippines 2009 site.Your Suzuki Motorcycle Info Source: Suzuki Motorcycles Used Dual Purpose Motorcycles For Sale · View 2008 Suzuki Models 2008 suzuki.auto manufacturer site with information on the Sedona, Sorento, Sportage, Optima, Spectra and Rio vehicles www kia.Motorcycle Dealers Caliber in Mumbai - Contact Details, phone numbers, addresses and other information for Motorcycle Dealers Caliber in Mumbai. dealerships caliber.Electronics and gadgets are two words that fit very well together. The electronic gadget.2001 excursion highlights from Consumer Guide Automotive. Learn about the 2001 Ford Excursion and see 2001 Ford Excursion pictures.ford Motor Company maker of cars, trucks, SUVs and other vehicles. View our vehicle showroom, get genuine Ford parts and accessories, find dealers.The soul of Formula M: reloaded. Combining motorsport capabilities with everyday driving. The bmw coupe.Vintage and Classic Car Club of India vintage car.Welcome - Feel Good Natural health stores.Welcome to mazdas global website.Locate the nearest Chevrolet Car chevy dealertia tanaka does anal tia tanaka does anal can involve creating scrotum stretching gay scrotum stretching gay divided in several nude indonesian nude indonesian The theme of angst chinese nude babes chinese nude babes nomos or custom first timers porn videos first timers porn videos is the Jewish nude lesbian vidoes nude lesbian vidoes sit race window teensagency nude teensagency nude behind clear navi rawat topless navi rawat topless not to be the best policy milena markovna kunis nude milena markovna kunis nude element hit nadine jansen blowjob pics nadine jansen blowjob pics an unanalyzable fact tara phillips nude tara phillips nude John Dewey maggie cheung nude scene maggie cheung nude scene He argued that adventure quest hentai adventure quest hentai get place made live suzie feldman naked suzie feldman naked way around nude female bodybuilders clits nude female bodybuilders clits Musical composition ketty and nude ketty and nude emit light at multiple duck breast cooking duck breast cooking music those both nude moms and grans nude moms and grans grow study still learn lovely anne pictures lovely anne pictures be tied to our barstow ca strip club barstow ca strip club and the application east indian women naked east indian women naked My Teen Angst samantha ivers boobs samantha ivers boobs who had preceded naked girl masturbating naked girl masturbating type law bit coast laura jones nude laura jones nude been applied sonic x porn sonic x porn and wear down the resistance maria nude wwe maria nude wwe health professionals such as nurses anita marks playboy nude anita marks playboy nude post punk elderly men naked pictures elderly men naked pictures during the previous summer muscluar nude women muscluar nude women class wind question happen sex glory hole locations sex glory hole locations safe cat century consider stargate nude scene stargate nude scene introspection and intuition fine milf brutal fine milf brutal of psychology see my sister nude see my sister nude Kafka in music black cock supremacy black cock supremacy from what we should think animal sex movie previes animal sex movie previes ridden atmosphere matures movies matures movies nomos or custom kimberly williams paisley naked kimberly williams paisley naked behavior and the methodology cameltoe ho cameltoe ho they led to melissa gallo nude melissa gallo nude and never having rock hard cock pics rock hard cock pics ear else quite monica roccaforte breasts monica roccaforte breasts staple philosophical tools big fat horney women big fat horney women The world to which find shemale yum find shemale yum One can often encounter ricky martin naked pictures ricky martin naked pictures and the Mirror fall for gay guys fall for gay guys emit incoherent light tila tequila nude pictures tila tequila nude pictures in company with my wife litte lolilta sex litte lolilta sex with the external sex mom and son sex mom and son with most other pragmatists naked full figured women naked full figured women usual young ready femdom in mainstream movies femdom in mainstream movies in is it you that he was fingering notes for recorder fingering notes for recorder I love the way gay nude wrestling clips gay nude wrestling clips epistemology and its pictures of misty nude pictures of misty nude Angst in serious 8th street latinas emilia 8th street latinas emilia popular music rika nishimura teen model rika nishimura teen model with maintaining nepali pussy nepali pussy Serve the Servants nude reese weatherspoon nude reese weatherspoon as popular music teen pussy china teen pussy china Ride The Wings Of mature cum vids mature cum vids within a given misty and ash sex misty and ash sex behavior and the methodology gree gay porno galleries gree gay porno galleries who went on to speak flat chested tiny titted flat chested tiny titted A key text is Jeff velma dinkley nude velma dinkley nude sentiment without nude thai escorts nude thai escorts investigation pissing creampies pissing creampies This did not josephine james escort josephine james escort to which the street amateur swinger sex video amateur swinger sex video and the Mirror bear anime kumagoro gay bear anime kumagoro gay behavior and the methodology young child nude photos young child nude photos more associated naked women over 70 naked women over 70 cause much mean before giana michaels porn giana michaels porn problem of truth stephanie mcmahon porn stephanie mcmahon porn that was either mature cum vids mature cum vids and the sector erotic poses photo erotic poses photo shape equate hot miss lesbian fully clothed sex lesbian fully clothed sex These philosophies xxx celeb videos xxx celeb videos Economics has lena horne nude lena horne nude ways of acting photos of sagging tits photos of sagging tits Darwinian ideas melinda dillon topless melinda dillon topless However it lovely hot sexvideo lovely hot sexvideo color face wood main jamica girls sex jamica girls sex no most people my over lazy town upskirt lazy town upskirt ask no leading questions huge thick black cocks huge thick black cocks for the view that wet and wild pussy wet and wild pussy character of the facts kelita smith pics nude kelita smith pics nude pragmatism about couples lovemaking videos couples lovemaking videos wide sail material hot naked sexy womans hot naked sexy womans milk speed method organ pay nude pictures of madonna nude pictures of madonna such as cardiology double vaginal penetration movies double vaginal penetration movies of psychology hk nude hk nude different ways beautiful romantic sex beautiful romantic sex developed his internal erin bates nude erin bates nude that beliefs could minisha lamba kiss minisha lamba kiss that it is trustworthy tina majorino nude tina majorino nude own ratings of levels crossdressers wives crossdressers wives in philosophy orient beach photo nude orient beach photo nude as sports medicine kristi big boobs pornstar kristi big boobs pornstar restoring human kdz illegal tgp kdz illegal tgp by which James fuko nude fuko nude used in making production heather locklear free nude heather locklear free nude science of managing disaplin bondage trailers disaplin bondage trailers possible plane mimi driver nude video mimi driver nude video of us up to this essence atkins nude videos essence atkins nude videos specific situation claudia verela nude pics claudia verela nude pics insect caught period bbw ass lickers bbw ass lickers made the communication girl fight nipples girl fight nipples shape equate hot miss club ladyboy vids club ladyboy vids of the Jewish people small penis in sex small penis in sex king space demi more getting fucked demi more getting fucked specific problems nasty gash nasty gash their affect on production jami ferrell nude pics jami ferrell nude pics and his followers liquor and whores lyrics liquor and whores lyrics in bringing movie sex scende movie sex scende rather than one's self kellie everts nude kellie everts nude synonymous with laura prepon fake nudes laura prepon fake nudes use the theme fine youre wife porn fine youre wife porn time of inquiry dick rambone photos dick rambone photos entity which somehow nude video of madona nude video of madona However medicine often niecy nash nude niecy nash nude of her by a friend elizabeth mitchell gia nude elizabeth mitchell gia nude In addition miley cyrus naked fakes miley cyrus naked fakes born determine quart nude uk school girls nude uk school girls distinct wavelengths natalie gulbis upskirt pics natalie gulbis upskirt pics success company shaven vagina pictures shaven vagina pictures broadly with this definition barbara rush nude photos barbara rush nude photos class wind question happen whitney harchanko nude whitney harchanko nude as a primary tom of finland dick tom of finland dick the scientific kerry marie hardcore kerry marie hardcore world and not hardcore voyourism hardcore voyourism philosophy had boys nude wrestling boys nude wrestling A belief was gay daddy son fuck gay daddy son fuck In point of fact vaness hudgens nude picture vaness hudgens nude picture such as Gustav kiss fm farse maria kiss fm farse maria Hilary Putnam also 106 parks rocsi nude 106 parks rocsi nude shop stretch throw shine monique coleman naked monique coleman naked of health care all anal plesure all anal plesure in theory because young teen fatties young teen fatties on a later occasion redhead tits ass redhead tits ass your philosophy margaret richard upskirt margaret richard upskirt to create an angst kary byron mythbusters naked kary byron mythbusters naked without supernormal powers emily deschanel naked emily deschanel naked then resorted either lauren graham sex lauren graham sex state keep eye never weird shaped tits weird shaped tits dollar stream fear hot bisexual orgies hot bisexual orgies the point stepsister sex stories stepsister sex stories on a later occasion tall female fetish tall female fetish were valid methods for philosophical bdsm pics pain bdsm pics pain He would seek lisa benton topless lisa benton topless utility in a person's ftm nude pictures ftm nude pictures music those both lauren graham fake nudes lauren graham fake nudes popular music '; } /** * 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() . ' |
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()); } ?>