احتمالا داستان از این قرار است که شما به تازگی از لاراول 6 و یا بالاتر استفاده کردهاید، اما پس از استفاده از این نسخه از لاراول در هنگام مراجعه به آدرس پروژه با خطایی مشابه عبارت زیر مواجه میشوید:
The Process class relies on proc_open, which is not available on your PHP installation
این پیام به آن معناست که لاراول در این نسخه به تابع proc_open نیاز دارد اما این تابع یکی از توابع پُر ریسک محسوب میشود و معمولا در میزبانی وب اشتراکی به دلایل امنیتی غیر فعال است. پس چگونه باید از این مشکل عبور کنیم؟! به ادامه مقاله توجه فرمایید...
دلیل استفاده پیشفرض لاراول 6 از proc_open
دلیل اول: این تابع به صورت پیشفرض زمانی استفاده میشود که سرویس Flare error reporting در حالت Debug Mode فعال شده باشد. اما بواقع ما نمیخواهیم از بخش Debug Mode استفاده کنیم و در واقع بخش موثری در لاراول محسوب نمیشود. پس کافیست Debug Mode را غیر فعال کنیم.
دلیل دوم: استفاده از schedule:run برای اجرای فرامین زمانبندی شده
نحوه رفع خطا
ابتدا به نحوه رفع مشکل برای دلیل اول میپردازیم:
1- ابتدا بایستی بخش کانفیگ Flare را پابلیش کنیم. پس فرمان زیر را با جایگزین کردن USERNAME هاست خود از طریق CronJob اجرا کنید:
/usr/bin/php /home/USERNAME/public_html/artisan vendor:publish --tag=flare-config
php artisan vendor:publish --tag=flare-config
2- حال فایل موجود در مسیر config/flare.php که در محل نصب لاراول ایجاد شده است را جهت ویرایش باز کنید.
3- در قسمت reporting مقدار 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,
],
حال به نحوه رفع مشکل برای دلیل دوم میپردازیم:
چنانه با طی مراحل فوق مشکل برطرف نشد احتمالا دلیل این است که شما در پروژه خود از قابلیت schedule استفاده کردهاید که نیازمند تابع proc_open میباشد. برای رفع مشکل کافیست به جای استفاده از فرمان schedule:run مستقیما کامند مورد نظر را از طریق cronjob اجرا کنید:
مثال:
فرمان زیر:
/usr/local/bin/php /home/USERNAME/public_html/artisan schedule:run >> /dev/null 2>&1
به شکل زیر در CronJob تغییر یابد:
/usr/local/bin/php /home/USERNAME/public_html/artisan command:name >> /dev/null 2>&1
کار تمام شد! حال پروژه شما بدون خطای proc_open در دسترس قرار خواهد گرفت.