خطأ فادح: اتصل على وظيفة غير محددة mcrypt_encrypt ()

StackOverflow https://stackoverflow.com/questions/2604435

  •  25-09-2019
  •  | 
  •  

سؤال

ملاحظة: لم يتم تحديث دعم المكتبات MCRYPT على مدار سنوات ، ولم يعد يجب اعتبار MCRYPT طريقة قابلة للحياة أو آمنة لتشفير البيانات. والأكثر من ذلك ، تم إهمال McRypt في PHP 5 ، وتم إزالته بالكامل في PHP 7. إذا كان لديك أي رمز يدير Mcrypt ، فيجب أن يعيد تشغيله لاستخدام مكتبة تشفير أكثر حداثة.


هل يعرف أي شخص لماذا رسالة الخطأ هذه: (Call to undefined function mcrypt_encrypt() ) يعرض عندما أقوم بتشغيل الكود التالي أدناه؟

هل أفتقد بعض الخطوات ربما أي إعداد في PHP يجب أن أفعله قبل أن يعمل هذا الرمز؟

$key = 'password to (en/de)crypt';
$string = 'string to be encrypted';

$test = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key),
            $string, MCRYPT_MODE_CBC, md5(md5($key)));
هل كانت مفيدة؟

المحلول

ما كان يعمل بالنسبة لي مع الإصدار PHP 5.2.8 ، كان الانفتاح php.ini والسماح php_mcrypt.dll التمديد عن طريق إزالة ;, ، أي التغيير:

;extension=php_mcrypt.dll ل extension=php_mcrypt.dll

نصائح أخرى

إذا كنت قد قمت بتحديثها مؤخرًا إلى Ubuntu 14.04 ، إليك الإصلاح لهذه المشكلة:

$ sudo mv /etc/php5/conf.d/mcrypt.ini /etc/php5/mods-available/
$ sudo php5enmod mcrypt
$ sudo service apache2 restart

للنوافذ

;extension=php_mcrypt.dll to extension=php_mcrypt.dll 
 then restart your apache server

ل redhat

sudo yum install php55-mcrypt //if php5.5
sudo yum install php-mcrypt //if less than 5.4
sudo service httpd restart //if apache 2.4
sudo /etc/init.d/httpd restart //if apache 2.2 or less

لأوبونتو

sudo apt-get install php5-mcrypt
sudo service apache2 restart //if server not reloaded automatically 

ما زلت لا تعمل؟

sudo php5enmod mcrypt && sudo service apache2 إعادة التشغيل

ليس لديك مكتبة Mcrypt مثبتة.

يرى http://www.php.net/manual/en/mcrypt.setup.php للمزيد من المعلومات.

إذا كنت تعمل في استضافة مشتركة ، فيمكنك أن تطلب من مزودك تثبيته.


في OSX ، يمكنك بسهولة تثبيت Mcrypt عبر Homebrew

brew install php54-mcrypt --without-homebrew-php

ثم أضف هذا الخط إلى /etc/php.ini.

extension="/usr/local/Cellar/php54-mcrypt/5.4.24/mcrypt.so"

إذا كنت تستخدم PHP 7.2 أو UP:

تم إهمال هذه الوظيفة في 7.1.0 PHP ، وإزالتها في PHP 7.2.0.

مصدر: http://php.net/manual/en/function.mcrypt-encrypt.php

لذلك عليك استبدال رمز PHP وإيجاد حل بدون Mcrypt.

