آموزش Codeigniter - جلسه نهم: آپلود فایل
با استفاده از کلاس آپلود فایل میتوانیم فایلهای مورد نظر خود را در سرور آپلود کنیم. علاوه بر این میتوان نوع فایلهای مجاز و نیز حجم مجاز فایلها را برای آپلود شدن تعیین کرد. در ادامه با زومیت همراه باشید تا شما را با روش گام به گام استفاده از کتابخانهی آپلود فایل و قابلیتهای این کتابخانه، آشنا کنیم. بدین طریق میتوانید در صورت نیاز در اپلیکیشنهای تحت وب خود بهراحتی عملیات آپلود فایل را انجام دهید.
ابتدا نرمافزار زمپ را اجرا کرده و سرورهای آپاچی و مایاسکیوال را در حالت فعال قرار دهید. سپس یک پوشهی جدید در پوشهی htdocs نرمافزاری Xampp ساخته و نام آن را به دلخواه خود تعیین کنید. ما نام این پوشه را codei-upload تعیین کردهایم.
حال یک نسخه از فریمورک Codeigniter که در جلسات قبل دانلود کرده بودید را مجددا در این پوشه اکسترکت کنید. همچنین تنظیمات و پیکربندیهای اولیه را طبق آموزشهایی که در جلسات اولیه داده بودیم، انجام دهید تا محیط فریمورک آماده شود.
در مسیر application/view یک فایل جدید به نام Upload_form.php ایجاد کرده و کد زیر را در آن قرار دهید:
Zoomit Codeigniter Tutorial - </span><span class="pln">Upload Form</span><span class="tag"> php echo $error;?> php echo form_open_multipart('upload/do_upload');?> action = "" method = ""> type = "file" name = "userfile" size = "20" /> /> /> type = "submit" value = "upload" /> </form>
در کد بالا با استفاده از دستورات سادهی اچتیامال یک فرم ایجاد کردهایم و البته از کدهای مخصوص فایلهای ویو فریمورک نیز بهره گرفتهایم. با استفاده از کد
php echo $error;?>
خطاهای احتمالی را به کاربر نمایش خواهیم داد. همچنین با استفاده از کد
php echo form_open_multipart('upload/do_upload');?>
همانطور که در جلسات قبل توضیح داده بودیم، یک فرم جدید ایجاد کرده و مسیر ارسال فرم را نیز upload/do_upload تعیین کردهایم. دقت کنید که این فرم از نوع multipart است زیرا برای آپلود فایل نوع فرم باید حتما به این صورت تعریف شود. فرم اصلی نیز شامل یک فیلد از نوع file بوده و نهایتا یک دکمه برای ثبت فرم در نظر گرفتهایم. کاربر با کلیک بر روی فیلد فایل، میتواند فایل مورد نظر خود را برای آپلود انتخاب کند.
حال در مسیر application/view یک فایل جدید به نام Upload_success.php ایجاد کرده و سپس کد زیر را در این فایل قرار دهید:
Zoomit Codeigniter Tutorial - Upload Form</span><span class="tag"> Your file was successfully uploaded! phpforeach ($upload_data as $item => $value):?> php echo $item;?>: php echo $value;?> phpendforeach; ?> php echo anchor('upload', 'Upload Another File!'); ?>
کد بالا فایل ویویی است که پس از موفقیت آمیز بودن آپلود به کاربر نمایش داده خواهد شد. در این فایل ما یک پیام مبنی بر موفق بودن عملیات آپلود نوشتهایم و سپس اطلاعات فایل آپلود شده را با دستور foreach به کاربر نمایش میدهیم.
حال در مسیر application/controllers یک فایل جدید به نام Upload.php ایجاد کرده و سپس کد زیر را در آن قرار دهید:
php class Upload extends CI_Controller { public function __construct() { parent::__construct(); $this->load->helper(array('form', 'url')); } public function index() { $this->load->view('upload_form', array('error' => ' ' )); } public function do_upload() { $config['upload_path'] = './uploads/'; $config['allowed_types'] = 'gif|jpg|png'; $config['max_size'] = 100; $config['max_width'] = 1024; $config['max_height'] = 768; $this->load->library('upload', $config); if ( ! $this->upload->do_upload('userfile')) { $error = array('error' => $this->upload->display_errors()); $this->load->view('upload_form', $error); } else { $data = array('upload_data' => $this->upload->data()); $this->load->view('upload_success', $data); } } } ?>
در این مرحله باید یک پوشهی جدید به نام uploads در ریشهی فریمورک ایجاد کنید. از آنجا که نام پوشهی ما برای این پروژه codei-upload بوده، بنابراین این پوشه ریشهی فریمورک ما خواهد بود و در نتیجه پوشهی uploads را نیز در این محل ایجاد میکنیم. این پوشه فایلهای آپلود شده را نگهداری خواهد کرد و در واقع پس از انجام آپلود، فایلهای ثبت شده در فرم در این محل ذخیره میشوند.
همانطور که میبینید در کد بالا یک متد به نام ()index ایجاد کردهایم و در این متد فایل ویو مربوط به نمایش فرم را فراخوانی کردهایم. علاوه بر این متد دیگری به نام ()do_upload ایجاد کردهایم که پس از ثبت فرم این متد فراخوانی خواهد شد. در این متد تنظیمات مربوط به آپلود را با استفاده از قابلیتهای ارائه شده در فریمورک تعیین کردهایم. در خط
$config['upload_path'] = './uploads/';
مسیر آپلود شدن فایلها را تعیین کردهایم. از آنجا که پوشهی مورد نظر ما برای نگهداری فایلهای آپلود شده uploads نام داشت، بنابراین در کد بالا مقدار upload_path را برابر با نام این پوشه قرار دادهایم.
با استفاده از کد
$config['allowed_types'] = 'gif|jpg|png';
نوع پسوندهای مجاز برای آپلود شدن را تعیین کردهایم. از آنجا که این پروژه فقط برای آپلود تصاویر ایجاد شده بنابراین نوع فایلهای مجاز را gif و jpg و png تعیین کردهایم. همانطور که احتمالا متوجه شدهاید میتوان فایلهای دیگر را با اضافه کردن کاراکتر | و سپس نوشتن نام آن پسوند مورد نظر، به مقادیر فوق اضافه کرد.
با استفاده از کد
$config['max_size'] = 100;
حداکثر حجم مجاز برای فایلی که قرار است آپلود شود را بر حسب کیلوبایت تعیین کردهایم. این ویژگی بسیار کاربردی است چراکه در تمامی پروژهها با استفاده از آن میتوان جلوی سواستفادههای احتمالی کاربران را گرفت. بدین طریق اگر فایلی بیش از ۱۰۰ کیلوبایت حجم داشته باشد، عملیات آپلود انجام نخواهد شد و پیغامی مناسب به کاربر نمایش داده میشود.
با استفاده از دو خط زیر
$config['max_width'] = 1024; $config['max_height'] = 768;
به ترتیب حداکثر عرض و حداکثر طول مجاز برای عکسهایی که قرار است آپلود شوند را تعیین کردهایم.
با استفاده از کد
$this->load->library('upload', $config);
کتابخانهی آپلود را لود کرده و تنظیمات تعیین شده در بالا را که در آرایهی config$ ذخیره شدهاند، به این کتابخانه ارسال میکنیم. بدین طریق به فریمورک Codeigniter میگوییم که کتابخانهی آپلود باید بر اساس این تنظیمات کار کند.
در ادامه نیز با یک دستور شرطی if عملیات آپلود را بررسی میکنیم. اگر آپلود به هر دلیلی با خطا مواجه شود، آن خطا به کاربر نمایش داده خواهد شد و در غیر این صورت (یعنی آپلود به درستی انجام شده است) فایل ویو موفقیت آمیز بودن آپلود که آن را در مراحل قبلی ساخته بودیم، اجرا خواهد شد.
فایل routes.php را در مسیر application/config/routes.php باز کرده و تغییرات زیر را در آن اعمال کنید. بدین منظور باید خط زیر را به انتهای کدهای موجود در این فایل اضافه کنید.
$route['upload'] = 'Upload';
حال اگر تمام مراحل را به درستی انجام داده باشید، پس از اجرای اپلیکیشن خود در مرورگر وب، باید فرم زیر را مشاهده کنید.
از آنجا که پوشهی این پروژه برای ما codei-upload است، پس آدرس این اپلیکیشن در سرور محلی زمپ به صورت زیر خواهد بود:
http://127.0.0.1/codei-upload/index.php/upload
پس از انتخاب یک فایل و کلیک روی دکمهی upload در فرم بالا، عملیات آپلود انجام شده و فایل مورد نظر به پوشهی uploads که آن را در ریشهی فریمورک ایجاد کرده بودیم منتقل خواهد شد و سپس نتیجهی عملیات چیزی مشابه تصویر زیر به کاربر نمایش داده میشود.
اگر سوالی در مورد مباحث مطرح شده در این جلسه دارید آن را از طریق بخش دیدگاهها با زومیت به اشتراک بگذارید.
نظرات