مرکز آموزش

نحوه رفع خطای proc_open در لاراول

  • 138

احتمالا داستان از این قرار است که شما به تازگی از لاراول 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
فرایند زمانبندی CronJOb را بر روی یک دقیقه (* * * * *) تنظیم کنید تا پس از یک دقیقه از تعریف CronJob اجرا شود. اما پس از اجرا بلافاصله Cron Job را حذف کنید. (حذف Cron Job فراموش نشود.)
اگر از SSH برای اجرای فرمان استفاده می‌کنید به مسیر نصب لاراول مراجعه و فرمان زیر را اجرا کنید:
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

 

تفاوت فرمان اول و دوم در این است که در فرمان اول تمامی فرامین زمان بندی شده که در لاراول تعریف کرده‌اید با استفاده از فرمان schedule:run اجرا می‌شوند. اما در شکل دوم، به ازای هر فرمان زمان بندی شده بایستی یک CronJob مجزا تعریف کنید.

 

کار تمام شد! حال پروژه شما بدون خطای proc_open در دسترس قرار خواهد گرفت.

تمامی حقوق مادی و معنوی این مطلب متعلق به HiSupport است.
کپی برداری از مطالب تنها با ذکر منبع و لینک به وبسایت HiSupport بلامانع است.


آیا این آموزش به شما کمک کرد؟