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

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

۱۲۰ مطلب با موضوع «php» ثبت شده است

آشنایی با 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

 

 

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

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

 

 

 

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

آموزش نصب لاراول 5.7 بر روی هاست

کل فایلهای پروژه رو غیر از public یه level بالاتر از public_html سرور و داخل یه فولدری بنام laravel قرار بدید
و محتوای داخل فولدر public لاراول رو هم از فولدرش بیرون بیارید و داخل public_html سرور بریزید سپس وارد فایل index.php در داخل public_html بشید و دستور مربوط به اتولود رو به شکل زیر تغییر بدید:

 

 
require dirname(dirname(FILE)).'/laravel/vendor/autoload.php';

تا اینجای کار رو که انجام دادید سایت به درستی بالا خواهد اومد ولی شما با تابع File::exists لاراول مشکل خواهید داشت و شما نخواهید توانست فایل های assets پروژه خودتون که داخل public_html قرار دارند رو  از نظر موجود بودن چک کنید که برای حل این مشکل و اشاره صحیح این تابع به مسیر گفته شده باید تغییرات زیر رو هم انجام بدید:

برای اینکه File::exists به مسیر زیر نگاه کنه 
"/home/mydomain/public_html"

وارد فایل index.php  شوید و تابع public_path رو override کنید ، به شکل زیر :

 

$app->bind('path.public', function() {
return __DIR__;
});

 

 

محتوای فایل index.php  بصورت زیر خواهد بود :

 

<?php

 

/**
* Laravel - A PHP Framework For Web Artisans
*
* @package Laravel
* @author Taylor Otwell <taylor@laravel.com>
*/

 

define('LARAVEL_START', microtime(true));

 

/*
|--------------------------------------------------------------------------
| Register The Auto Loader
|--------------------------------------------------------------------------
|
| Composer provides a convenient, automatically generated class loader for
| our application. We just need to utilize it! We'll simply require it
| into the script here so that we don't have to worry about manual
| loading any of our classes later on. It feels great to relax.
|
*/

 

require dirname(dirname(__FILE__)).'/laravel/vendor/autoload.php';

 

/*
|--------------------------------------------------------------------------
| Turn On The Lights
|--------------------------------------------------------------------------
|
| We need to illuminate PHP development, so let us turn on the lights.
| This bootstraps the framework and gets it ready for use, then it
| will load up this application so that we can run it and send
| the responses back to the browser and delight our users.
|
*/

 

$app = require_once dirname(dirname(__FILE__)).'/laravel/bootstrap/app.php';



 

// بازنویسی تابع public_path
$app->bind('path.public', function() {
return __DIR__;
});








 

/*
|--------------------------------------------------------------------------
| Run The Application
|--------------------------------------------------------------------------
|
| Once we have the application, we can handle the incoming request
| through the kernel, and send the associated response back to
| the client's browser allowing them to enjoy the creative
| and wonderful application we have prepared for them.
|
*/

 

$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);

 

$response = $kernel->handle(
$request = Illuminate\Http\Request::capture()
);

 

$response->send();

 

$kernel->terminate($request, $response);
۱۵ آذر ۹۷ ، ۰۹:۴۰ ۰ نظر موافقین ۰ مخالفین ۰
مهندس مهدی حسامی

اتصال به مای اس کیو ال 8 (mysql 8) با لاراول

در نسخه 8 مای اس کیو ال ما شاهد تغییرات اساسی در ساختار داده ای بانک اطلاعاتی هستیم

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

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

Illuminate\Database\QueryException  : SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client (SQL: select * from information_schema.tables where table_schema = laravel_tut and table_name = migrations)

  at /Users/home/Projects/laravel_tut/vendor/laravel/framework/src/Illuminate/Database/Connection.php:664
    660|         // If an exception occurs when attempting to run a query, we'll format the error
    661|         // message to include the bindings with SQL, which will make this exception a
    662|         // lot more helpful to the developer instead of just the database's errors.
    663|         catch (Exception $e) {
  > 664|             throw new QueryException(
    665|                 $query, $this->prepareBindings($bindings), $e
    666|             );
    667|         }
    668|

  Exception trace:

  1   PDOException::("PDO::__construct(): The server requested authentication method unknown to the client [caching_sha2_password]")
      /Users/home/Projects/laravel_tut/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

  2   PDO::__construct("mysql:host=127.0.0.1;port=3306;dbname=laravel_tut", "root", "fdgkadgaf9g7ayaig9fgy9ad8fgu9adfg9adg", [])
      /Users/home/Projects/laravel_tut/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

 

دلیل اش اینه که لاراول یا بهتر بگم php از caching_sha2_password

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

ALTER USER 'yourusername'@'localhost'
IDENTIFIED WITH mysql_native_password BY 'new_password'

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

موفق و موید باشید.

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

 

 

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

تعیین حداکثر زمان (time out) برای کلاس PDO در لاراول

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

شاید شما هم در پروژه های خودتون قصد داشته باشید به یک سرور خارجی (دیتابیس) متصل بشید و عملیات CRUD بروی آن انجام بدید و یا حتی میخواهید به دیتابیس لوکال یا محلی خودتون متصل بشید ولی این سرور بنابه دلایلی قطع میباشد ، در حالت پیشفرض لاراول بر اساس حداکثر زمان مجاز اجرای دستورات که بر روی برنامه وبسرور تنظیم شده عمل کرده و شمارو برای مدت زمان زیادی منتظر خواهد گذاشت تا در به دیتابیس متصل شود و برنامه شما یجورایی هنگ خواهد کرد و کنترل اون از دست شما خارج خواهد شد که این سبب میشه تا برای دستورات دیگه بعد از دستور اتصال، زمان انتظار زیادی جهت اجرا شدنشون بوجود بیاد و سرعت سیستم بشدت پائین خواهد اومد. یا در سناریویی دیگه شما قصد دارید مثلا آنلاین بودن 5 تا سرور رو چک کنید ، خب شما با یک پارامتر یا آپشن در کلاس PDO میتونید یک زمان حداکثری برای منتظر موندن این کلاس جهت ارتباط تعیین کنید تا در صورت موفقیت آمیز بودن اتصال عملیات مورد نظر شما بر روی دیتابیس انجام بشه و در صورت عدم اتصال هم سریع به شما یک خطایی رو برگردونه که با هندل کردن خطا سرور رو از حالت کرش نجات بدید.

برای اینکار وارد مسیر زیر در پروژه لاراولی (5.7) خود شوید و در داخل فایل connector.php حداکثر زمان انتظار برای اتصال رو در قسمت آپشن های کلاس اتصال تعیین کنید :

 

تایم اوت pdo

 
تنظیم زیر رو اضافه نمائید :
تایم اوت اتصال در لاراول
 
در پایان هم دستور زیر رو در کامپوزر اجرا کنید تا اتولود دوباره جنریت کنه همه چی رو

composer dump

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

فراخوانی توابع در داخل ویوها در لاراول 5.7

برای فراخوانی یک تابع در داخل view ها پیشنهاد لاراول به شما این است که ابتدا یک فایل با نام helper.php در مسیر زیر ایجاد کنید :

app/Http/helpers.php

حال وارد فایل composer.json در پروژه لاراولی خود شوید و تغییرات زیر را در قسمت autoload ایجاد کنید :

"autoload": {
"files": [
"app/Http/helpers.php"
]
},

 

در اینجا شما فایل خودتونو برای لاراول مشخص کردید و حالا نوبت به این میرسه که این تغییرات رو بصورت کامل به لاراول اعلام کنید که چنین فایلی ایجاد شده و در فایل composer.json معرفی شد.

برای اینکار در cmd خود وارد مسیر پروژه لاراولی خودتون بشید و دستور زیر رو بنویسید :

$ composer dump

کارتون تموم شده و الان میتونید در داخل فایل helpers.php تمامی فانکشن هایی که قصد دارید در کل پروژه (ویوها) بهشون دسترسی داشته باشید داخل این فایل تعریف کنید.

برای دسترسی به فانکشن ها هم در داخل ویو کافیست اسم اون تابع رو فراخوانی کنید . (به همین راحتی )

<?php echo getReminderDays(); ?>

 

موفق و موید باشید.

مهدی حسامی

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

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

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

آی دی کانال تلگرامی سفارش پروژه :

https://t.me/sefaresh_projects

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

مشکل عدم دسترسی به روت admin در لاراول

شاید شما هم به این مشکل بر خورد کنید که وقتی روت جدیدی با نام admin در لاراول ایجاد می کنید ، نمی تونید بهش دسترسی داشته باشید. 

منظورم همون چیزی که در تصویر زیر میبنید :

 

Route::group(['prefix' => 'admin'], function(){
 
Route::get('/index', 'AdminController@index');
Route::get('/comments', 'AdminController@comments');
 
});

دلیل این اتفاق اینه که شما داخل فولدر public پروژه یه پوشه بنام admin ایجاد کردید.

خب نباید هم اجازه بده چون تنظیمات وب سرور به گونه ای هست که این امر جز محدودودیت هاست.

برای رفع مشکل دو راهکار وجود داره:

1 - تغییر نام پوشه admin

2 - اصلاح فایل .htaccess

 

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

کدهای زیر رو به فایل .htaccess پروژه خودتون اضافه کنید:

# Handle Front Controller...
# RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]`
۰۹ مهر ۹۷ ، ۱۶:۴۹ ۳ نظر موافقین ۰ مخالفین ۰
مهندس مهدی حسامی