Monthly Archives: دسامبر 2017

نصب nodejs و دیتابیس MongoDB روی CentOS 7

تکنولوژی nodejs که برای ساخت برنامه های real time مانند برنامه های پیام رسان بسیار مناسب است nodejs از زبان جاوا اسکریپت در سمت سرور استفاده می کند از ویژگی های nodejs سبک بودن و مصرف کم منابع سرور و همین طور سرعت بسیار بالا نسبت به php و سایر زبان های برنامه نویسی می توان اشاره کرد

برای نصب nodejs کد های زیر را از طریق ssh وارد می کنیم :

sudo yum install gcc-c++ make

curl --silent --location https://rpm.nodesource.com/setup_9.x | sudo bash -

sudo yum -y install nodejs

بعد از نصب nodejs می خواهیم تست کنیم که همه چیز به درستی کار می کند فایلی با نام test.js ایجاد میکنیم و کد های زیر را در آن ذخیره می کنیم

var http = require('http');
http.createServer(function(req,res){
  res.writeHead(200,{'Content-Type':'text/plain'});
  res.end("Hello World");
}).listen(3000, "127.0.0.1");
console.log("Server running at http://127.0.0.1:3000/");

به جای 127.0.0.1 می توانید از ip سرور خود هم استفاده کنید . حالا برای اجرای کد های بالا به این صورت عمل می کنیم :

 node test.js

حالا اگر http://server-ip:3000 را در مرورگر خود وارد کنید باید پیام Hello Word را مشاهده کنید .

اما اگر با ارور مواجه شدید و صفحه برای شما نشان داده نشد دلیل این مشکل می تواند به دلیل فایروال سرور شما باشد شما باید پورت 3000 را در فایروال خود فعال کنید برای این کار می توانید از کد های زیر استفاده کنید :

//برای دسترسی دادن به پورت 3000
sudo firewall-cmd --zone=public --add-port=3000/tcp --permanent

//برای حذف دسترسی پورت 3000
sudo firewall-cmd --zone=public --remove-port=3000/tcp --permanent

// برای مشاهده وضعیت فایروال و پورت های فعال
sudo firewall-cmd --zone=public --list-all

// برای ریستارت کردن فایرول بعد از انجام تغییرات
sudo systemctl restart firewalld

MongoDB : دیتابیس ها به دو دسته sql و nosql تقسیم می شوند . از دیتابیس های sql می توان از mysql و sqlserver نام برد که دارای ساختار مشخصی هستند اما دیتابیس های nosql ساختار مشخصی ندارند و شما می توانید اطلاعات خود را به هر صورتی داخل این دیتابیس ها ذخیره کنید  MongoDB یکی از معروف ترین دیتابیس های nosql است . توجه کنید که سایت MongoDB ای پی های ایران را تحریم کرده است . شما به راحتی میتوانید اطلاعات خود را به صورت json درون این دیتابیس ذخیره کنید برای نصب MongoDB به این صورت عمل می کنیم :

nano /etc/yum.repos.d/mongodb-org-3.6.repo

بعد از وارد کردن کد بالا محتوای زیر را درون آن paste کنید و فایل را ذخیره کنید

[mongodb-org-3.6]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/amazon/2013.03/mongodb-org/3.6/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc

حالا برای نصب دیتابیس کافیست از کد زیر استفاده کنید :

sudo yum install -y mongodb-org

برای اجرا شدن سرویس mongoDB

sudo service mongod start

و برای قرار دادن برنامه در استارت اپ سرور ( زمانی که سرور ریستارت شود دیتابیس به صورت خودکار اجرا شود )

sudo chkconfig mongod on

 

آموزش کار با دیتابیس MongoDB


ارسال ایمیل از پی اچ پی با استفاده از جیمیل

در این پست با استفاده از فریمورک f3 یا همان ( FatFree ) می خواهیم با کمک سرویس جیمیل از طریق php ایمیل ارسال کنیم

از تابع زیر برای مقدادهی smtp استفاده میکنیم :

 $smtp = new SMTP ( 'smtp.gmail.com',465,"ssl",$gmail_username,$password );

به جای $gmail_username آدرس ایمیل خود و به جای $password رمز عبور حساب خود را بنویسید اما قبل از ادامه کار باید به چند نکته توجه کنید شما در حالت عادی نمتوانید از طریق سرور از gmail استفاده کنید ابتدا باید تایید دو مرحله ای را روی اکانت ایمیل خود فعال کنید بعد وارد تنظیمات جیمیل خود شوید و از تب pop/imap گزینه ‘فعال کردن IMAP’ رو فعال کنید و تنظیمات رو ذخیره کنید

حالا لینک زیر را باز میکنیم

https://myaccount.google.com/security?utm_source=OGB&utm_medium=app

در صفحه ای که برای شما باز می شود روی گزینه app password کلیک کنید بعد از وارد کردن دوباره رمز عبور وارد صفحه مورد نظر میشویم در این صفحه باید select app را روی  Mail و select device را روی other قرار دهید پس از انجام این تنظیمان گوگل یک رمز عبور به شما می دهد از این روز عبور باید برای ارسال ایمیل از روی سرور خود استفاده کنید و ان را به جای $password بنویسید.

کد کامل ارسال ایمیل به این صورت نوشته میشه :

$smtp = new SMTP ( 'smtp.gmail.com',465,"ssl",'[email protected]','cjaqrgnpygsfwfqx' );
 
 try{
 //echo $smtp->set('Errors-to', '<[email protected]>');
 $smtp->set('From', '"name" <[email protected]>');
 $smtp->set('To', '"Contact Name" <[email protected]>');
 $smtp->set('Subject', 'test for send email Nitrocode.ir');
 
 $send_result=$smtp->send ($text,true );
 
if($send_result==true){
echo 'successful send email';
}
 else{
echo 'can not send email'
}
 }catch (Exception $e){
 echo $e;
echo $smtp->log();
 }

برای مشاهده پروژه ها و نمونه کارهای ما اینجا کلیک کنید


تنظیمات سرور : اگر در سرور شما دسترسی ارسال ایمیل فعال نباشد با پیام Permission denied مواجه میشیم برای رفع این مشکل باید کد زیر را از طریق ssh وارد کنیم

setsebool -p httpd_can_networck_connect 1
setsebool -p httpd_can_sendmail 1

اعتبار سنجی فرم سایت با استفاده از جاوا اسکریپت

برای پروژه شخصی که داشتم میساختم نیاز داشتم تا با فرم ثبت نام سایت رو با استفاده از جاوا اسکریپت اعتبار سنجی کنم مزیت این نوع اعتبار سنجی سرعت بالا و جلوگیری از ارسال درخواست ها به سرور برای اعتبارسنجی و مصرف منابع سرور است .

تصمیم گرفتم تا خودم یه کتابخونه ساده و سبک رو بسازم و استفاده کنم می تونید لینک این کتابخونه رو در پایین مشاهده کنید .

javascript validator

Wiki

برای مثال :

postData={
    name:$("#i_name").val(),
    family:$("#i_family").val(),
    email:$("#i_email").val(),
    phone:$("#i_phone").val(),
    password:$("#i_password").val(),
    password2:$("#i_password2").val(),
    captcha:$("#i_captcha").val()
  }

فرم ما حاوی فیلد های نام و نام خانوادگی و ایمیل و تلفن و رمز عبور و کد کپشا است در مثال بالا این مقادریر را در متغیر postData مقدار دهی کرده ام .

حالا میخواهیم برسی کنیم که فیلد ها توسط کاربر پر شده باشند ( خالی نباشند ) برای این منظور از کد زیر استفاده میکنیم

validateNull(postData,"@pn را وارد نکرده اید ");

این کد تمام پارامتر ها را در postData برسی میکند تا خالی نباشند در صورتی که یکی از فیلد ها خالی باشد پیام خروجی آن مانند این پیام است

{"ok":false,msg:"نام خانوادگی را وارد نکردید"}

عبارت @pn که در کد بالا مشاهده می کنید نام پارامتر را برمیگرداند

حالا فرض کنید در فرم ما فیلد شماره تلفن اختیاری است و ما نمیخواهیم شماره تلفن توسط تابع validateNull برسی شود برای این منظور کافیه نام پارامتر های اختیاری را به صورت ارایه به این تابع اضافه کنیم

validateNull(postData,"@pn را وارد نکرده اید ",['phone']);

برای تعدادی از فیلد ها لازم است که محدودیت تعداد کارکتر بزاریم معمولا نام و نام خانوادگی بین 3 تا 25 کارکتر باید باشد برای ایجاد محدودیت تعداد کارکتر از این کد استفاده می کنیم

validateLenght(postData,['name','family'],3,25,'@pn باید @len از @chl کارکتر باشد');

پارامتر اول  ( postData ) شامل تمام پارامتر های ما است در پارامتر بعدی تایین میکنیم که محدودیت تعداد کارکتر ها برای کدام پارامتر ها باید برسی شود 3 حداقل تعداد و 25 حداکثر تعداد کارکتر است و پارامتر اخر هم مربوط به پیام خطای اعتبارسنجی است

اگر بجای عدد بیشترین تعداد کارکتر null بگذارید محدودیت بیشتریت تعداد کارکتر در نظر گرفته نمیشود برای کم ترین مقدار هم به همین صورت است

عبارت @pn نام پارامتر و  @chl حداقل یا حداکثر تعداد کارکتر مجاز و @len نوع محدودیت را جایگزین می کند حالا اگر نامی طولانی تر از 25 کارکتر وارد کرده باشیم  پیام خطای کد بالا به صورت زیر است

{"ok":false,"msg":"نام نباید بیشتر از 25 کارکتر باشد"}

با استفاده از تابع validateEmail ایمیل کاربر را برسی میکنیم :

ValidateEmail(postData['email'],'ایمیل را به درستی وارد نکرده اید');

برسی رمز عبور و تکرار رمز عبور :

validateCheckPassword(postData['password'],postData['password2'],'رمز عبور با تکرار آن یکسان نیست');

احتمالا در اینده تعداد توابع موجود برای اعتبار سنجی افزایش پیدا می کنه 😀

خب بعد از نوشتن این تابع ها حالا باید خروجی پیام اعتبار سنجی رو با استفاده از کد زیر به دست بیاریم تا بفهمیم کاربر اطلاعات رو درست وارد کرده و اعتبارسنجی درست بوده یا نه

validate=getValidateResult();

if(validate.ok==false){

show_error_messege(validate.msg);
}
else{
// successful 
}

کد کلی آن به این صورت می شود

postData={
    name:$("#i_name").val(),
    family:$("#i_family").val(),
    email:$("#i_email").val(),
    phone:$("#i_phone").val(),
    password:$("#i_password").val(),
    password2:$("#i_password2").val(),
    captcha:$("#i_captcha").val()
  }

validateLenght(postData,['password','password2'],6,null,'@pn باید @len از @chl کارکتر باشد');
// error resulr = {"ok":false,"msg":"رمز عبور نباید کوچکتر از 6 کارکتر باشد"}
 validateLenght(postData,['name','family'],3,25,'@pn باید @len از @chl کارکتر باشد');
validateNull(postData,"@pn را وارد نکرده اید ",['phone']);

validateCheckPassword(postData['password'],postData['password2'],'رمز عبور با تکرار آن یکسان نیست');
    
ValidateEmail(postData['email'],'ایمیل را به درستی وارد نکرده اید');
     
validate=getValidateResult();

if(validate.ok==false){

show_error_messege(validate.msg);
}
else{
// successful 
}

در فایل جاوا اسکریپت تابع زیر قرار دارد که میتوانید پارامتر هایی که در فرمتان استفاده کردید ولی در تابع وجود ندارد را به آن اضافه کنید

function validatePN(lan='fa') {
 var pn_fa={
 'name':'نام',
 'family':'نام خانوادگی',
 'email':'ایمیل',
 'phone':'شماره تلفن',
 'captcha':'تصویر امنیتی',
 'password':'رمز عبور',
 'password2':'تکرار رمز عبور',
 'min':'کوچکتر',
 'max':'بزرگتر'
 };
 if (lan=='fa') {
 return pn_fa;
 }

}

جستجوی هوشمند