Author Archives: بنیامین خلیفه

  • 0

تجربه کوتاهی به نام زبان go

Tags :

Category : موارد دیگر

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

در بنچ مارک های مختلف زبان Go به عنوان یکی از سریع تربن زبان ها معرفی میشه و این منو خیلی وسوسه کرد که یک روز را برای برسی این زبان اختصاص بدم 

من با node.js کارکردم که این زبان هم بعد زبان Go سرعت خوبی داره اما برنامه نویسی با زبان جاوا اسکریپت زمانی که کد های شما زیاد میشه کمی سخت میشه ( کد ها بسیار تو در تو میشن ) برای همین می خواستم زبان گو را هم مورد برسی قرار بدم

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

public int getCount(){
 return 0;
}

حالا توی زبان گو 

func getCount() int {
 return 0;
}

خب همین طور که مشاهده میکنید جای int با نام تابع جابه جا شده  😕 و از func برای تعریف تابع استفاده شده 

یکی از چیز هایی که در مرحله بعد روی مخ آدم راه میره این ویژگی زبان Go هست که شما از تمام متغییر هایی که تعریف میکنید باید استفاده کنید یعنی یا یک متغییر را نباید تعریف کنید یا اگر تعریف کردید باید ازش استفاده کنید مگرنه با پیغام خطا مواجه می شوید این ویژگی کمی کار تست کد هارا مشکل میکنه 

اما بخش دیگه ای که کلا نظر من رو درباره زبان گو تغییر داد زمانی بود که می خواستم از جیسون استفاده کنم

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

var get = JSON.parse( json );

get.result.list[0].id

حالا توی زبان گو کلا همه چی فرق داره شما قطعا نمی توانید در دو خط کد  به دیتایی که از جیسون میخواهید برسید اول باید تایپ مورد برای جیسون رو دقیقا بنویسید و به نظرم این روندی بسیار زمان بره و برای وب سرویسی که من میخواستم بنویسم که مقدار زیادی جیسون باید استفاده کنم و این فاجعه بود وقتی دیدم زمان زیادی باید برای این مورد اختصاص بدم کلا دور این زبان رو خط کشیدم و به همون node پناه بردم سری که درد نمیکنه رو که دستمال نمی بنده


  • 0

آموزش استفاده از دیتابیس در اندروید

در ساخت برنامه های همیشه ممکن است نیاز داشته باشیم یک سری از اطلاعات را ذخیره و بازیابی کنیم در برنامه های اندروید راه حل منطقی استفاده از دیتابیس sqlite است .

در این آموزش نحوه استفاده آسان و سریع از این دیتابیس آموزش داده می شود برای شروع کار ابتدا کتابخانه KDB را که کار آن ساده کردن کار با دیتابیس هست را به پروژه خود اضافه میکنیم 

allprojects {
  repositories { 
   ...
   maven { url 'https://jitpack.io' }
  }
}


dependencies {
          ...
         implementation 'com.google.code.gson:gson:2.2.4'
         implementation 'com.github.parsgit:KDB:1.0.1'
	}

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

KDB.init(MainActivity.this,"db_name");

به جای عبارت db_name می توانید نام دلخواه خود را بنویسید

در مرحله دوم باید جدول های( table )  مورد نظر خود را ایجاد کنیم به مثال زیر توجه کنید

KDB.CreateTableQuery createTableQuery=new KDB.CreateTableQuery();
createTableQuery.Table("users")
                .Column("id").INTEGER().KEY_AUTO().Add()
                .Column("name").TEXT().Add()
                .Column("username").TEXT().NULL_ABLE(false).Add()
                .Column("age").INTEGER().DEFAULT(0).Add()
                .Build();

فرض کنید ما میخواهیم اطلاعات یک سری کاربر را که شامل نام و نام کاربری و سن می باشد را ذخیره کنیم پس با کد بالا جدولی به اسم users ایجاد میکنیم جدول users باید داری ستون هایی با نام های id , name , username , age باشد تا بتوانیم اطلاعات را در انها ذخیره کنیم 

