آپلود با cakephp

۱۳۸۹/۱۰/۲۰

کیک پی اچ پی یکی از فریم ورک های قدرتمند و بسیار ساده ست که خیلی راحت می تونید باهاش سایت هایی رو با معماری MVC بنویسید که به راحتی قابل توسعه هستند. برای آشنایی با این فریم ورک می تونید به این پست مراجعه کنید. یکی از امکاناتی که این فریم ورک به ما می ده استفاده از behavior ها یا رفتارکننده ها هاست…
رفتار کننده ها یا Behaviour جزئی از ساختار کیک هستند که به مدل ضمیمه می شوند . وظیفه ی آنها این است که فعالیت های اتوماتیکی که باید روی اطلاعات ورودی یا خروجی دیتا بیس ها انجام شود را انجام می دهند .

به طور مثال اگر ما بخواهیم هنگامی که تغییری روی یک رکورد از یک جدول اتفاق افتاد در جدولی دیگر روی رکوردی تغییراتی اعمال کنیم ، یا اگر بخواهیم عملیات هایی که روی یک تیبل انجام می شود را در فایلی بصورت Log ذخیره کنیم این قسمت به ما کمک خواهد کرد . البته رفتار کننده ها فواید دیگری هم دارند که در این مثال دو نمونه ساده ذکر گردید .

بدون هیچ حرف اضافی دیگه ای (این قبلی ها همش اضافی بود) می ریم سراغ آپلود عکس با یکی از این رفتارکننده ها به نام MeioUpload. این رفتار کننده به ما این اجازه رو می ده که به راحتی بتونیم برای سایتمون یه بخش آپلود راه اندازی کنیم. برای این کار کافیه آخرین نسخه ی این رفتارکننده رو از اینجا بگیرید و فایل models/behaviors/meio_upload.php رو داخل شاخه ی models/behaviors در پروژه ی خودتون کپی کنید. به همین راحتی :))

حالا برای نمونه ما یه جدول داریم به نام images که می خوایم عکسایی رو که آپلود می کنیم توش ذخیره کنیم. برای ساخت جدول از این دستورها استفاده کنید:

CREATE TABLE `products` (
`id` int(8) unsigned NOT NULL auto_increment,
`name` varchar(255) default NULL,
`description` text default NULL,
`picture` varchar(255) default NULL,
`dir` varchar(255) default NULL,
`mimetype` varchar(255) NULL,
`filesize` int(11) unsigned default NULL,
`created` datetime default NULL,
PRIMARY KEY  (`id`) ) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

این کدها رو در model خودتون اضافه کنید:

var $actsAs = array(
    'MeioUpload' => array(
        'picture' => array(
            'dir' => 'files/images',
            'create_directory' => true,
            'allowed_mime' => array('image/jpeg', 'image/pjpeg', 'image/png'),
            'allowed_ext' => array('.jpg', '.jpeg', '.png'),
            'thumbsizes' => array(
                'small' => array('width'=>100),
                'normal' => array('width'=>200),
                'large' => array('width'=>800),
            ),
            'default' => 'default.jpg',
        )
    )
);

و در فایل add.ctp در شاخه ی view این کد رو هم اضافه کنید:

echo $form->input('picture', array('type' => 'file'));

دقت کنید که وقتی فرم می سازید حتمن type برابر با file باشه. یعنی اینجوری:

Form->create('Image', array('type' => 'file'));?>

حالا برای اینکه thumb هم ساخته بشه از عکس هایی آپلود می کنیم به phpThumb هم نیاز داریم که می تونید از این لینک آخرین نسخه اش رو بگیرید.
وقتی فایل ها رو دانلود کردید محتویات داخل فایل رو در شاخه ای به نام phpThumb در شاخه ی vendors کپی کنید. یعنی به این صورت:

/vendors/phpThumb/{files}

حالا برید به نشانی /images/add و از معجزه ی کیک لذت ببرید :)
برای اطلاعات بیشتر می تونید از این دو لینک استفاده کنید:
http://www.meiocodigo.com/projects/meioupload/
http://cakeforge.org/snippet/detail.php?type=snippet&id=226

امیدوارم به دردتون خورده باشه

