یکی از دردسرهای تست برنامه های phpدر هاست محلی امکان ارسال ایمیل هست. برای حل این مشکل باید تبدیل به میل سرور بشید یا از smtp کمک بگیرید. در این جا نحوه راه اندازی smtp در لینوکس رو آموزش میدم تا راه حلی باشه برای برنامه نویسان phpکه در از سیستم عامل لینوکس(معمولا بر حسب دبیان) استفاده میکنن. در این روش ما ابزار ssmtp رو نصب میکنیم و مقدار sendmail_path رو در فایل php.ini برابر با ssmtp قرار میدیم.
در ابتدا باید ابزار ssmtp رو نصب کنید:
sudo apt-get install ssmtp
برای کانفیگ ssmtp به مسیر زیر برید و اون رو برای کافیگ باز کنیدبعد از باز کردن فایل مقدارهای رو بصورت زیر تغییر بدید البته بعضی متغرها مثل root درش وجود داره که باید مقدار رو جلوش قرار بدید و بعضی متغیرها رو هم باید جدید بنویسید در هر صورت فایل فوق رو بصورت زیر تغییر بدیدsudo nano /etc/ssmtp/ssmtp.conf
# # Config file for sSMTP sendmail # # The person who gets all mail for userids < 1000 # Make this empty to disable rewriting. root=your-full-gmail-address # The place where the mail goes. The actual machine name is required no # MX records are consulted. Commonly mailhosts are named mail.domain.com mailhub=smtp.gmail.com:587 # Where will the mail seem to come from? #rewriteDomain= # The full hostname hostname=your-full-gmail-address # Are users allowed to set their own From: address? # YES - Allow the user to specify their own From: address # NO - Use the system generated From: address FromLineOverride=YES UseSTARTTLS=YES AuthUser=your-gmail-username-here AuthPass=your-gmail-password-here
بعد از باز کردن فایل فوق تغییرات زیر رو در اون وارد کنیدsudo nano /etc/ssmtp/revaliases
بجای username هم نام ایمیل خودتون رو بنویسیدroot:username@gmail.com:smtp.gmail.com:587 localusername:username@gmail.com:smtp.gmail.com:587
رشته sendmail_path رو پیدا کنید و اون رو برابر با مقدار زیر قرار بدیدsudo nano /etc/php5/apache2/php.ini
و در آخر apache رو دوباره راه اندازی کنیدsendmail_path = /usr/sbin/ssmtp -t
حالا تمام ایمیل های شما از طریق smtpو سرور گوگل ارسال میشهsudo service apache2 restart
امکان داره که برنامه شما در task bar باشه یا مثل من یک فایل خارجی رو صدا زدید و در صورت بسته شدن نا بهنگام پنجره برنامه مورد نظر هنوز در حافظه باقی می ماند. راه حل این مشکل گزفتن event بسته شدن پنجره هست برای این کار در کلاس Frame کدهای زیر را قرار میدهیم
برای گرفتن event هم تابع OnClose را بصورت زیر مینویسیم:self.Bind(wx.EVT_CLOSE, self.OnClose)
def OnClose(self, event): # Code For On Close Runing
در برنامه های تحت وب بسیار از جاوا اسکریپت و ویژگی ها ان مثل آرایه، کوکی، اعتبار سنجی(validation) و ... استفاده میشود
معمولا کار با آرایه در جاوا اسکریپت بسیار خوش دست ولی یک سری از توابع نیاز به نوشتن نیست و در اینترنت کم و بیش در سایتها و مخصوصا در جواب سوالات سایت stachoverflow یافت میشود
در این یک سری از توابعی که بیشتر به آنها نیاز است را میگزارم
۱− جستجوی موجود بودن مقدار در آرایه
۲−حذف یک مقدار از یک آرایهfunction inarray(inc,arr){ return ($.inArray(inc, arr) > -1); }
۳- وجود مقدار تکراری در دو آرایهArray.prototype.remove = function() { var what, a = arguments, L = a.length, ax; while (L && this.length) { what = a[--L]; while ((ax = this.indexOf(what)) !== -1) { this.splice(ax, 1); } } return this; }; var ary = ['three', 'seven', 'eleven']; ary.remove('seven'); /* returned value: (Array) three,eleven */
function intersection_destructive(a, b) { var result = new Array(); while( a.length > 0 && b.length > 0 ) { if (a[0] < b[0] ){ a.shift(); } else if (a[0] > b[0] ){ b.shift(); } else /* they're equal */ { result.push(a.shift()); b.shift(); } } return result; }
اگر در php در جایی مجبور شدید که بدون استفاده از کلاس و کتابخونه خاصی تاریخ هجری شمسی رو نمایش بدید میتونید از intl کمکم بگیرید. البته قبل از استفاده باید اون رو نصب و عال سازی کنید. این تابع یکی از اکستنشنهای php هست و برای فعال سازی در اوبونتو
sudo apt-get install php5-intl
و در ویندوز فایل php.ini رو خط مربوط به Intl را پیدا و ; رو از کنار اون بردارید
;extension=php_intl.dll
برای نمایش تاریخ شمسی کد زیر رو استفاده کنید
$format = datefmt_create('fa_IR@calendar=persian', IntlDateFormatter::FULL, IntlDateFormatter::FULL, 'Asia/Tehran', IntlDateFormatter::TRADITIONAL, 'yyyy/MM/dd HH:mm:ss'); // time in locale as you wish echo datefmt_format($format, time()); // '۱۳۹۱/۰۲/۰۴ ۱۹:۱۵'منابع
سلام بر دوستان
جلسه سوم از آموزش ajax و php آماده شده
در این جلسه طریقه استفاده از فرمهای وب و ارسال مقادیر از طریق ajax و دریافت به صورت json.
در این ویدیو بیشتر بر روی json و پردازش مقادیر json پرداخته شده است.
همیشه رمزنگاری پسوردها در برنامههای تحت وب اهمیت بسیار بالایی داره. از اونجا که بیشتر کاربران عادت دارن در تمام سایتها پسوردهای یکی داشته باشن وقتی دیتابیس یک سایت مورد هک واقع بشه و دادههای اون استخراج بشه براحتی با داشتن فیلدهای نام کاربری و پسورد میشه به تمام اطلاعات دیگر این کاربر حتی در بعضی اوقات به ایمیلش هم دسترسی داشت.
حالا نمیخوام فلسفه پسورد و امنیت اطلاعات رو پیش بکشم بحثم روی کم کرد فشار سرور به کمک توابع داخلی و توکار هست. واقعا تعجب میکنم با این که زبانهای برنامهنویسی به مرور زمان توابع و امکانات جدید بهشون اضافه میشه و حتی در دیتابیسها هم شاهد این موضوع هستیم باز هم افزادی هستن که سرور رو مشغول کارهای پیشپا افتاد و الگوریتمهای سنگین میکنن. مثلا یه برنامهنویس میاد یک کلاس برای هش کردن پسوردها مینویسه که توش از تمام توابع(از sha و md5 گرفته تا rand و چیرهای دیگه) استفاده کرده تا کار هش کردن پسورد رو انجام بده. اولا باید گفت درصد رمز نگاری و استفاده از الگوریتمهای پیشرفته کاملا وابسته با پروژه و شرایط کارفرما داره. مثلا رمز نگاری یه فروشگاه الکترونیکی که هر کاربر قراره مبلغی از حسابش کم بشه و توی بودجه اکانتش درون سایت قرار بگیره با یه سایت شخصی ساده کاملا فرق داره. در فروشگاه اگر اکانتش لو بره امکان داره پولی رو از حسابش برداشت شده توسط شخص دیگری که اکانت رو هک کرده به حساب دیگری واریز بشه یا خرید انجام بگیره در صورتی که خود صاحب اصلی اکانت اصلا اطلاع نداشته.
در php تابع crypt رو خوب یادبگیرید که امکانات زیادی مثل salt رو هم داره. ولی در دیتابیس mysql تابع ENCRYPT کار مشابه crypt رو انجام میده.
برای ذخیره پسورد بصورت هش شده دقت داشته باشید شما دیگه به اصل پسورد دسترسی ندارید و فقط در لحظه لاگین کلمه وراد شده هش میشه و با کلمه هش شده دیتابیس مورد مقایسه قرار میگیره و این امنیت رو بالا میبره از اونجا که اگر دیتابیس خودتون رو هم کاملا کپی کنید به هکر بدید دیگه به هیچ عنوان به پسوردها دسترسی نداره.
استفاده از این تابع بصورت زیر هست:
INSERT INTO
`tbl_user`(`username`,`email`,`password`)
VALUES
('seifzadeh','mehrdad@gmail.com',ENCRYPT('1234'));
تمام برنامه نویسان php با تابع jdf آشنایی دارن. تابعی که به جرات میشه گفت هر سایتی دیدید که با php نوشته شده و تاریخ رو به جلالی نشون میده، از تابع jdf استفاده کرده. البته هسته این تابع بهره گیری از unix time هست که توی پست قبلی مختصری دربارش توضیح دادم.
codeigniter بهترین فریم ورک از نظر یادگیری و تسلط سریع هست و حتی در پروژه های کوچک و متوسط بسیار کاربردی. در این پست قصد دارم تا تابع jdf رو در codeigniter راه اندازی کنم.
همیشه در وبلاگ نویسی پیدا کردن یه سیستم خوب و خوش دست دغدغه تمام ما وب لاگ نویس ها و نوسندگان وب فارسی بوده. در کنار سایت های بزرگ وبلاگ دهی جهان مثل wordpress.com و bloger.com (که تو ایران مسدوده) سایت های وبلاگ دهی ما در کشور بسیار ضعیف هستند. البته بلاگ تحول بسیار خوبی ایجاد کرده که حتی مشابه خارجی هم ندارد.
شکی نیست که اوپن سورس طلایه دار رایانش ابری(cloud computing) می باشد. چرا؟
به چند دلیل محکم: