آموزش php (وبلاگ یک پی اچ پی کار)

آموزش زبان برنامه نویسی php , html , css , تجربیات یک برنامه نویس

۱۱ مطلب در آذر ۱۳۹۷ ثبت شده است

خطای Connection could not be established with host smtp.gmail.com [Connection timed out #110]

در صورتی که خطای زیر رو در لاراول موقع ارسال ایمیل دریافت میکنید : 

Connection could not be established with host smtp.gmail.com [Connection timed out #110]

 

میتونید با یه تغییر کوچک در فایل .env مشکل رو حل کنید و حتی سرعت ارسال ایمیل رو هم بالا ببرید:

عبارت زیر رو پیدا کنید :

MAIL_DRIVER=smtp

به مقدار زیر تغییر دهید :

MAIL_DRIVER=sendmail
۲۲ آذر ۹۷ ، ۱۲:۳۳ ۲ نظر موافقین ۰ مخالفین ۰
مهندس مهدی حسامی

دریافت مقدار قبلی و جدید یک ستون خاص در تریگر مای اس کیو ال

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

 

مثال :

OLD.Name

NEW.Name

 

تفاوت این دو عبارت در این است که اولی به مقدار قبلی ستون قبل از تغییرات و دومی هم به مقدار ستون مورد نظر بعد از تغییرات اشاره میکند.

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

 

۲۰ آذر ۹۷ ، ۰۱:۵۳ ۰ نظر موافقین ۰ مخالفین ۰
مهندس مهدی حسامی

کپی داده های یک جدول درون جدولی دیگر در mysql

برای کپی کردن داده های درون ستونهای یک جدول به درون جدولی دیگر از کوئری زیر در مای اس کیو ال استفاده کنید:

UPDATE centers
INNER JOIN centers2 ON (centers.record_id = centers2.ID)
SET centers.name = centers2.Name

۲۰ آذر ۹۷ ، ۰۱:۱۱ ۰ نظر موافقین ۰ مخالفین ۰
مهندس مهدی حسامی

روشن کردن دائمی event_scheduler مای اس کیو ال

روشن کردن دائمی event_scheduler مای اس کیو ال وارد فایل my.ini مربوط به مای اس کیو ال شوید و دستور زیر رو در پائین  [mysqld] اضافه کنید.

event_scheduler=ON
۱۹ آذر ۹۷ ، ۲۲:۲۸ ۰ نظر موافقین ۰ مخالفین ۰
مهندس مهدی حسامی

زمانبند Event Scheduler در مای اس کیو ال (MYSQL )

با استفاده از این خاصیت در MYSQL شما میتونید یک کار خاص رو به MYSQL بسپارید تا در مقاطع زمانی مشخص شده به صورت اتوماتیک انجام بده.
مثلا فرض کنید ما میخواهیم هر روز اطلاعاتی رو که بیش از 10 روز پیش ایجاد شده اند رو پاک کنیم و نمیخوایم این کار رو به PHP یا ASP و... بسپاریم.با استفاده از زمانبند رویداد ما میتونیم به MYSQL بگیم خودش این عمل رو هر روز انجام بده.
مثال زیر فکر میکنم گویای مسئله باشه:

ابتدای کار لازمه که ما زمانبند رو در MYSQL فعال کنیم برای این کار در PHPMYADMIN در قسمت SQL کد زیر را وارد کنید تا زمانبند فعال بشه:

1
SET GLOBAL event_scheduler = ON;

برای روشن کردن دائمی رویدادها هم میتونید وارد فایل my.ini مای اس کیو ال شوید و دستور زیر رو در آن وارد کنید و سرویس رو ریستارت کنید :

event_scheduler=ON


یا

1
SET GLOBAL event_scheduler = 1;


که در صورت درست انجام شدن با پیغام 
Your SQL query has been executed successfully
روبرو خواهید شد
خوب بعد از این کار نوبت به ساخت جدول مثال ما میرسه
برای این مثال ما جدولی به نام cart رو با مشخصات زیر ایجاد میکنیم

1
2
3
4
5
6
7
8
CREATE TABLE cart
(
cart_id INT  AUTO_INCREMENT,
user_id INT,
product_id INT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (cart_id)
) ;


بعد از ایجاد جدول فوق وارد اون میشیم و در قسمت کد SQL کد زیر رو وارد میکنیم

 

1
2
3
4
CREATE EVENT newEvent
ON SCHEDULE EVERY 1 DAY
DO
DELETE FROM cart WHERE created_at <= DATE_SUB(NOW(), INTERVAL 10 DAY) ;


و اما توضیح کد بالا
خط اول که دستور ایجاد یک رویداد جدید به نام newEvent رو صادر میکنه ما به جای newEvent میتونیم نام دلخواه خودمون رو بذاریم
خط دوم مشخص میکنه که این رویداد باید هر روز کاری که گفته میشه رو انجام بده که میتونید به جای EVERY 1 DAY از هر مقدار دیگه استفاده کنید مثلا EVERY 1 SECOND که هر ثانیه عملیات گفته شده رو انجام بده
در خط سوم کلمه کلیدی DO اومده که معرف عملیاتی هست که باید انجام بشه و در خط چهارم دستوری که باید انجام بشه رو ذکر میکنیم که در اینجا رکوردهایی که بیش از 10 روز از ایجادشون میگذره رو حذف میکنیم.
اما یه سری نکات لازم هست که دوستان بدونن.
اگه ما یک زمانبند رو میخوایم از مثلا فردا شروع به کار کنه و یک سال هم کار کنه لازم هست از دستور زیر استفاده کنیم
این دستورات قبل از کلمه کلیدی Do نوشته میشن:

 

1
2
STARTS CURRENT_TIMESTAMP + INTERVAL 1 DAY
    ENDS CURRENT_TIMESTAMP + INTERVAL 1 YEAR


این دستور در خط اول زمان شرع شدن زمانبند رو مشخص میکنه که از 24 ساعت دیگه شروع بشه و در خط دوم مشخص میکنه که یک سال دیگه( از امروز نه از شروع) پایان پیدا کنه
البته ما میتونیم به استارت و پایان تاریخ هم بدیم مثل مثال زیر

1
STARTS '2012-10-30 13:00:00'

البته هنوز تاریخ فارسی ساپورت نمیکنه

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

1
SHOW EVENTS;


استفاده کنیم که تمام زمانبندهای دیتابیس مورد نظر رو نمایش میده
برای ویرایش یک زمانبند میتونیم از کد زیر استفاده کنیم:

1
2
3
4
Alter newEvent
ON SCHEDULE EVERY 1 Month
DO
DELETE FROM cart WHERE created_at <= DATE_SUB(NOW(), INTERVAL 10 DAY) ;



همونطور که میدونید کلمه کلیدی Alter مشخص کننده این هست که زمانبند وجود داره و میخواهیم جایگزینی انجام بشه مثل Alter Table
lمثلا دستور زیر نام زمانبندی که وجود داره رو تغییر میده:

1
2
ALTER EVENT newEvent
    RENAME TO myEvent;


خوب و اما از بین بردن زمانبند
دستور زیر زمانبند موجود رو از بین میبره

1
DROP EVENT newEvent;

که به جای newEvent نام زمانبندی که میخوایم از بین بره رو وارد میکنیم
 

۱۹ آذر ۹۷ ، ۲۲:۱۳ ۰ نظر موافقین ۰ مخالفین ۰
مهندس مهدی حسامی

فعال کردن FEDERATED Engine در مای اس کیو ال (mysql)

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

فایل my.ini مربوط به مای اس کیو ال خود را باز کنید و دنبال [mysqld] بگردید که تقریبا در انتهای فایل قرار دارد و در زیر آن کلمه زیر رو اضافه کنید :

federated

 

یعنی به این شکل باید باشد :

[mysqld]
federated

 

حال فایل رو ذخیره کنید و مای اس کیو ال خودتونو ریستارت کنید تا تغییرات اعمال شود .

تبریک میگم! موتور  federated   برای شما فعال شد و شما میتونید از این امکان جذاب مای اس کیو ال استفاده کنید.

 

آرزوی موفقیت براتون دارم

ارادتمند مهدی حسامی

۱۹ آذر ۹۷ ، ۱۹:۱۵ ۲ نظر موافقین ۰ مخالفین ۰
مهندس مهدی حسامی

آشنایی با FEDERATED storage engine در مای اس کیو ال

مای اس کیو ال جهت ذخیره سازی بهینه داده ها در حافظه و دستیابی آسان وسریع تر به این داده ها موتورهای ذخیره سازی متعددی رو برای سناریوهای مختلف پیشنهاد و عرضه کرده است که یکی از این storage engine ها FEDERATED هستش ، حالا اینکه این موتور ذخیره سازی چه کاربردی داره و چه مواقعی از این باید استفاده کرد رو در این مقاله تا حدی براتون تشریح میکنم .

این موتور ذخیره سازی برای سناریوهایی مناسب است که شما قصد داشته باشید داده هایی رو بین چند سرور یا چند دیتابیس به اشتراک بگذارید .

برای مثال شما یک جدول در دیتابیس شماره یک بنام tbl1 دارید که بر روی سرور شماره 1 قرار دارد ، حال میخواهید اطلاعات این تیبل رو با تیبل tbl1  موجود بر روی سرور شماره 2 sync کنید ، خب در این سناریو شما میتونید تیبلی که میخواهید اطلاعاتش رو از تیبل دیگه بگیره رو بصورت federated ایجاد کنید تا بصورت مجازی برای شما داده های اون یکی تیبل رو نمایش بده . در این صورت بر اساس کانکشنی که قبلا تعریف کردید ، موقع فراخوانی داده های تیبل فدریت شده ، مای اس کیو ال بر اساس همون کانکشن میره داده های جدیل رو از سرور دوم میخونه و در تیبل فدریت شده بصورت مجازی به شما نمایش میده بصورتی که شما تصور میکنید این داده ها در همین سرور وجود دارند و شما انگار وثتی دارید به این تیبل محلی تون کوئری میدید ، در واقع انگار به همون تیبلی که در راه دور هست کوئری میدید و اینطوری به داده های راه دور دسترسی خواهید داشت.

 

این آموزش تکمیل خواهد شد ...

 

مراحل ایجاد یک تیبل federated روی کامپیوتر لوکال و اتصال آن به یک سرور دیگر و تیبلی دیگر جهت سینک کردن داده ها :

1 - تعریف سرور : 

CREATE SERVER server_name FOREIGN DATA WRAPPER wrapper_name OPTIONS (option [, option] ...)

مثال : 

CREATE SERVER zanjanServer FOREIGN DATA WRAPPER mysql OPTIONS (USER 'root', HOST '217.218.100.101', PORT 3306, DATABASE 'testdb');

 

2 - ایجاد تیبل روی کامپیور سرور(remote) که محل فیزیکی ذخیره سازی داده هاست و داده ها بصورت فیزیکی در واقع روی آن قرار دارند :

 

CREATE TABLE test_table 
( id INT(20) AUTO_INCREMENT, name VARCHAR(32) DEFAULT '') 
ENGINE=MyISAM 
DEFAULT CHARSET=utf8mb4;

 

 

3 - ایجاد تیبل مجازی یا FEDERATED TABLE : 

CREATE TABLE test_table (
    id     INT(20) AUTO_INCREMENT,
    name   VARCHAR(32) DEFAULT ''
)
ENGINE=FEDERATED
DEFAULT CHARSET=utf8mb4
CONNECTION='zanjanServeer/test_table';

 

تمام شد .

حالا برای اینکه داده های داخل تیبل روی سرور راه دور رو بخونید کافیه برای تیبل لوکال کوئری SELECT رو بنویسید .

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

نکته : هیچ داده ای روی کامپیوتر لوکال شما ذخیره نمیشه و این تیبل صرفا نقش یه پل ارتباطی رو داره و داده بر روی دیتابیس کامپیوتر سرور ذخیره سازی و مدیریت می شوند و شما هم هر کوئری رو که به تیبل FEDERATED بفرستید اینم پاس میده به مای اس کیو ال روی سرور و کوئری اون سمت هندل میشه و داده های در سمت سرور بروزرسانی میشن و ما نتیجه رو در سمت کلایت روی تیبل مجازی خودمون میبینیم.

 

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

البته خیلی از موارد عملیاتی مربوط به FEDERATED TABLE ها میمونن که انشالله سر یه فرصت دیگه خدمتتون شرح میدم

 

آرزوی موفقیت براتون دارم

ارادتمند مهدی حسامی

 

۱۹ آذر ۹۷ ، ۱۱:۰۶ ۰ نظر موافقین ۰ مخالفین ۰
مهندس مهدی حسامی

اجرای مای اس کیو ال (mysql) بصورت سرویس ویندوز

دوستان عزیز شاید شماهم قصد داشته باشید mysql رو به عنوان یکی از سرویس های ویندزو ران کنید ، اینطوری هر موقع که ویندوز بالا اومد این سرویس هم بصورت خودکار اجرا میشه و برای شما کار میکنه و نیازی نیست که شما بصورت دستی این برنامه رو اجرا کنید.

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

 

مسیر نصب برنامه رو پیدا کنید و فایل اجرایی mysqld.exe رو باید به سرویس ها اضافه کنید

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

C:\wamp64\bin\mysql\mysql5.7.21\bin\mysqld.exe

حالا CMD ویندوز رو باز کنید و دستور زیر رو در اون وارد کنید و کلید Enter رو فشار دهید :

"C:\wamp64\bin\mysql\mysql5.7.21\bin\mysqld.exe" --install

 

دقت داشته باشید که مسیر رو داخل دابل کوتیشن قرار دهید تا بدرستی نصب شود و همینطور برنامه CMD رو در مد  administrator  اجرا کرده باشید.

سرویس مای اس کیو ال

 

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

"C:\wamp64\bin\mysql\mysql5.7.21\bin\mysqld.exe--install mysql

بعد از دریافت پیام موفقیت آمیز نصب ، حالا میتونید با مراجعه به لیست سرویس های ویندوز ، سرویس mysql رو هم ببینید که با راست کلیک کردن بر روی اون و  بعد هم کلیک start ، این سرویس رو اجرا کنید. اگر اجرای این سرویس رو روی وضعیت خودکار قرار دهید ، دیگر نیازی نیست تا هربار شما اجرای برنامه رو بصورت دستی انجام دهید بلکه ویندوز خودش اینکار رو بعد از بالا آمدنش انجام خواهد داد حتی اگر در صفحه لاگین سیستم عامل هم بمونید و وارد دسکتاپ هم نشید این سرویس ها بصورت خودکار اجرا خواهد شد.

مای اس کیو ال سرویس

 

در صورت تمایل به حذف سرویس مورد نظر از لیست سرویسهای ویندوز نیز میتونید از دستور زیر در CMD استفاده کنید :

 

sc delete ServiceName

 

 

با آرزوی موفقیت برایتان

ارادتمند مهدی حسامی

 

 

 

۱۹ آذر ۹۷ ، ۰۹:۳۰ ۰ نظر موافقین ۰ مخالفین ۰
مهندس مهدی حسامی