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



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

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

 

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

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

MAIL_DRIVER=smtp

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

MAIL_DRIVER=sendmail

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

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

federated

 

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

[mysqld]
federated

 

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

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

 

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

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


دوستان عزیز شاید شماهم قصد داشته باشید 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

 

 

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

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

 

 

 


کل فایلهای پروژه رو غیر از 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);

جهت ایجاد لینک ارجاع به مخزن فایل های لاراول یا storage بر روی کامپیوتر لوکال در CMD عبارت زیر رو وارد کنید :

php artisan storage:link
 

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

 

<?php

 

$targetFolder = dirname(dirname(__FILE__)).'/LaravelFiles/storage/app/public';
$linkFolder = dirname(dirname(__FILE__)).'/myaddondomain.ir/storage';
symlink($targetFolder,$linkFolder);
echo 'Success';

 

?>

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

app/Exceptios/Handler.php

و متد زیر رو به کلاس داخلش اضافه کنید و ساختار بازگشتی رو خودتون با سلیقه خودتون تغییر بدید :

 

    protected function unauthenticated($request, AuthenticationException $exception)

    {

        if ($request->expectsJson()) {

            /** return response()->json(['error' => 'Unauthenticated.'], 401); */

                $response = ['status' => 'error','message' => 'You pass invalid token'];

                return response()->json($response);

        }

        return redirect()->guest('login');

    }


در لاراول شما برای تغییر پیش فرض پوشه ی public به public_html شما نیاز دارید که در دو فایل تغییراتی ایجاد کنید تا لاراول متوجه شود که اطلاعات را از پوشه ی public_html بخواند.

همانطور که می دانید بصورت پیش فرض در لاراول روت پروژه پوشه ی public می باشد. اما در برخی مواقع مثلا در هنگام استفاده از cpanel و directAdmin باید روت پیش فرض برنامه پوشه ی public_html باشد.

در لاراول شما برای تغییر پیش فرض پوشه ی public به public_html شما نیاز دارید که در دو فایل تغییراتی ایجاد کنید تا لاراول متوجه شود که اطلاعات را از پوشه ی public_html بخواند.

برای اینکار ابتدا پوشه ی index.php موجود در فایل public پروژه ی خود را باز نمایید خط زیر را پیدا کنید:

$app = require_once __DIR__.'//bootstrap/app.php';

پس از خط بالا کد زیر را قرار دهید و قایل مربوطه را ذخیره کنید:

// set the public path to this directory
$app->bind('path.public', function() {
    return __DIR__;
});

 

حال فایل \App\Providers\AppServiceProvider.php را باز کنید و کد زیر را در متد register بصورت زیر قرار دهید:

public function register()
{
    // .

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

 

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


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

 

 
/usr/local/bin/php /home/my_project_path/artisan queue:listen --tries=10

 

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

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

این هم لینک مقاله اش :

نمایش


سلام دوستان . برای فرمت بندی اعدادی که نقش پول رو در صفحات html شما رو دارند با زبان جاوا اسکریپت به شرح زیر میباشد :

 

<script>
// Create our number formatter.
var formatter = new Intl.NumberFormat('fa-IR', {
currency: 'IRR',
});
 
 
formatter.format(2500); // خروجی 2,500
 
</script>

 


برای ارسال ایمیل حاوی لینک تایید در زمان ثبت نام کاربر تغییراتی را در مدل User باید انجام بدید و یکسری از موارد دیگر رو نیز لازم است تا انجام بدید.

وارد مدل User خود شوید و متد زیر را به آن اضافه نمائید :

public function sendEmailVerificationNotification()
{
dispatch(new SendVerificationEmailJob($this));
}

 

البته توجه کنید قبلش یک job برای ارسال ایمیل تاییدیه ایجاد کنید که من ایجاد کردم و اسمشو گذاشتم SendVerificationEmailJob  و سپس وارد job مربوطه شوید و متد handle این کلاس رو به شکل زیر تغییر بدید :

public function handle()
{
$this->user->notify(new VerifyEmailQueued($this->user));
}

 

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

محتویات داخل فایل job به شکل زیر خواهد بود :

<?php

 

namespace App\Jobs;

 

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Support\Facades\Mail;
use App\Mail\ConfirmEmail;
use App\Notifications\VerifyEmailQueued;

 

class SendVerificationEmailJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

 

protected $user;

 

public function __construct($user)
{
$this->user = $user;
}

 

public function handle()
{
$this->user->notify(new VerifyEmailQueued($this->user));
}
}

 

حالا وارد فایل نوتیفیکیشن میشیم و در کانستراکتور این کلاس مقدار متغییر  user رو دریافت میکنیم 

public function __construct($user)
{
$this->user = $user;
}

سپس متد toMail رو هم به صورت زیر بنویسید :

public function toMail($notifiable)
{
$temporarySignedURL = URL::temporarySignedRoute('verification.verify', \Carbon\Carbon::now()->addMinutes(60), ['id' => $notifiable->getKey()]);
return (new MailMessage)
->subject(sprintf("فعالسازی حساب کاربری"))
->action('فعالسازی حساب کاربری',$temporarySignedURL)
->line('Thank you for using our application!');
}

 

 

 

 


تبلیغات

محل تبلیغات شما
محل تبلیغات شما محل تبلیغات شما

آخرین وبلاگ ها

آخرین جستجو ها

ارائه سراسري سيم کارت پژوهشهای علوم قرآن و حدیث اپليکيشن موبايل وبلاگ مهدوی مهدی جانان (عج) Jose موگیلکم گیلکی گب زنم