نقطه ویرگول;

هر از گاهی از هر چیزی

هر از گاهی از هر چیزی

آپلود با 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
امیدوارم به دردتون خورده باشه

نظرات  (۸)

۲۰ دی ۸۹ ، ۱۰:۴۹ سیدمرتضا
مرسی محمد جان
عالی بود
کیک‌‌‌‌‌‌‌‌‌‌ِ بسیار خوشمزه‌ای بود !
ممنون
۱۸ مهر ۹۰ ، ۰۹:۵۳ روح الله مزارعی
برای من ارور میده:
Fatal error: Call to undefined method Folder::mkdir() in G:xampphtdocscakephp3appmodelsbehaviorsmeio_upload.php on line 370
دسترسی ایجاد فولدر ندارید
تنظیمات ایجاد فولدر رو false‌کنید و دستی شاخه رو ایجاد کنید
سلام
من مسیر را دستی نوشتم 'dir' => "app/webroot"
و'create_directory' => false
هنگام ذخیره خطای
UploadBehavior Error: The directoryappwebroot does not exist. [APPmodelsbehaviorsmeio_upload.php, line 375]
لطفا راهنمایی کنید.
۰۵ دی ۹۰ ، ۲۳:۴۳ منوچهر بسحاق
با سلام دوست عزیز
من به یک مربی برای تدریس خصوصی کیک نیاز دارم
لطفا راهنمایی بفرمایید ممنون میشم
سلام
واقعا سایت قشنگی دارین.
آموزشتون هم خوب بود..فقط
من یه کد دیگه در مورد آپلود نوشتم واسه پروژه دانشگاهی ... میتونین کمکم کنید؟؟
میخواهم در صفحه درج محصول مشخصات آن در جدولی که از قبل در mysql ساخته ام برود...تا اینجاش درسته و میدونم باید چی کار کرد اما .....
میخوام همراه مشخصات محصول ، تصویر آن محصول را هم مدیر بتواند آپلود کند و در همان جدول آدرس آن تصویر را هم ذخیره کند تا بعدا برای نمایش استفاده شود..
کد مربوط به آپلود را دارم
و در جدول محصول فیلدی بنام تصویر وجود دارد که از نوع varchar گرفتم و در صفحه درج محصول یک دکمه گذاشتم که به صفحه up1.php برود و در آنجا تصویر آپلود شود و در صفحه 8.php با کلیک بر روی یک لینک بازگشت به صفحه درج محصول برگرد...... حالا نمیدونم چگونه کد
$url="image/" . $_FILES["file"]["name"];
که ادرس مربوط به فایل آپلود شده است را به صفحه اضافه کردن محصول برود و پس از آن ، آنرا در جدول محصول و در مشخصه تصویر insert کند؟
یعنی:
میخوام بدونم چجوری باید یک متغییر که در صفحه دیگه(8.php) تعریف شده رو به صفحۀ اضافه کردن محصول ببرم در فیلد تصویر که در جدول محصوله ،، insert کنم؟
ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
up1.php
enctype="multipart/form-data">
UpLoad
نام فایل :
ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ
8.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";
}
?>
ــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــت
میشه لطفا راهنمایی نمایید............ممنون میشم .... واقعا بهش نیاز دارم....
forum.iranphp.org
سوالاتتون رو اینجا بپرسید

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی