مرکز آموزش

رفع خطای RecursiveDirectoryIterator::hasChildren(): open_basedir restriction in effect. File(/home/USER/access-logs) is not within the allowed path(s) در لاراول

  • 63

گاها اتفاق می افتد که پس از بروز رسانی لاراول و یا ایجاد یک تغییر و آپلود اطلاعات جدید در پروژه لاراول وبسایت شما گاها با خطای زیر مواجه می شود:

RecursiveDirectoryIterator::hasChildren(): open_basedir restriction in effect. File(/home/USER/access-logs) is not within the allowed path(s): (/home/USER:/usr/lib/php:/usr/local/lib/php:/tmp)
in ExcludeDirectoryFilterIterator.php (line 73)
at HandleExceptions->handleError(2, 'RecursiveDirectoryIterator::hasChildren(): open_basedir restriction in effect. File(/home/USER:/usr/lib/php:/usr/local/lib/php:/tmp)', '/home/USER/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php', 73, array())
at RecursiveDirectoryIterator->hasChildren()in ExcludeDirectoryFilterIterator.php (line 73)
at ExcludeDirectoryFilterIterator->hasChildren()
at FilterIterator->next()
at FilterIterator->next()
at FilterIterator->next()in Filesystem.php (line 420)

دلیل خطا

این خطا اعلام می کند که پروژه شما احتیاج دارد تا به مسیر access_log واقع در Home Directory هاست شما دسترسی داشته باشد. حال اینکه علی القاعده لاراول خود مسیر ثبت لاگ مجزا دارد و مسیر access_log نیز برای ثبت گزارشات سیستمی و وب سرور در هاست مورد استفاده قرار گرفته و فقط از طریق بخش Metrics > Raw access واقع در پنل هاست قابل مشاهده و دسترس است. اما پس اشکال کجاست؟
خیلی سادست! اشکال در نسخه مورد استفاده PHP است. به خصوص در مواقعی که شما محتویات پوشه public را در Public_html و سایر اطلاعات اصلی لاراول را یک مسیر عقب تر در شاخه Home آپلود کرده باشید.

 

نحوه رفع خطا

برای رفع مشکل باید نسخه PHP را با استفاده از راهنمای زیر به 7.2 یا بالاتر ارتقا دهید:
نحوه تغییر نسخه PHP

اما ممکن است سوال کنید که این کار را انجام دادید اما پس چرا هنوز خطا برطرف نشده است؟! چنانچه از خدمات HiSupport استفاده می فرمایید در هنگام تنظیم نسخه PHP به 7.2 یک کد شبیه کد زیر به طور اتوماتیک در فایل .htaccess واقع در public_html اضافه می شود:

# php -- BEGIN cPanel-generated handler, do not edit
# Set the “ea-php72” package as the default “PHP” programming language.
<IfModule mime_module>
AddHandler application/x-httpd-ea-php72 .php .php7 .phtml
</IfModule>
# php -- END cPanel-generated handler, do not edit
شما هیچگاه نباید فایل .htaccess یا کد فوق را از آن حذف کنید. برای دسترسی به فایل .htaccess از این راهنما استفاده کنید.

اما گاها فایل .htaccess و حتی کد نسخه PHP نیز در مسیر public_html وجود دارد و خطا کماکان برقرار است!! دلیل و نکته در این است که شما فایل های اصلی لاراول را در یک مسیر عقب تر در شاخه Home قرار داده اید. بنابراین لازم است کد زیر را که مربوط به PHP 7.2 است علاوه بر مسیر public_html در شاخه Home نیز قرار دهید. بنابراین این کد را کپی کرده و به آخر فایل .htaccess واقع در مسیر Home نیز اضافه کنید.

# php -- BEGIN cPanel-generated handler, do not edit
# Set the “ea-php72” package as the default “PHP” programming language.
<IfModule mime_module>
AddHandler application/x-httpd-ea-php72 .php .php7 .phtml
</IfModule>
# php -- END cPanel-generated handler, do not edit
توجه فرمایید فایل .htaccess به صورت پیشفرض مخفی یا Hidden است و باید از طریق این راهنما به آن دسترسی پیدا کنید. اما اگر فایل .htaccess در مسیر home وجود نداشت، خودتان ایجاد کنید.

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

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


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