امروز قصد دارم آموزش حل یک مشکل خاص در لاراول ورژن 6 که ممکن است برای برخی از دوستانی که قصد دارند این نسخه را به روی هاست های اشتراکی استفاده کنند با آن برخورد کنند را با هم بررسی کنیم و آن را برطرف سازیم پس در ادامه با این آموزش کوتاه اما کاربردی همراه ما باشید.
قبل از هر چیزی ابتدا بیاید با هم به بررسی دلیل رخ دادن این خطا بپرازیم. این خطا به دلیل فعال نبودن proc_open روی سروری که هاست اشتراکی شما روی آن قرار دارد اتفاق می افتد و این درحالی است که شما در کد خود به فعال بودن آن نیاز دارید. این مشکل در برخی از هاست های اشتراکی پیش می آید. برخی از هاست ها به دلایلی امنیتی proc_open را روی سرور خود غیرفعال می کنند ولی این مورد در برخی از هاست های اشتراکی فعال است.
بهتره بدونید که لاراول هم در آپدیت جدید در برخی از پکیج های symphony از این متد استفاده می کنه (مثلا در نسخه جدید Symfony Process) و گویا در پکیج نمایش خطایی که جدیدا برای لاراول 6 استفاده شده هم این مورد استفاده می شود. حالا فرض بگیرید شما در یک بخش از کد خود دارای خطا باشد حالا زمانی که سیستم نمایش خطا می خواهد خطا را به شما نمایش بدهد به دلیل استفاده از proc_open و عدم فعال بودن آن شما با این خطا مواجه می شوید! یک خطا کاملا ناخوشایند به این دلیل که علاوه اجرا نشدن کد مورد نظر شما حتی نمی توانید دلیل خطای رخ داده شده را پیدا کنید! خطای مورد بحث چیزی شبیه تصویر خطای زیر خواهد بود:
نکته: در نسخه جدید لاراول 6 از صفحه نمایش (خطایابی) جدید به نام Ignition استفاده می شود.
نکته ای که باید به آن اشاره کنم این است که به شکل پیشفرض بعد از ایجاد یک پروژه لاراول ورژن 6 و آپلود کردن آن در هاست شما هیچ مشکلی ندارید و با این خطا مواجه نخواهید شد و برنامه شما کاملا به درستی اجرا می شود و تا جایی که بنده بررسی کرده ام این مشکل دقیقا در زمانی که در کد خود خطایی نداشته باشید پیش نخواهد آمد. و تنهای زمانی که یک خطا در کد شما وجود داشته باشد به دلیل استفاده پکیج نمایش خطا از proc_open و فعال نبودن proc_open شما با این خطا روبه رو می شوید. هرچند این خطا شاید به دلایلی دیگر و در بخش های دیگری رخ بدهد (برای مثال نمونه های زیادی در سایت stackoverflow وجود دارند) اما در نسخه 6 لاراول رایج ترین مورد همین مورد است که ذکر شد.
حالا بیاید با هم به بررسی روش های رفع این خطا (در زمان وجود خطا در کد) بپردازیم:
اگر شما از یک سرور (مجازی یا سخت افزاری) استفاده می کنید می توانید به راحتی با فعال کردن این گزینه در php خود آن را فعال کنید. البته ممکن است برخی از هاست های اشتراکی برای شما امکان دسترسی به ssh را نیز فراهم کرده باشند که در این حالت هم شما می توانید به کمک ssh آن را فعال کنید تا مشکل شما برطرف بشود.
حالا اگر شما به ssh و سرور دسترسی ندارید یکی از روش هایی که می توانید این مشکل را حل کنید درخواست از مدیر سرور یا پشتیبانی هاستینگ خود برای فعال کردن proc_open است. اما مشکلی که ممکن است اینجا با آن روبه رو شوید این است که شاید مدیر سرور با درخواست شما برای فعال کردن proc_open مخالفت کند و در این حالت شما هیچگونه دسترسی برای فعال کرده آن نخواهید داشت و عملا باید قید فعال سازی آن را بزنید و این مشکل را به شکل دیگری حل کنید!
در نهایت شما ممکن است قید استفاده از proc_open را بزنید اما برای رفع این خطا در لاراول یک راه حل ساده و کاربردی وجود دارد که در زیر آن را بررسی می کنیم و با آن مشکل شما برطرف خواهد شد!
نکته: همانطور که در بالا ذکر شد دلیل خطا به خاطر صفحه خطای جدید لاراول است. اما چرا؟ دلیل آن استفاده صفحه Ignition از سرویس Flare است. بعبارتی هنگامی که سرویس گزارش خطای Flare در حالت اشکال زدایی فعال می شود ، این خطا را مشاهده خواهید کرد.
برای رفع این مشکل کافیست در فایل کانفیگ flare یک سری تغییرات را اعمال کنیم.
قبل از همه به کمک اجرای دستور زیر در ترمینال (در آدرس پروژه) فایل کانفیگ flare را در پوشه کانفیگ ایجاد کنید:
php artisan vendor:publish --tag=flare-config
بعد از آن به آدرس زیر بروید و فایل تنظیمات flare را برای ویرایش باز کنید:
config/flare.php
به دنبال مقدار collect_git_information بگردید و مقدار آن را از true به flase تغییر بدهید. کد شما چیزی شبیه به کد زیر خواهد شد:
'reporting' => [
'anonymize_ips' => true,
'collect_git_information' => false,
'report_queries' => true,
'maximum_number_of_collected_queries' => 200,
'report_query_bindings' => true,
'report_view_data' => true,
'grouping_type' => null,
],
بسته به نسخه لاراول شما ممکن است کد به شکل زیر باشد: (در نسخه های قدیمی تر)
'collect_git_information' => false
'reporting' => [
'anonymize_ips' => true,
'collect_git_information' => false,
'report_queries' => true,
'maximum_number_of_collected_queries' => 200,
'report_query_bindings' => true,
'report_view_data' => true,
],
در نهایت بعد از طی کردن فرایند بالا بایستی مشکل شما حل شده باشد و صفحه ی نمایش خطای خود لاراول به شما نمایش داده شود و حالا می توانید به سادگی خطای لاراول را برطرف کرده و در نهایت پروژه شما به درستی اجرا شود.
در ادامه سعی خواهیم کرد یک ویدیوی آموزشی برای این مطلب برای شما دوستان تولید کرده و در سایت قرار بدهیم.
نظر شما چیست؟ شما می توانید نظرات ،پیشنهادات و اطلاعات خود را در رابطه با این مطلب و موضوعات مربوط از طریق قسمت نظرات با ما و سایر بازدیدکنندگان در میان بگذارید.