أو ، اكتشفت للتو أنه لا يزال بإمكانك استخدام Mcrypt في PHP 7.2.0 ، ولكن عليك تثبيته كمكتبة مجتمع Extension PHP. ((https://pecl.php.net/)

على توزيع Debian/Ubuntu Linux:

sudo apt-get -y install gcc make autoconf libc-dev pkg-config
sudo apt-get -y install php7.2-dev
sudo apt-get -y install libmcrypt-dev

من ثم:

sudo pecl install mcrypt-1.0.1

مصدر: https://www.techrepublic.com/article/how-to-install-mcrypt-for-php-7-2/

تحت أوبونتو ، واجهت المشكلة وحلها

$ sudo apt-get install php5-mcrypt
$ sudo service apache2 reload

على Ubuntu 14.10:

تثبيت الوحدة النمطية Mcrypt

sudo apt install php5-mcrypt

تمكين الوحدة النمطية Mcrypt على Apache2

sudo a2enmod mcrypt

تكوين وحدة إعادة التحميل

sudo service apache2 restart

على Linux Mint 17.1 Rebecca - اتصل على وظيفة غير محددة MCRYPT_CREATE_IV ...

تم حلها بإضافة السطر التالي إلى php.ini

extension=mcrypt.so

بعد ذلك

service apache2 restart

حلها...

كان لدي نفس المشكلة ل PHP 7 نسخة من مفقود Mcrypt.

هذا عمل بالنسبة لي.

sudo apt-get update
sudo apt-get install mcrypt php7.0-mcrypt
sudo apt-get upgrade
sudo service apache2 restart (if needed)

هل تم تمكين Mcrypt؟ يمكنك استخدام phpinfo() لمعرفة ما إذا كان هو.

شيء آخر: إذا كنت تقدم PHP عبر خادم ويب مثل Apache ، فحاول إعادة تشغيل خادم الويب. سيؤدي ذلك إلى "إعادة تعيين" أي وحدات PHP التي قد تكون موجودة ، وتنشيط التكوين الجديد.

على افتراض أنك تستخدم Debian Linux (أنا أستخدم Linux Mint 12 ، كانت المشكلة على Ubuntu 12.04.1 LTS Server I Ssh'ed.)

أقترح أخذ نصيحة Dkamins والتأكد من تثبيت McRypt ونشط على تثبيت PHP5 الخاص بك. استخدم "sudo apt-get install php5-mcrypt" للتثبيت. ملاحظاتي أدناه.

باستخدام إصدار PHP PHP Version 5.3.10-1ubuntu3.4, ، إذا قمت بفتح phpinfo () كما هو مقترح من قبل John Conde ، وهو ما تقوم به من خلال إنشاء ملف اختبار على خادم الويب (على سبيل المثال إنشاء صفحة الحالة testphp.php مع المحتويات فقط "" يمكن الوصول إليها في أي مكان على الخادم عبر المتصفح)

لم أجد أي وجود لحالة ممكّنة أو معطلة على صفحة الحالة عند فتحها في المتصفح. عندما فتحت ملف php.ini ، الذي ذكره @Anthony Forlone ;extension=php_mcrypt.dll to extension=php_mcrypt.dll

لقد قمت بتبديل ذلك ذهابًا وإيابًا وأعدت تشغيل Apache (أقوم بتشغيل Apache2 ويمكنك إعادة التشغيل في الإعداد الخاص بي sudo /etc/init.d/apache2 restart أو عندما تكون في هذا الدليل فقط sudo restart أعتقد) مع التغيير وبدون تغيير ولكن لا يذهب كل شيء. لقد أخذت @ @ @نصيحة وذهبت لتثبيت الحزمة مع "sudo apt-get install php5-mcrypt" ثم إعادة تشغيل Apache على النحو الوارد أعلاه. ثم اختفى خطأي وعمل طلبي بشكل جيد.

إذا كنت تستخدم php5-fpm do releder لإعادة تشغيله ، بعد تثبيت Mcrypt

خدمة إعادة تشغيل PHP5-FPM

إذا كنت تستخدم Ubuntu 14.04 إليك الإصلاح لهذه المشكلة:

أولاً ، تم تثبيت PHP5-MCRYP بالفعل apt-get install php5-mcrypt

إذا تم تثبيته ، فما عليك سوى تشغيل هذا الأمر أو تثبيته وتشغيله هذا الأمر

$ sudo php5enmod mcrypt
$ sudo service apache2 restart

آمل ان يعمل.

لـ Linux (Fedora)

yum -y install php-mcrypt

قم بتمكين الوحدة عن طريق إضافة: 'extension = mcrypt.so' إلى php.ini. (/etc/php.ini)

systemctl restart httpd.service

منتهي!

بالنسبة لي ، ساعدت في إلغاء تثبيت Mcrypt مع:

sudo apt-get purge php5-mcrypt

وببساطة إعادة تثبيته:

sudo apt-get install php5-mcrypt

ولا تنسى إعادة تشغيل Apache كما هو موضح أعلاه.

لا أعرف لماذا وكيف كان هذا مختلفًا في حالتي (باستخدام VM مع PHP55 المتقدمة) ، ولكن ربما سيساعد هذا شخصًا آخر. واجهت أيضًا هذه المشكلة مع بعض الوحدات الأخرى مثل XCache ...

تحقق وتثبيت php5-mcrypt:

sudo apt-get install php5-mcrypt
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top