رفع خطای ناسازگاری نسخه ionCube با PHP
خطاهایی مثل «requires a newer version of the ionCube Loader» یعنی نسل انکدری که فایل با آن ساخته شده از نسخه لودر روی سرور مقصد جلوتر است. راهحل یا آپدیت لودر سرور است یا انکد مجدد با نسل پایینتر؛ نه هر دو. در این مقاله انواع پیامهای خطای نسخه و راهحل دقیق هر کدام را میبینید.
این مقاله در یک نگاه
- قانون طلایی: لودر باید مساوی یا جدیدتر از نسل انکدر باشد.
- لودر جدید فایل قدیمی را میخواند، اما لودر قدیمی فایل جدید را نه.
- اگر به سرور دسترسی دارید، آپدیت لودر سادهترین راه است.
- اگر مقصد نامعلوم است، هنگام انکد نسل پایینتر انتخاب کنید.
- خطای نسخه PHP با خطای نسل انکدر فرق دارد و راهحلشان یکی نیست.
قانون سازگاری نسخهها
ionCube یک قانون ساده دارد که همه خطاهای نسخه از آن ناشی میشود: نسخه لودر روی سرور باید مساوی یا جدیدتر از نسل انکدری باشد که فایل با آن ساخته شده است.
دلیل این قانون فنی است. هر نسل انکدر قالب خروجی جدیدی معرفی میکند که لودرهای قبلی آن را نمیشناسند. قالب رو به جلو سازگار است، یعنی لودر نسخه ۱۵ میتواند خروجی نسلهای ۱۳ و ۱۴ را هم اجرا کند؛ اما لودر نسخه ۱۳ هیچ راهی برای خواندن خروجی نسل ۱۵ ندارد.
انواع پیام خطا و معنی هرکدام
تشخیص درست پیام، مسیر حل را کوتاه میکند. سه دسته اصلی وجود دارد و راهحل هر کدام متفاوت است.
| پیام خطا | معنی | راهحل |
|---|---|---|
| requires a newer version of the ionCube Loader | لودر سرور قدیمیتر از نسل انکدر است | لودر را آپدیت کنید یا با نسل پایینتر انکد کنید |
| was encoded for a different PHP version | فایل برای نسخه PHP دیگری ساخته شده | خروجی را برای نسخه PHP سرور بگیرید |
| corrupted file | فایل ناقص منتقل شده یا نسخه نامتناسب است | دوباره و به صورت باینری آپلود کنید |
| needs to be installed | لودر اصلا فعال نیست | راهنمای نصب لودر |
راهحل وقتی به سرور دسترسی دارید
اگر سرور در اختیار خودتان است یا مشتری دسترسی میدهد، سادهترین و بهترین راه آپدیت لودر است. بعد از آپدیت، همان فایل قبلی بدون هیچ تغییری اجرا میشود و نیازی به انکد مجدد نیست.
روی هاستهای کنترلپنلی معمولا کافی است ابزار سازنده را دوباره اجرا کنید؛ در دایرکتادمین دستور ./build ioncube و در سیپنل از طریق EasyApache. روی سرور بدون کنترلپنل باید فایل .so جدید را جایگزین کنید. مراحل کامل در بهروزرسانی نسخه ionCube Loader آمده است.
راهحل وقتی دسترسی ندارید
اگر محصول را به مشتری میفروشید و نمیدانید سرورش چه لودری دارد، نمیتوانید روی آپدیت حساب کنید. در این حالت باید سمت خودتان کار کنید.
راهحل این است که هنگام انکد، نسل انکدر پایینتری انتخاب کنید. خروجی نسل پایینتر روی طیف وسیعتری از سرورها اجرا میشود، چون هم لودرهای قدیمی و هم جدید آن را میشناسند. در سرویس ما میتوانید نسل انکدر و نسخه هدف PHP را دستی انتخاب کنید.
چطور از این خطا پیشگیری کنیم؟
| وضعیت | انتخاب پیشنهادی |
|---|---|
| سرور مقصد را میشناسم و بهروز است | جدیدترین نسل برای حداکثر امنیت |
| فروش عمومی به مقصد نامعلوم | نسل پایینتر برای حداکثر سازگاری |
| مشتری سازمانی با سرور قدیمی | نسل متناسب با لودر موجود سرور |
| چند مشتری با شرایط متفاوت | خروجی جداگانه برای هر گروه |
یک عادت خوب این است که پیش از تحویل، از مشتری بپرسید نسخه PHP و وضعیت لودر هاستش چیست. یک پیام کوتاه در ابتدای کار، از رفت و برگشتهای بعدی جلوگیری میکند. برای شناخت پایهایتر موضوع، ionCube Loader چیست و ionCube Encoder چیست را ببینید. اطلاعات رسمی نسخهها در سایت ionCube در دسترس است.
سوالات متداول
چرا لودر جدیدتر فایل قدیمی را میخواند اما برعکس نه؟
چون قالب بایتکد رو به جلو سازگار است؛ لودر جدید فرمتهای قدیمی را میشناسد ولی لودر قدیمی فرمت جدید را نمیشناسد.
بدون انکد مجدد میتوانم حلش کنم؟
بله، اگر به سرور دسترسی دارید فقط لودر را آپدیت کنید. همان فایل بدون تغییر اجرا خواهد شد.
برای سازگاری بیشتر چه نسلی انتخاب کنم؟
اگر مقصد نامعلوم است نسل پایینتر انتخاب کنید تا روی سرورهای بیشتری اجرا شود.
خطای نسخه PHP با خطای نسل انکدر فرق دارد؟
بله. اولی یعنی خروجی برای نسخه PHP دیگری ساخته شده و دومی یعنی لودر از نسل انکدر عقبتر است.
چطور بفهمم فایل با چه نسلی انکد شده؟
معمولا در پیام خطا اشاره میشود. اگر خودتان انکد کردهاید، نسل انتخابی در سوابق سفارش شما ثبت است.
مطالب مرتبط: بهروزرسانی لودر · سازگاری با PHP ۸.۳ و ۸.۴ · رفع خطای نبود لودر
PHP