8 دیدگاه در “آپلود با cakephp

  1. برای من ارور میده:
    Fatal error: Call to undefined method Folder::mkdir() in G:xampphtdocscakephp3appmodelsbehaviorsmeio_upload.php on line 370

    • دسترسی ایجاد فولدر ندارید
      تنظیمات ایجاد فولدر رو false‌کنید و دستی شاخه رو ایجاد کنید

  2. سلام
    من مسیر را دستی نوشتم ‘dir’ => “app/webroot”
    و’create_directory’ => false
    هنگام ذخیره خطای
    UploadBehavior Error: The directoryappwebroot does not exist. [APPmodelsbehaviorsmeio_upload.php, line 375]
    لطفا راهنمایی کنید.

  3. با سلام دوست عزیز
    من به یک مربی برای تدریس خصوصی کیک نیاز دارم
    لطفا راهنمایی بفرمایید ممنون میشم

  4. سلام
    واقعا سایت قشنگی دارین.
    آموزشتون هم خوب بود..فقط
    من یه کد دیگه در مورد آپلود نوشتم واسه پروژه دانشگاهی … میتونین کمکم کنید؟؟
    میخواهم در صفحه درج محصول مشخصات آن در جدولی که از قبل در mysql ساخته ام برود…تا اینجاش درسته و میدونم باید چی کار کرد اما …..
    میخوام همراه مشخصات محصول ، تصویر آن محصول را هم مدیر بتواند آپلود کند و در همان جدول آدرس آن تصویر را هم ذخیره کند تا بعدا برای نمایش استفاده شود..
    کد مربوط به آپلود را دارم
    و در جدول محصول فیلدی بنام تصویر وجود دارد که از نوع varchar گرفتم و در صفحه درج محصول یک دکمه گذاشتم که به صفحه up1.php برود و در آنجا تصویر آپلود شود و در صفحه ۸٫php با کلیک بر روی یک لینک بازگشت به صفحه درج محصول برگرد…… حالا نمیدونم چگونه کد
    $url=”image/” . $_FILES["file"]["name"];
    که ادرس مربوط به فایل آپلود شده است را به صفحه اضافه کردن محصول برود و پس از آن ، آنرا در جدول محصول و در مشخصه تصویر insert کند؟
    یعنی:
    میخوام بدونم چجوری باید یک متغییر که در صفحه دیگه(۸٫php) تعریف شده رو به صفحۀ اضافه کردن محصول ببرم در فیلد تصویر که در جدول محصوله ،، insert کنم؟
    ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
    up1.php

    enctype=”multipart/form-data”>

    UpLoad

    نام فایل :

    ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
    ۸٫php
    static $url;
    session_start();
    $conn = mysql_connect("localhost","root","");
    $db = mysql_select_db("db_online book fair");

    if ((($_FILES["file"]["type"] == "image/gif")
    || ($_FILES["file"]["type"] == "image/jpeg")
    || ($_FILES["file"]["type"] == "image/pjpeg"))

    && ($_FILES["file"]["size"] 0)
    {

    echo “Return Code: ” . $_FILES["file"]["error"] . “”;
    }

    else
    {

    echo “Upload: ” . $_FILES["file"]["name"] . “”;

    echo “Type: ” . $_FILES["file"]["type"] . “”;

    echo “Size: ” . ($_FILES["file"]["size"] / 1024) . ” Kb”;

    echo “Temp file: ” . $_FILES["file"]["tmp_name"] . “”;

    if (file_exists(“image/” . $_FILES["file"]["name"]))
    {

    echo $_FILES["file"]["name"] . ” already exists. “;
    }

    else
    {

    move_uploaded_file($_FILES["file"]["tmp_name"],

    “image/” . $_FILES["file"]["name"]);

    echo “Stored in: ” . “image/” . $_FILES["file"]["name"];
    $url=”image/” . $_FILES["file"]["name"];
    echo $url;

    }
    }
    }

    else
    {

    echo “Invalid file”;
    }
    ?>
    ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــت
    میشه لطفا راهنمایی نمایید…………ممنون میشم …. واقعا بهش نیاز دارم….

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

شما می‌توانید از این دستورات HTML استفاده کنید: