我已经使用Homebrew安装了mcrypt,但它似乎没有加载。我通过运行安装:
brew install php70-mcrypt
当我在浏览器中运行phpinfo()时,我没有看到mcrypt的安装细节(除了模块作者)。
nginx是否使用了我从命令行获得的相同的php?或者我没有正确安装/启用mcrypt?
phpinfo告诉我.ini路径:
如果我检查/usr/local/etc/php/7.0/conf.d目录,则有两个.ini文件:
但它们似乎没有被解析过。 mcrypt(我正在努力工作的那个)包含:
和/ usr / local / opt / php70-mcrypt是Cellar位置的符号链接/usr/local/Cellar/php70-mcrypt/7.0.27_19,其中包含mcrypt.so文件。
我已尝试直接将扩展名添加到php.ini文件中,无论是否有路径。每次我保存文件然后重启php(不确定,如果有必要......)和nginx:
brew services restart php70
brew services restart nginx
仍未加载。
如果我从终端运行:
php -i | grep mcrypt
我明白了:
/usr/local/etc/php/7.0/conf.d/ext-mcrypt.ini
Registered Stream Filters => zlib.*, bzip2.*, convert.iconv.*, string.rot13,
string.toupper, string.tolower, string.strip_tags, convert.*, consumed,
dechunk, mcrypt.*, mdecrypt.*
mcrypt
mcrypt support => enabled
mcrypt_filter support => enabled
mcrypt.algorithms_dir => no value => no value
mcrypt.modes_dir => no value => no value
这里似乎有更多细节。
nginx是否在命令行中使用了不同的php?如果这是问题,我怎样才能确保nginx使用我在命令行看到的php?或者,我怎样才能将php安装到nginx使用的“其他”php?
这个的根本原因是加载Magento 2,它给了我这个错误,我认为mcrypt确实没有正确加载:
Exception #0 (Exception): Notice: Use of undefined constant MCRYPT_BLOWFISH - assumed 'MCRYPT_BLOWFISH' in /[MY DOC ROOT]/magento2/vendor/magento/framework/Encryption/Encryptor.php on line 397
我在这里做错了什么?
答案 0 :(得分:0)
我安装了mcrypt。我怀疑,nginx正在使用不同的php版本(7.0.26),因为新版本(7.0.27)无法收听端口9000,因为它已经在使用中。作为参考,我通过检查php-fpm.log文件找到了这个。
为了解决这个问题,我使用答案here来查找并终止进程。
我发现进程正在运行:
ps aux | grep php
然后杀了他们(有四个人):
kill [PID]
然后开始php:
brew services php70 start
现在我的phpinfo页面显示正在运行7.0.27并安装了mcrypt:
值得注意@zaph的评论 - mcrypt已被弃用。我只是让它运行,所以我可以使用Magento,因为它是一个依赖。