🚀 تخفیف ۳۵٪ + ۳.۵ میلیون هدیه! برنامه‌نویسی رو الان شروع کن - فقط امروز!
۰ ثانیه
۰ دقیقه
۰ ساعت
۱۰ دانشجوی سون‌لرن
Class Load Error در سیستم عامل مک
جامعه پی اچ پی ایجاد شده در ۱۰ تیر ۱۴۰۲

وقت بخیر...

در مبحث autoload با ارور Class Load Error در سیستم عامل مک مواجه شدم که در یکی از پرسش پاسخ‌های گذشته توضیح دادین که :

برای بحث autoloading قبل از شرط از str_replace بدید :

$class_file = str_replace('\\\\', '/', $class_file);

اما با اعمال این تغییرات با ارور دیگه ای مواجه شدم لطفا راهنمایی بفرمایید.با تشکر


spl_autoload_register(function ($class){
    $class_file =  __DIR__ . str_replace('\\\\', '/',$class.php);
    if(file_exists($class_file) and is_readable($class_file)){
        include $class_file;
    }else{
        die("Class Load Error ...");
    }
});

Warning: Use of undefined constant php - assumed 'php' (this will throw an Error in a future version of PHP) in /Applications/XAMPP/xamppfiles/htdocs/pr/Exporter/autoload.php on line 4

Class Load Error ...

سلام،

.php باید در رشته قرار بگیرد و با $class کانکت شود.

محسن موحد ۱۱ تیر ۱۴۰۲، ۰۸:۱۸

سلام مجدد... انجام دادم و باز هم با همین ارور مواجه شدم ! اطلاع ارسالی رو ملاحظه کنید $class مطابق ویدئو آموزشی کانکت شده

Radmehr ۱۱ تیر ۱۴۰۲، ۱۱:۱۸
$class_file =  __DIR__ . str_replace('\\\\', '/', "$class.php");
محسن موحد ۱۱ تیر ۱۴۰۲، ۱۱:۵۳

باز هم با ارور Class Load Error ... مواجه شدم .لازم به ذکر این مساله رو توی سورسی که کنار ویدئو قرار دادین توی سیستم عامل مک با این ارور Class Load Error ... مواجه هستم لطفا بررسی و راهنمایی بفرمایید.تشکر06c2-Screenshot 1402-04-11 at 15.31.20.png

<?php
spl_autoload_register(function ($class){
    $class_file =  __DIR__ . str_replace('\\\\', '/','$class.php');
    if(file_exists($class_file) and is_readable($class_file)){
        include $class_file;
    }else{
        die("Class Load Error ...");
    }
}); 
Radmehr ۱۱ تیر ۱۴۰۲، ۱۲:۱۱

ببینید single quote با double quote متفاوت هست، شما اگر بخواید از سینگل کوت استفاده کنید باید به این شکل بنویسید:

$class_file =  __DIR__ . str_replace('\\\\', '/', $class . '.php');

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

echo $class_file;

ببینم چه چیزی در if قرار میگیرد و چک میشود. بعد اگر مشکلی وجود داشته باشد متوجه میشوم.

Class Load Error جمله ایست که از قسمت else چاپ شده است و خطای گرامری نیست بلکه چون if اجرا نشده، پس else اجرا شده است.

if چرا اجرا نشده است؟ چون file مورد نظر پیدا نشده یعنی آدرس درست نبوده است.

محسن موحد ۱۱ تیر ۱۴۰۲، ۱۳:۱۳

هم با  single quote و هم double quote امتحان کردم

توضیح دادم خدمت شما حتی توی سورسی که وب سایتتون قرار داده با Class Load Error ... مواجه میشیم

این مشکل رو قبلا یک کاربر دیگه هم ثبت و عنوان کردن.

بهر روی طبق چیزی که شرح دادم و توضیحات شما که همون راه حلی که اقای گازری توی پرسش پاسخ کاربر قبلا توضیح دادن کمکی به من نکرد

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

تشکر

Radmehr ۱۱ تیر ۱۴۰۲، ۱۳:۳۲

ما الان رو ویندوز صحبت نمیکنیم. و str_replace اگر بک اسلشی وجود داره مثلا در namespace تبدیل به slash میکنه که مسیردهی سیستم عامل‌های یونیکسیه.

برای اینکه بتونم دقیق راهنماییتون کنم بهتره پروژتون رو zip و پیوست کنید تا براساس فولدربندی و کلاس هایی که دارید بررسی کنم.

محسن موحد ۱۱ تیر ۱۴۰۲، ۱۳:۴۴

سپاس ... پیوست شد،

Radmehr ۱۱ تیر ۱۴۰۲، ۱۳:۴۸

با اجرای این دستور و دیدن آدرس، تمامی مشکلات دیده میشود:

echo $class_file;

خروجی که میدهد:

/var/www/.../ExporterExporter/TextExporter.php

به بعد از سه نقطه نگاه کنید، میبینید دوتا ExporterExporter در کنار هم قرار گرفته که اولین مشکل مشخص میشود که باید یک اسلش بینشون بیاد، پس دستور به این شکل میشود:

$class_file =  __DIR__ . '/' . str_replace('\\\\', '/', $class . '.php');

حالا خروجی میشود:

/var/www/.../Exporter/Exporter/TextExporter.php

دو Exporter/Exporter اشتباه است، همچین فولدر بندی نداریم، علت این موضوع این است که فایل autoload.php را در فولدر Exporter گذاشتید و __DIR__ استفاده کردید خب این دستور از ریشته تا Exporter را میدهد و در process.php لاین 17 بعنوان namespace مجدداً Exporter را نوشتید. پس autoload.php را بیاورید یک فولدر به عقب در کنار index.php در روت پروژتون.

فایل autoload.php را جابجا میکنم و لاین 3 process.php را اصلاح میکنم (include autoload.php) و خروجی به این شکل میشود:

/var/www/.../Exporter/TextExporter.php

و پروژه بدرستی اجرا میشود.

بهترین پاسخ
محسن موحد ۱۱ تیر ۱۴۰۲، ۱۴:۱۷