لطفا راهنمای کنید
Printable View
لطفا راهنمای کنید
اگر اون سه فیلمی رو که گذاشتم ببینید همه ی این مشکلاتتون حل میشد توش پسوند هارو هم داشت!
سلام.
شما باید ۲ مورد رو (پیدا و) کنترل کنید:
۱. extension (منظور عبارتی که بعد از آخرین . می آید):
شما نام کامل فایل (نام + extension) رو دارید (عنصر name). پس برای پیدا کردن فرمت، کافیه عبارتی که بعد از آخرین . در نام فایل اومده رو پیدا کنید:
[PHP]<?php
$ext = explode(".", $_FILES['file']['name']);
$ext = $ext[ count($ext) - 1 ];
?>[/PHP]۲. نوع فایل (MIMETYPE):
این مورد رو به طور پیشفرض تعریف شده و در عنصر type وجود داره:
[PHP]<?php
$mime = $_FILES['file']['type'];
?>[/PHP]خب، ما الان هر ۲ مورد رو داریم. و حالا باید کنترل کنیم و ببینیم که مشخصات فایل ارسالی کاربر با مشخصات فایل های ارسالی مجاز ما (در اینجا doc,pdf,zip,powerpoint) می خونه یا نه (کد کامل):
[PHP]<?php
$ext = explode(".", $_FILES['file']['name']);
$ext = $ext[ count($ext) - 1 ];
$mime = $_FILES['file']['type'];
/*****/
$valid_mime_doc = array("application/msword", "application/doc", "appl/text", "application/vnd.msword", "application/vnd.ms-word", "application/winword", "application/word", "application/x-msw6", "application/x-msword", "application/vnd.openxmlformats-officedocument.wordprocessingml.document");
$valid_mime_ppt = array("application/vnd.ms-powerpoint", "application/mspowerpoint", "application/ms-powerpoint", "application/mspowerpnt", "application/vnd-mspowerpoint", "application/powerpoint", "application/x-powerpoint", "application/x-m", "application/vnd.openxmlformats-officedocument.presentationml.presentation");
$valid_mime_pdf = array("application/pdf", "application/x-pdf", "application/acrobat", "applications/vnd.pdf", "text/pdf", "text/x-pdf");
$valid_mime_zip = array("application/zip", "application/x-zip", "application/x-zip-compressed", "application/x-compress", "application/x-compressed", "multipart/x-zip");
//$valid_mime_zip[] = "application/octet-stream";
/*****/
$valid_mime = array_merge($valid_mime_doc, $valid_mime_ppt, $valid_mime_pdf, $valid_mime_zip);
$valid_ext = array("doc", "docx", "ppt", "pptx", "pdf", "zip");
if(in_array($ext, $valid_ext) && in_array($mime, $valid_mime)){
//+-+-+-+-+-+-+-+-+-
}
?>[/PHP]
البته ما در اینجا فایل های pptx و docx رو هم مجاز کردیم.
موفق باشید ./.
اگر خواسته باشیم فقط یک نوع فایل(عکس) آپلود کنیم باید بدین صورت نوشت؟؟
[PHP]$valid_mime_image = array("application/jpg", "application/png", "application/gif", "application/bmp", "application/jpeg");
//$valid_mime_zip[] = "application/octet-stream";
/*****/
$valid_mime = array_merge($valid_mime_image);
$valid_ext = array("image");[/PHP]
بله.
البته، extension با mime تفاوت داره. همون طور که گفتم extension تقریبا معادل فرمت فایله. باید ببینید فرمت فایلتون چیه. از اونجایی که شما تصاویر رو مد نظر دارید، extension های مجاز عبارتند از: jpg, png, gif, bmp (و البته jpeg).
کد شما باید به این صورت باشه:
[PHP]$valid_mime_image = array("application/jpg", "application/png", "application/gif", "application/bmp", "application/jpeg");
/*****/
$valid_mime = $valid_mime_image;
$valid_ext = array("jpg", "jpeg", "gif", "png", "bmp"); [/PHP]
البته لیست کامل MIMETYPE های مربوط به این تصاویر رو باید از سایت های مختلف (مثل filext.com) پیدا کنید.
(وقتی یک آرایه (یک نوع فایل) دارید، array_merge نیاز نیست)
موفق باشید ./.
برای دانلود فایل بدین صورت کد را نوشتم
[PHP]$result=mysql_query("select * from `fil` where `id`='".intval($_GET['id'])."'")or die(mysql_error());
if(mysql_num_rows($result)>0 ){
$row=mysql_fetch_assoc($result);
$file=$row['name'];
$type="application/pdf";
$data=file_get_contents("pdf/".$file);
$size=strlen($data);
header("content-disposition:attachment; filename=$file");
header("content-type:$type");
header("content-length:$size");
echo $data; [/PHP]
اما فایلی که دانلود میکنم حجم آن کمتر از حجم واقعی آن میباشد ووقتی آن فایل را باز میکنم این پیغام خطا را نشان میدهد
adobe reader couldnot open it
باتوجه به کد بالا اگر یک فایل از نوع pdf یا........باشد چندین بار انتخاب کنم و روی آپلود کلیک کنم فایل آپلود میشود وبه پوشه upload میره