note 67152 added to ref.filesystem

From: Date: Sun, 04 Jun 2006 06:03:02 +0000
Subject: note 67152 added to ref.filesystem
Groups: php.notes 
Request: Send a blank email to php-notes+get-113176@lists.php.net to get a copy of this message
Little function to sanitize a user supplied file name, and optionally force a file extension: function sanitize_filename($filename, $forceextension="") { /* 1. Remove leading and trailing dots 2. Remove dodgy characters from filename, including spaces and dots except last. 3. Force extension if specified */ $defaultfilename = "none"; $dodgychars = "[^0-9a-zA-z()_-]"; // allow only alphanumeric, underscore, parentheses and hyphen $filename = preg_replace("/^[.]*/","",$filename); // lose any leading dots $filename = preg_replace("/[.]*$/","",$filename); // lose any trailing dots $filename = $filename?$filename:$defaultfilename; // if filename is blank, provide default $lastdotpos=strrpos($filename, "."); // save last dot position $filename = preg_replace("/$dodgychars/","_",$filename); // replace dodgy characters $afterdot = ""; if ($lastdotpos !== false) { // Split into name and extension, if any. $beforedot = substr($filename, 0, $lastdotpos); if ($lastdotpos < (strlen($filename) - 1)) $afterdot = substr($filename, $lastdotpos + 1); } else // no extension $beforedot = $filename; if ($forceextension) $filename = $beforedot . "." . $forceextension; elseif ($afterdot) $filename = $beforedot . "." . $afterdot; else $filename = $beforedot; return $filename; } echo sanitize_filename("..file<>@**()name.ddd.badextension", "extension")."\n"; echo sanitize_filename("..file<>@**()name.extension.ddd")."\n"; echo sanitize_filename("...", "extension")."\n"; echo sanitize_filename("...")."\n"; echo sanitize_filename("filename")."\n"; echo sanitize_filename("filename", "extension")."\n"; echo sanitize_filename(".xyz...xxx..", "extension")."\n"; echo sanitize_filename(".xyz...xxx..", "")."\n"; produces file_____()name_ddd.extension file_____()name_extension.ddd none.extension none filename filename.extension xyz__.extension xyz__.xxx ---- Server IP: 66.163.161.117 Probable Submitter: 84.92.164.25 ---- X-Spam-Status: No, hits=3.1 required=5.0 tests=DATE_MISSING,FROM_NO_LOWER autolearn=no version=2.64 ---- Manual Page -- http://www.php.net/manual/en/ref.filesystem.php Edit -- http://master.php.net/note/edit/67152 Del: integrated -- http://master.php.net/note/delete/67152/integrated Del: useless -- http://master.php.net/note/delete/67152/useless Del: bad code -- http://master.php.net/note/delete/67152/bad+code Del: spam -- http://master.php.net/note/delete/67152/spam Del: non-english -- http://master.php.net/note/delete/67152/non-english Del: in docs -- http://master.php.net/note/delete/67152/in+docs Del: other reasons-- http://master.php.net/note/delete/67152 Reject -- http://master.php.net/note/reject/67152 Search -- http://master.php.net/manage/user-notes.php

« previous php.notes (#113176) next »