خطأ فادح: اتصل على وظيفة غير محددة mcrypt_encrypt ()
سؤال
ملاحظة: لم يتم تحديث دعم المكتبات 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