توضیح : در این قسمت از کد

 Column("age").INTEGER().DEFAULT(0).Add

ستون age ( سن ) را ایجاد میکنیم و نوع آن را عدد صحبح ( INTEGER )  و مقدار پیش فرض را صفر در نظر گرفته ایم

تا اینجا ما یک دیتابیس به همراه جداول مربوطه ایجاد کردیم حالا نوبت آن رسیده که اطلاعاتی را در دیتابیس ذخیره کنیم برای ذخیره اطلاعات در sql از دستور INSERT استفاده میکنیم

KDB.query("insert into users (name,username,age) values ('beny','nitrocode.ir',24)") .exec();

// یا به صورت زیر عمل میکنیم

JsonObject values=new JsonObject();
        values.addProperty("name","beny");
        values.addProperty("username","nitrocode.ir");
        values.addProperty("age",24);

        KDB.query("insert into users (name,username,age) values (:name,:username,:age)",values)
                .exec();

با استفاده از کتابخانه KDB می توان مقدار پارامتر ها را به صورت جیسون ابجکت یا ارایه لیست ارسال کرد در قسمت دوم کد بالا ما یک متغیر جیسون آبجک با نام values ایجاد کردیم و مقادیر name , username , age را مقدار دهی کردیم .

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

ArrayList<String> params=new ArrayList<>();
        params.add("myname-test");
        params.add("abcd");
        params.add("24");

        KDB.query("insert into users (name,username,age) values (?,?,?)",params).exec();

در روش سوم باید ترتیب ورود اطلاعات را در نظر داشته باشد

SELECT ( بازیابی اطلاعات ثبت شده )

برای فراخانی اطلاعات از دیتابیس از دستور SELECT استفاده میکنیم چند روش مختلف SELECT را مشاهده کنید

JsonArray result = new JsonArray();

// دریافت تمام اطلاعات ثبت شده در جدول
result = KDB.query(" select * from users ").getJsonArray();

//دریافت اطلاعات یک کاربر بر اساس نام کاربری
ArrayList<String> params=new ArrayList<>();
params.add("nitrocode.ir");

result = KDB.query(" select * from users where username = ? ",params);

// دریافت اطلاعات کاربرانی که سنشان بیشتر از 20 سال است
ArrayList<String> params=new ArrayList<>();
params.add("20");

result = KDB.query(" select * from users where age > ? ",params);


 

UPDATE ( ویرایش اطلاعات )

در این مثال فرض میکنیم اطلاعات کاربری به نام علی در دیتابیس ما وجود دارد

// اطلاعات فرضی کاربر در دیتابیس ما
name      : ali
username  : ali156
age       : 18

که ما می خواهیم سن او را که در دیتابیس 18 ثبت شده به 30 تغییر دهیم

JsonObject values=new JsonObject(); values.addProperty("username","ali156"); values.addProperty("age",30);

KDB.query(" update users set age = :age where  username = :username",values).exec();

با اجرای کد بالا اطلاعات کاربر با نام کاربری ali156 جستجو می شود و سن او به 30 تغییر پیدا می کند

DELETE ( حذف اطلاعات )

ArrayList<String> params=new ArrayList<>();
params.add("ali157");

KDB.query(" delete from users username = ? ").exec();

این کد اطلاعات ali را حذف میکند


  • 0

free open source Node js File Manager

در این پست به معرفی فایل منیجر Node js می پردازیم

زمانی که در حال ساخت ربات تلگرام مدیریت گروه با استفاده از node js بودم برای آپلود فایل های پروژه همین طور اجرا کردنو دیباگ کردن پروژه به مشکل برخوردم و توی اینترنت دنبال یه فایل منیجر مناسب برای پلتفرم node گشتم اما چیز مناسبی پیدا نکردم که هم از نظر امنیتی و کارایی مناسب کار من باشه برای همین خودم دست به کار شدم و یه فایل منیجیر ساختم

کار با این فایل منیجیر خیلی سادست و طراحی خوبی داره به نظر خودم

از قابلیت های این فایل منیجیر میشه به موارد زیر اشاره کرد :

  1. آپلود ساده فایل ها به صورت Drag and Drop
  2. مشاهده فایل ها و فولدر ها با قابیلت حذف یا دریافت فایل ها
  3. مشاهده فایل های جاوا اسکریپت و قابلیت اجرای فایل های nodejs
  4. قابلیت استارت و متوقف کردن و مشاهده برنامه های درحال اجرا
  5. مشاهده لاگ ها و ارور های سرور

لینک : https://github.com/parsgit/node-nitroFileManager


  • 0

جاوا 10 و ویژگی های جدید آن

جاوا 10 به تازگی منتشر شده است در این پست برخی از ویژگی های جدید این زبان برنامه نویسی محبوب و قدرتمند رو معرفی میکنیم

JDK 10 در تاریخ 20 مارس 2018 منتشر شد . این نسخه پشتیبانی کوتاه مدتی دارد و 6 ماه پشتیبانی خواهد شد نسخه جاوا 11 که در اینده منتشر خواهد شد دارای پشتیبانی بلند مدت خواهد بود (LTS)

جاوا 10 را از کجا می توان دانلود کرد

از سایت اوراکل می توانید برای دانلود نسخه 10 JDK اقدام کنید

ویژگی های جدید و بهبود یافته در JDK 10

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

Local-Variable Type Inference

این ویژگی جدید زبان است که قرار است جاوا را تقویت کند تا استدلال نوعی را به اعلانات متغییر های محلی گسترش دهد

این ویژگی جدید برای بهبود تجربه توسعه دهندگان و کاهش حجم کد های جاوا انجام شده که توسعه دهنده را از اعلام نوع دقیق متغییر ها بی نیاز می کند مانند نمونه های زیر :

var list = new ArrayList<String>();  // infers ArrayList<String>
var stream = list.stream();          // infers Stream<String>
Consolidate the JDK Forest into a Single Repository

این ویژگی بیشتر برای توسعه دهندگانی که در توسعه JDK شرکت میکنند مفید است و توسعه دهندگان می توانند از یک مخزن واحد استفاده کنند

Garbage-Collector Interface

به نظر نمی رسد که این یک ویژگی جدید باشد این قابلیت هم بیشتر برای توسعه دهندگان JDK مورد استفاده قرار میگیرد

Application Class-Data Sharing

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

با تجزیه و تحلیل خدماتی که به صورت cloudless server انجام شده نشان می دهد که بسیاری از آنها چندید هزار کلاس کاربردی را هنگام راه اندازی بارگیری میکنند این ویژگی می تواند این سرویس ها را سریعا راه اندازی کند و زمان پاسخگویی سیستم را بهبود بدهد

برای مطالعه سایر ویژگی های جدید در سایت اوراکل اینجا کلیک کنید


  • 0

ربات سریع مدیریت گروه تلگرام

 

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

( برای ورود به ربات روی لینک زیر کلیک کنید )

@GroupFireWallBot

ربات مدیریت گروه تلگرام

1. ربات را داخل گروه خود ادمین کنید ( آموزش نحوهی ادمین کردن ربات داخل گروه در منوی آموزش ربات وجود دارد )

2. ارسال دستورات موردنظر برای تنظیم کردن ربات مدیریت گروه ( در ادامه لیست دستورات را مشاهده کنید )

کار با ربات بسیار ساده است و دستورات آن کاملا ساده و هوشمند ساخته شده است برای ارسال دستور به ربات از علامت ! یا $ استفاده میکنیم توجه کنید که دستورا را از داخل گروه خود باید ارسال کنید

لیست دستوارت مدیریت ربات :

!چت محدود
!چت ازاد

!لینک ممنوع
!لینک ازاد

!متن ممنوع
!متن ازاد
!ویس ممنوع
!ویس ازاد

!اهنگ ممنوع
!اهنگ ازاد

!فیلم ممنوع
!فیلم ازاد

!فیلم نوت ممنوع
!فیلم نوت ازاد

!عکس ممنوع
!عکس ازاد

!گیف ممنوع
!گیف ازاد

!فقط فارسی
!فقط انگلیسی
!زبان ازاد

!ریست

!پیشفرض

!اخراج

توضیح دستورات :

دستور چت محدود فش ناسزا و کلمات نا مناسب را در پیام ها و پست های افراد شناسایی و حذف میکند و برای برداشتن این محدودیت دستور چت ازاد را ارسال کنید

بسیاری از دستورات از اسمشان مشخص هست که چه کاری انجام میدهند مثلا اگر دستور لینک ممنوع را ارسال کنید ربات پیام هایی که دارای لینک و ایدی و تبلیغ باشند را حذف می کند برای برداشتن این محدودیت هم دستور لینک ازاد را می توانید ارسال کنید

فیلم نوت همان فیلم های دایره ای هستند 

با ارسال دستور فقط فارسی اعضای گروه شما فقط به زبان فارسی می توانند چت کنند اگر به زبانی مثل انگلیسی چت کنند ربات پیامشان را حذف میکند و اجازه چت کردن نمی دهد دستور فقط انگلیسی هم باعث می شود اعضای گروه فقط به ربان انگلیسی بتوانند صحبت کنند دستور چت ازاد برای برداشت محدودیت فقط فارسی و فقط انگلیسی است

با ارسال دستور ریست تمام تنطیمات و محدودیت های ایجاد شده حذف می شود و می توانید دوباره با ارسال دستورات ربات را تنظیم کنید – دستور پیشفرض قابلیت ضد لینک و ضد فش و ناسزا را فعال میکند

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


استفاده از ربات برای 3 روز کاملا رایگان است در این مدت می توانید کارایی ربات را تست کنید و از عملکرد آن مطمئن شوید برای تمدید ربات وارد ربات مدیریت گروه دیوار آتش شوید و منوی مدیریت آسان گروه را نتخاب کنید در صفحه بعد لیست گروه های خودتون رو مشاهده میکنید ( در صورتی که ربات را قبلا در گروه ادمین کرده باشید ) روی نام گروه کلیک کنید حال می توانید ببینید اطلاعات نام و وضعیت ربات برای گروه و مدت زمانی موردنیاز برای تمدید ربات را مشاهده کنید

با کلیک روی تمدید ربات برای گروه شما می توانید ربات را با توجه به نیاز خود تمدید کنید

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

ربات مدیریت گروه دیوار آتش با هدف کمک به مدیران گروه ها ساخته شده و همواره فعال می باشد اگر دنبال ربات ضد لینک و تبلیغات , ضد فش و ناسزا و با کلی امکانات دیگر میخواهید حتما این ربات را امتحان کنید


کانال اطلاع رسانی ما : https://t.me/NitroCode

ایدی پشتیبانی : https://t.me/nvioir


  • 0

آموزش نصب نود روی ابونتو 16.04

در این آموزش نود و دیتابیس mongodb  را نصب میکنیم

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

$ sudo apt-get update

$ cd /
$ curl -sL https://deb.nodesource.com/setup_8.x -o nodesource_setup.sh

$ sudo bash nodesource_setup.sh
$ sudo apt-get install nodejs

با این کد ها نود نسخه 8 که نسخه نهایی و LTS را نصب میکنیم نسخه LTS از این جهت اهمیت داره که برای مدت زمان بیشتری پشتیبانی میشه

اما حالا برای نصب دیتابیس mongodb در سیستم عامل ابونتو از کد های زیر استفاده میکنیم

$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5

$ echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list

$ sudo apt-get update
$ sudo apt-get install -y mongodb-org
$ sudo service mongod start
$ sudo systemctl enable mongod

بسیار خب با اجرای این کد ها نسخه 3.6 دیتابیس mongodb که تا این لحظه اخرین و جدیدترین نسخه هست نصب میشه حتما پیشنهاد میکنم کار با این دیتابیسو یاد بگیرید کار باهاش لذت بخشه و دردسر های MySQL رو نداره

دارم برای پروژه ای از node استفاده میکنم و خیلی هیجان زدم میکنه البته بعضی وقتا سینتسک و شیگرایی جاوا اسکریپت برام عجیب به نظر میاد چون مثل بقیه زبون ها نیست در کل هنوز فکر میکنم بهترین زبات برای ساخت سایت php باشه چون کار باهاش خیلی ساده تره البته نظر منه و  node بخاطر سرعتی که داره بیشتر برای ساخت وب سرویس و وب اپلیکیشن ها مناسب باشه :mrgreen:

 

 


  • 0

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

دیتابیس MongoDB از دسته دیتابیس های no sql است کار کردن با این دیتابیس بسیار ساده و لذت بخش است

فایلی به اسم test.js ایجاد میکنیم و برای کانکت شدن به دیتابیس از کد های زیر استفاده میکنیم

const MongoClient = require('mongodb').MongoClient;

MongoClient.connect('mongodb://localhost:27017', function(err, client) {
 console.log('connect');
 // other code
 });

زمانی که اتصال به دیتابیس انجام شد می توانیم عملیاتی مانند Find (select)  , update , insert , …. را انجام دهیم

افزودن اطلاعات به دیتابیس :

const MongoClient = require('mongodb').MongoClient;

MongoClient.connect('mongodb://localhost:27017', function(err, client) {
 console.log('connect');
 // other code
   const db = client.db('db_name');
   const col = db.collection('col_name');

   col.insertOne({name:'nitrocode',url:'nitrocode.ir',age:2,active:true},null,function(err,result) {});

 });

جستجو در دیتابیس :

 col.find({name:'nitrocode'}).toArray(function(err,select) {
console.log(select);
});

کد بالا لیست نتایج یافت شده را به صورت ارایه برمیگرداند حالا یک پرسجوی پیچیده تر انجام میدهیم

 coll.find({$or:[{phone:'091000000'},{age:2}]})
.sort({_id:-1})
.limit(1)
.toArray(function(err,select) {
console.log(select);
});

این پرسجو همانند sql query زیر عمل میکند

select * from `test` where phone='091000000' or age=2
order by _id DESC LIMIT 1

می توانیم از دو عدد 1 یا -1 (منفی یک) در sort استفاده کنیم که یک به صورت صعودی و منفی یک به صورت نزولی عملیات sort را انجام می دهد

عملیات update هم به این صورت انجام می شود

coll.updateOne({_id:code_id},{$set:{active:false}},function() {
 })

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

client.close()

ببندید

یکی از ویژگی های جالب MongoDB اینه که شما میتونی همزمان با عملیات find اپدیت هم انجام بدید که بهتره داکیومنت کامل رو از سایت MongoDB مطالعه کنیم البته سایتش ip های ایرانو تحریم کردن که دیگه روش دور زدنشو بلدید ://


  • 0

نصب 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 stop 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


  • 0

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

در این پست با استفاده از فریمورک 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",'youracademy.ir@gmail.com','cjaqrgnpygsfwfqx' );
 
 try{
 //echo $smtp->set('Errors-to', '<bluehole@fatfreeframework.com>');
 $smtp->set('From', '"name" <youremail@gmail.com>');
 $smtp->set('To', '"Contact Name" <sendemail@gmail.com>');
 $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;
 }

}