البته اصلا شیوه آپلود شما به درستی بررسی کننده Mime/type فایل ها نیست و به سادگی میشود دورش زد و عملا امنیت بسیار پایینی داره این شیوه کنترل پسوند ها.
شما این خط را پیدا کنید:
کد PHP:
$uploadfile = $uploaddir . $id . '.gif';
آن را حذف و جاش این کدها را بزارید:
کد PHP:
$image = getimagesize($_FILES['pic']['tmp_name']);
$file_ext = $image['mime'];
if ($file_ext='image/gif') {
$uploadfile = $uploaddir . $id . '.gif';
}
elseif ($file_ext='application/zip')
{
$uploadfile = $uploaddir . $id . '.zip';
}
elseif ($file_ext='application/x-rar-compressed')
{
$uploadfile = $uploaddir . $id . '.rar';
}
else
{
die('پسوند فایل ها صحیح نمی باشد!');
}
با کد بالا ما اول پسوند فایل را کشف و برابر متغیر file_ext قرار دادیم.
البته شیوه های دیگه ای هم هست برای کشف پسوند، اما این شیوه نه به نصب بود image_gd روی سرور نیاز دارد، و نه تابع مرورگر است (قابل دور زدن به راحتی نیست).
سپس با قیاس type فایل، پسوند مورد نظر را به انتهای نامش اضاف میکنیم.
من براتون 3 تا پسوند را گذاشتم، اگر خواستید می توانید دیگر پسوند ها را نیز مجاز کنید، کافیست شرط جدید برای اون پسوند به کد اضاف کنید، این هم Mime/type های پر کاربرد:
کد PHP:
'txt' => 'text/plain',
'htm' => 'text/html',
'html' => 'text/html',
'php' => 'text/html',
'css' => 'text/css',
'js' => 'application/javascript',
'json' => 'application/json',
'xml' => 'application/xml',
'swf' => 'application/x-shockwave-flash',
'flv' => 'video/x-flv',
// images
'png' => 'image/png',
'jpe' => 'image/jpeg',
'jpeg' => 'image/jpeg',
'jpg' => 'image/jpeg',
'gif' => 'image/gif',
'bmp' => 'image/bmp',
'ico' => 'image/vnd.microsoft.icon',
'tiff' => 'image/tiff',
'tif' => 'image/tiff',
'svg' => 'image/svg+xml',
'svgz' => 'image/svg+xml',
// archives
'zip' => 'application/zip',
'rar' => 'application/x-rar-compressed',
'exe' => 'application/x-msdownload',
'msi' => 'application/x-msdownload',
'cab' => 'application/vnd.ms-cab-compressed',
// audio/video
'mp3' => 'audio/mpeg',
'qt' => 'video/quicktime',
'mov' => 'video/quicktime',
// adobe
'pdf' => 'application/pdf',
'psd' => 'image/vnd.adobe.photoshop',
'ai' => 'application/postscript',
'eps' => 'application/postscript',
'ps' => 'application/postscript',
// ms office
'doc' => 'application/msword',
'rtf' => 'application/rtf',
'xls' => 'application/vnd.ms-excel',
'ppt' => 'application/vnd.ms-powerpoint',
// open office
'odt' => 'application/vnd.oasis.opendocument.text',
'ods' => 'application/vnd.oasis.opendocument.spreadsheet',
البته اگر بیش از 5 مورد خواستید استفاده کنید بهتره از array یا توابع کامل تر بهره ببرید که بیخود اسکریپت سنگین نشود.
یک شرط هم آخرش هست که در صورتی که پسوند جزو موارد تعریف شده شما نبود پیغام خطا نمایش داده شود. می توانید به جای نمایش پیام مثلا کاربر را هدایت کنید به صفحه خطا یا ... .
- - - Updated - - -
امیدوارم کدها جواب دهد، چون اسکریپت کامل شما اینجا نیست، امکان تست نبود.
چون پروژه دانشگاه هست، قسمت دوم درخواست را گذاشتم خودتان با نگاه به کدهای قسمت اول کشف کنید.