Хорошим местом для начала является JavaDocs . Они охватывают это:
Брошено, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:
- Вызов метода экземпляра нулевого объекта.
- Доступ или изменение поля нулевого объекта.
- Выполнение длины null, как если бы это был массив.
- Доступ или изменение слотов с нулевым значением, как если бы это был массив.
- Бросать нуль, как если бы это было значение Throwable.
Приложения должны бросать экземпляры этого класса для указания других незаконных видов использования нулевого объекта.
Также, если вы попытаетесь использовать нулевую ссылку с
synchronized
, который также выдаст это исключение, за JLS :SynchronizedStatement: synchronized ( Expression ) Block
- В противном случае, если значение выражения равно null,
NullPointerException
.Как это исправить?
Итак, у вас есть
NullPointerException
. Как вы это исправите? Возьмем простой пример, который выдаетNullPointerException
:public class Printer { private String name; public void setName(String name) { this.name = name; } public void print() { printString(name); } private void printString(String s) { System.out.println(s + " (" + s.length() + ")"); } public static void main(String[] args) { Printer printer = new Printer(); printer.print(); } }
Идентифицирует нулевые значения
. Первый шаг - точно определить , значения которого вызывают исключение . Для этого нам нужно выполнить некоторую отладку. Важно научиться читать stacktrace . Это покажет вам, где было выбрано исключение:
Exception in thread "main" java.lang.NullPointerException at Printer.printString(Printer.java:13) at Printer.print(Printer.java:9) at Printer.main(Printer.java:19)
Здесь мы видим, что исключение выбрано в строке 13 (в методе
printString
). Посмотрите на строку и проверьте, какие значения равны нулю, добавив протоколирующие операторы или используя отладчик . Мы обнаруживаем, чтоs
имеет значение null, а вызов методаlength
на него вызывает исключение. Мы видим, что программа перестает бросать исключение, когдаs.length()
удаляется из метода.Трассировка, где эти значения взяты из
Затем проверьте, откуда это значение. Следуя вызовам метода, мы видим, что
s
передается сprintString(name)
в методеprint()
, аthis.name
- null.Трассировка, где эти значения должны быть установлены
Где установлен
this.name
? В методеsetName(String)
. С некоторой дополнительной отладкой мы видим, что этот метод вообще не вызывается. Если этот метод был вызван, обязательно проверьте порядок , что эти методы вызывают, а метод set не будет называться после методом печати. Этого достаточно, чтобы дать нам решение: добавить вызов
printer.setName()
перед вызовомprinter.print()
.Другие исправления
Переменная может иметь значение по умолчанию (и
setName
может помешать ему установить значение null):private String name = "";
Либо метод
printString
может проверить значение null например:printString((name == null) ? "" : name);
Или вы можете создать класс, чтобы
name
всегда имел ненулевое значение :public class Printer { private final String name; public Printer(String name) { this.name = Objects.requireNonNull(name); } public void print() { printString(name); } private void printString(String s) { System.out.println(s + " (" + s.length() + ")"); } public static void main(String[] args) { Printer printer = new Printer("123"); printer.print(); } }
См. также:
Я все еще не могу найти проблему
Если вы попытались отладить проблему и до сих пор не имеете решения, вы можете отправить вопрос для получения дополнительной справки, но не забудьте включить то, что вы пробовали до сих пор. Как минимум, включите stacktrace в вопрос и отметьте важные номера строк в коде. Также попробуйте сначала упростить код (см. SSCCE ).
Просто возглавьте кого-нибудь, кого это интересует. Я смог понять это. Это было намного проще, чем я думал. Под менеджером WHM перейдите по адресу: Главная страница >> Программное обеспечение >> EasyApache (Apache Update) >> Там у вас есть два варианта: «Профиль сборки» или «Настроить на основе профиля». Я пошел на Customize, чтобы сохранить текущую конфигурацию, а затем следовать инструкциям на странице. В конце концов было место для добавления и удаления php-модулей. Там вы найдете когда-нибудь модуль под солнцем. Просто выберите тот, который вы хотите, и перестройте профиль. Это было действительно так просто.
Надеюсь, это поможет кому-то!
Лучший способ:
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/php-mcrypt-5.3.3-3.el6.x86_64.rpm
yum localinstall php-mcrypt-5.3.3-3.el6.x86_64.rpm
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/libmcrypt-2.5.8-9.el6.x86_64.rpm
yum localinstall libmcrypt-2.5.8-9.el6.x86_64.rpm
или перейти к: http://dl.fedoraproject.org/pub/epel/6/x86_64/ для соответствия ваша версия проверяется с вашего info.php, это нормально - сделано!
установка php-mcrypt из Repoforge отлично работала для меня. Просто добавьте Repoforge из http://repoforge.org/ и просто запустите yum install php-mcrypt.
Есть два способа решить эту проблему:
Чтобы установить mcrypt из http://namhuy.net/641/centos-6-install-mcrypt-for-phpmyadmin.html
i386
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
x86_64
http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
, то просто используйте команду yum для установки пакета mcrypt
yum install php-mcrypt
Для меня мне пришлось добавить репозиторий EPEL. Именно здесь появился мой php-mcrypt:
[root@system ~]$ repoquery -i php-mcrypt
Name : php-mcrypt
Version : 5.3.3
Release : 1.el6
Architecture: i686
Size : 39225
Packager : Fedora Project
Group : Development/Languages
URL : http://www.php.net/
Repository : epel <----------
Summary : Standard PHP module provides mcrypt library support
Source : php-extras-5.3.3-1.el6.src.rpm
Description :
Standard PHP module provides mcrypt library support
Вы можете включить репо EPEL с инструкциями здесь:
Если вы хотите перекомпилировать PHP
с включением mcrypt
.
1. Insatll mcrypt
. libmcrypt-devel
из хранилищ третьей стороны EPEL, поэтому вы должны:
yum --enablerepo=extras install epel-release
yum install libmcrypt-devel
2. Добавьте --with-mcrypt
к вашим аргументам ./configure
:
./configure --with-mcrypt
3. Сборка и установка:
make & make install
У меня была такая же проблема, и я нашел, что предыдущие предложения дали мне достаточно информации, чтобы заставить ее работать на моем сервере. Следующее - это то, что я сделал:
1) Установить репозиторий EPEL (From: http://www.rackspace.com/knowledge_center/article/installing-rhel-epel-repo-on-centos -5x-or-6x ):
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
sudo rpm -Uvh remi-release-6*.rpm epel-release-6*.rpm
2) Установите его через:
yum update
yum install php-mcrypt*
yum update
обновил ссылку репозитория на моем сервере, затем вторая команда получила то, что мне было нужно:)
3) Перезагрузите свой веб-сервер. Для моей установки apache я сделал:
service httpd restart
Для меня это сработало: yum install php-mcrypt*
, а затем перезапустите службу httpd service httpd restart
Я попробовал решение @VenomFangs, но первый шаг мне не нужен. У меня уже установлена новая версия EPEL. Итак, первый шаг, следующий не был полезен, я поддержал моментальный снимок, который я сделал до внесения изменений, и я просто использовал команды для установки и перезагрузки выше.
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
sudo rpm -Uvh remi-release-6*.rpm epel-release-6*.rpm
Версия CentOS Linux 7.2.1511 (Core)
PS: Я знаю, что это не предмет, но если кому-то это нужно, ключевое слово может помочь. Мне нужно было сделать это из-за этой ошибки на prestashop. Два ключевых слова, которые я хотел бы использовать, чтобы найти эту информацию: «php_mycrypt.dll» «php_mcrypt.dll» Fatal error: Call to undefined function mcrypt_encrypt() in /classes/Rijndael.php on line 46
EDIT 10/06/2016: Еще одно решение Prestashop, чтобы попробовать «Расширенные параметры «Эффективность», «Шифрование» (FR: Chiffrement), "Use the custom BlowFish class."
вместо "Use Rijndael with mcrypt lib. (you must install the Mcrypt extension)."
У меня возникла слишком большая проблема при установке php-mcrypt с использованием epel-release-6-8.noarch.rpm.
Затем я попытался по-другому.
Получите php-mcrypt, используя «wget ftp://ftp.univie.ac.at/ system / linux / fedora / epel / 6 / x86_64 / php-mcrypt-5.3.3-3.el6.x86_64.rpm ".
Затем установите libmcrypt
Установленный php-mcrypt с использованием следующей команды
yum install php-mcrypt-5.3.3-3.el6.x86_64.rpm
У меня была такая же проблема в centos 6.5
Окончательное решение ниже работало для меня
-go до http://dl.fedoraproject.org/pub/epel / 6 / x86_64 / -иск для php-mcrypt ( http://dl.fedoraproject.org/pub/epel/6/x86_64/php-mcrypt-5.3.3-3.el6.x86_64 .rpm ) -execute wget http://dl.fedoraproject.org/pub/epel/6/x86_64/php-mcrypt-5.3.3-3.el6.x86_64.rpm -rpm -ivh php-mcrypt-5.3.3-3.el6.x86_64.rpm
, если есть какие-либо зависимости, которые вы можете скачать с помощью http://dl.fedoraproject.org/pub / EPEL / 6 / x86_64 /
Для меня ответ был:
1) Получить репозиции из
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
sudo rpm -Uvh remi-release-6*.rpm epel-release-6*.rpm
2) Установить его через:
sudo yum update
sudo yum install php-mcrypt*
3) Отредактируйте mcrypt.ini
sudo nano /etc/php.d/mcrypt.ini
добавьте это
extension=/usr/lib64/php/modules/mcrypt.so
Наконец 4) Перезагрузите ваш веб-сервер:
sudo service httpd restart
Я запускаю эти шаги в CentOS 6.3 (64) на Azure Из образа Microsoft Linux
Надеюсь, он вам поможет.
С наилучшими пожеланиями.
yum install php-mcrypt.x86_64
работал для меня вместо
yum install php-mcrypt
Сначала узнайте свою версию PHP. В моем случае 5.6.
php --version
PHP 5.6.27 (cli) (built: Oct 15 2016 21:31:59)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
Затем:
sudo yum search mcrypt
И выберите лучший один для вашей версии из списка, я использовал php56w-mcrypt
.
$ sudo yum search mcrypt
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
..... output truncated ....
libmcrypt-devel.i686 : Development libraries and headers for libmcrypt
libmcrypt-devel.x86_64 : Development libraries and headers for libmcrypt
libtomcrypt-devel.i686 : Development files for libtomcrypt
libtomcrypt-devel.x86_64 : Development files for libtomcrypt
libtomcrypt-doc.noarch : Documentation files for libtomcrypt
php-mcrypt.x86_64 : Standard PHP module provides mcrypt library support
php55w-mcrypt.x86_64 : Standard PHP module provides mcrypt library support
# either of these are fine:
php56-php-mcrypt.x86_64 : Standard PHP module provides mcrypt library support
php56w-mcrypt.x86_64 : Standard PHP module provides mcrypt library support
php70-php-mcrypt.x86_64 : Standard PHP module provides mcrypt library support
php70w-mcrypt.x86_64 : Standard PHP module provides mcrypt library support
php71-php-mcrypt.x86_64 : Standard PHP module provides mcrypt library support
libmcrypt.i686 : Encryption algorithms library
libmcrypt.x86_64 : Encryption algorithms library
libtomcrypt.i686 : A comprehensive, portable cryptographic toolkit
libtomcrypt.x86_64 : A comprehensive, portable cryptographic toolkit
mcrypt.x86_64 : Replacement for crypt()
```
Наконец:
sudo service httpd restart
Для установки php 7 для запуска mcrypt:
Centos: sudo yum install php7.0-mcrypt для установки
На Ubuntu: sudo apt-get install php7.0-mcrypt
Обновлен ответ для centos 7
## RHEL/CentOS 7 64-Bit ##
# wget http://dl.fedoraproject.org/pub/epel/beta/7/x86_64/epel-release-7-0.2.noarch.rpm
# rpm -ivh epel-release-7-0.2.noarch.rpm
Для CentOS 6
## RHEL/CentOS 6 32-Bit ##
# wget http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
# rpm -ivh epel-release-6-8.noarch.rpm
## RHEL/CentOS 6 64-Bit ##
# wget http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
# rpm -ivh epel-release-6-8.noarch.rpm
Установить
yum install php-mcrypt
Изменить: просмотр комментариев для обновленных репозиториев.
http://dl.fedoraproject.org/pub/epel/beta/7/x86_64/epel-release-7-0.2.noarch.rpm
не работает ...
– zhkzyth
19 October 2014 в 19:59
yum -y install epel-release && yum -y install php-mcrypt
– jornane
8 February 2016 в 11:15
Если php_mcrypt установлен на 64-битном языке, но отсутствует у установщика, проверьте путь расширения:
vi /etc/php.d/mcrypt.ini
BLOCKQUOTE>; Enable mcrypt extension module ;extension=module.so extension=/usr/lib64/php/modules/mcrypt.so