40

提前为潜在的 n00b 问题道歉,我正在尝试在我的 OSX Mountain Lion 机器上安装 PHP 的 mcrypt 扩展。

终端中的以下步骤是我迄今为止为实现 PHP 安装所做的工作

cd /path/to/downloaded/php-5.3.21/ext/mcrypt/
/usr/bin/phpize
./configure
cd /path/to/downloaded/php-5.3.21
./configure --with-config-file-path=/private/etc/php.ini --with-apxs2=/usr/sbin/apxs
make
sudo make install

这似乎运行良好并且可以很好地安装 PHP 5.3.21。然后我做了

sudo nano /private/etc/php.ini

并包括

extension=mcrypt.so

随着 Apache 重新启动, phpinfo() 不会显示已加载 mcrypt 扩展。

然后我尝试在 php.ini 中指定 extension_dir,但还是没有成功。

我已经做好了

locate mcrypt.so
/opt/local/lib/php/extensions/no-debug-non-zts-20090626/mcrypt.so
/usr/local/Cellar/php53-mcrypt/5.3.18/mcrypt.so

并尝试将两个目录都作为 extension_dir,但没有成功。

经过大量谷歌搜索后,我也尝试了以下方法

./configure --with-config-file-path=/private/etc/php.ini --with-apxs2=/usr/sbin/apxs --with-mcrypt

这似乎工作正常,但是在“make”之后,它返回

ext/mcrypt/mcrypt.o: No such file or directory
ext/mcrypt/mcrypt_filter.o: No such file or directory

再次,没有成功。

我究竟做错了什么?似乎 mcrypt.so 的物理编译没有发生,或者编译不正确,因为我怀疑在定位下找到了另一个 mcrypt.so?

有人请帮忙吗?我已经浏览了谷歌搜索的页面,但没有运气!

4

16 回答 16

77

我倾向于在 Mac 上使用 Homebrew。它将为您安装和配置所有东西。
http://mxcl.github.com/homebrew/

然后你应该能够安装它brew install mcrypt php53-mcrypt并且它会正常工作(tm)。

您可以将 替换为53您正在使用的任何 PHP 版本,例如php56-mcryptphp70-mcrypt。如果您不确定,请使用brew search php.

还请记住,如果您使用的是内置的 Mac PHP,它已安装到/usr/bin您可以在终端上看到您正在使用的 php which php,它会返回路径。

于 2013-01-30T09:07:21.060 回答
50

我刚刚在山狮上经历了这个。Homebrew 阻止了它认为丢失但实际上是最新的 libiconv。在尝试让它识别 libiconv 一个小时后,我放弃了并以老式方式安装它,总共花了五分钟......

(download your php version)
$ wget http://www.php.net/get/php-5.3.21.tar.gz/from/a/mirror
$ tar -xvzf php-5.3.21.tar.gz
$ cd php-5.3.21/ext/mcrypt
$ phpize
$ ./configure
$ make
$ make test
$ sudo make install 

mcrypt.so 现在在您的 PHP ext 目录中(/usr/lib/php/extensions/no-debug-non-zts-20090626/在我的情况下),现在您需要作为模块添加到 php.ini

$ vi /etc/php.ini
$ (insert) extension=mcrypt.so
$ sudo apachectl restart

完成 - 无需冲泡。某人。

于 2013-07-16T00:12:44.020 回答
38

安装 php-mcrypt不使用portorbrew

注意:这些说明很长,因为它们打算彻底。这个过程实际上相当简单。如果你是一个乐观主义者,你可以跳到构建 mcrypt 扩展 部分,但你很可能会看到我所做的错误,告诉我先安装autoconf和安装libmcrypt

我刚刚在全新安装的 OSX 10.9 上完成了此操作。对我有用的解决方案与ckm的解决方案非常接近——为了完整起见,我将他们的步骤以及我自己的步骤都包括在内。我的主要目标(除了“拥有”)是以对整个系统影响最小的方式执行安装。这意味着手动做事(不,不)mcryptportbrew

要手动执行操作,您首先需要几个依赖项:一个用于构建 PHP 模块,另一个用于mcrypt专门的。这些是autoconfand libmcrypt,您可能已经拥有其中任何一个,但在全新安装的 OSX 10.9 中您将不会拥有这两个。

自动配置

Autoconf(由于缺乏更好的描述)用于告诉不完全不同但仍然非常不同的系统如何编译东西。它允许您使用与在 OSX 上相同的一组基本命令在 Linux 上构建模块,例如,尽管它们具有不同的文件系统层次结构等。我使用了 Ares 在 StackOverflow 上描述的方法,我将在此处重现为了完整性。这个非常简单:

$ mkdir -p ~/mcrypt/dependencies/autoconf
$ cd ~/mcrypt/dependencies/autoconf
$ curl -OL http://ftpmirror.gnu.org/autoconf/autoconf-latest.tar.gz
$ tar xzf autoconf-latest.tar.gz
$ cd autoconf-*/
$ ./configure --prefix=/usr/local
$ make
$ sudo make install

接下来,通过运行验证安装:

$ which autoconf

应该返回/usr/local/bin/autoconf

libmcrypt

接下来,您将需要libmcrypt, 用于提供mcrypt扩展的内容(扩展本身就是为这个库提供的 PHP 接口)。我使用的方法基于此处描述的方法,但我已尽力简化事情:

首先,下载libmcrypt源代码,可从SourceForge获得,并且在撰写本文时可用,具体而言,位于:

http://sourceforge.net/projects/mcrypt/files/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.bz2/download

你需要跳过标准的 SourceForge 箍来获得真正的下载链接,但是一旦你有了它,你可以把它传递给这样的东西:

$ mkdir -p ~/mcrypt/dependencies/libmcrypt
$ cd ~/mcrypt/dependencies/libmcrypt
$ curl -L -o libmcrypt.tar.bz2 '<SourceForge direct link URL>'
$ tar xjf libmcrypt.tar.bz2
$ cd libmcrypt-*/
$ ./configure
$ make
$ sudo make install

我知道验证这是否有效的唯一方法是通过扩展本身的./configure步骤(如下)mcrypt

构建 mcrypt 扩展

这是我们的实际目标。希望短暂的依赖地狱现在已经结束。

首先,我们需要获取mcrypt扩展的源代码。这是所有 PHP 源代码中最容易获得的。所以:确定你需要什么版本的 PHP 源代码。

$ php --version # to get your PHP version

现在,如果你幸运的话,你的当前版本将可以从主镜像下载。如果是,您可以键入以下内容:

$ mkdir -p ~/mcrypt/php
$ cd ~/mcrypt/php
$ curl -L -o php-5.4.17.tar.bz2 http://www.php.net/get/php-5.4.17.tar.bz2/from/a/mirror

不幸的是,我当前的版本(在本例中为 5.4.17)不可用,所以我需要使用http://downloads.php.net/stas/(也是官方 PHP 下载站点)上的替代/历史链接。对于这些,您可以使用以下内容:

$ mkdir -p ~/mcrypt/php
$ cd ~/mcrypt/php
$ curl -LO http://downloads.php.net/stas/php-5.4.17.tar.bz2

同样,基于您当前的版本。

一旦你有了它,(以及上面的所有依赖项),你就可以进入实际构建/安装模块的主要过程。

$ cd ~/mcrypt/php
$ tar xjf php-*.tar.bz2
$ cd php-*/ext/mcrypt
$ phpize
$ ./configure # this is the step which fails without the above dependencies
$ make
$ make test
$ sudo make install

理论上,mcrypt.so现在在您的 PHP 扩展目录中。接下来,我们需要告诉 PHP 这件事。

配置 mcrypt 扩展

您的php.ini文件需要被告知加载mcrypt. 默认情况下,在 OSX 10.9 中,它实际上具有特定的配置信息,但除非您告诉它,否则mcrypt它实际上不会激活。mcrypt

默认情况下,该php.ini文件不存在。相反,该文件/private/etc/php.ini.default列出了默认配置,并且可以用作创建 "true" 的良好模板php.ini(如果它尚不存在)。

要确定是否php.ini已经存在,请运行:

$ ls /private/etc/php.ini

如果有结果,它已经存在,你应该跳过下一个命令。

要创建php.ini文件,请运行:

$ sudo cp /private/etc/php.ini.default /private/etc/php.ini

接下来,您需要添加以下行:

extension=mcrypt.so

文件中的某处。我建议在文件中搜索;extension=,并在第一次出现之前立即添加它。

一旦完成,安装和配置就完成了。您可以通过运行来验证这是否有效:

php -m | grep mcrypt

哪个应该输出“ mcrypt”,没有别的。

如果您使用的 PHP 依赖于 Apache 的httpd,您将需要重新启动它,然后才能注意到 Web 上的更改。您可以通过以下方式进行:

$ sudo apachectl restart

你完成了。

于 2014-02-15T20:32:52.770 回答
10

为什么会出现此错误

mcrypt.so如果使用语法包含其中一个文件extension="mcrypt.so"但该文件不在extension_dir路径中(使用<?php phpinfo(); ?>php -i检查),PHP 会抱怨。

它还会告诉您php.ini正在加载哪个配置文件,以便您知道设置的来源。/usr/local/etc/php/5.4/php.ini如果您使用的是自制版本,很可能会出现这种情况。

请注意它下面的部分,例如“扫描此目录以获取其他 .ini 文件”,因为这意味着它为您提供了放置自己文件的位置,就像tweaks.ini在主配置文件之后加载的那样,您可以进行更改并轻松跟上它们。还要记住,这个目录中的所有文件都是按字母顺序加载的,所以如果你有一个adjustments.ini包含mcrypt指令的调用文件,并且有一个mcrypt.ini,你的设置很可能会被覆盖。

指定的一种替代方法extension="mcrypt.so"是指定文件的完整路径mcrypt.so。另一个选项是编辑extension_dir设置。

什么对我有用

在小牛队我也不必这样做。我进行了全新安装,homebrew然后使用以下方法添加了 josegonzalez 水龙头:

brew tap josegonzalez/homebrew-php

(我的另一台笔记本电脑正在运行 Mountain Lion,并且在此设置中也使用自制软件。)

在你点击了那个很棒的 repo之后,你可以安装phpmcrypt使用类似的东西:

brew install php54 php54-mcrypt

如果这不起作用怎么办(我为什么要使用自制软件?)

我强烈建议在从源代码下载和构建它之前尝试这条路线。从源代码构建并不难 - 但我不想维护它。这是首先使用的原因之一homebrew——它是一个包管理器(拥有一个庞大的社区)。

该项目有很多开发,homebrew如果您有问题,我建议您查看他们的问题页面

所以是的,你可以从源代码构建它,如果你只想让 mcrypt 工作,这现在似乎是一个不错的选择,但你可能会讨厌自己以后这样做......

如果您不想使用php54还有php53分支。他们在回购中有一些关于如何使用它们/在它们之间切换的说明。

如果您是 homebrew 的新手,您应该知道您使用 来检查还有什么可用的brew search php54,它会给出类似的内容:

php54                php54-lzf          php54-snappy        
php54-amqp           php54-mailparse    php54-solr          
php54-apc            php54-mcrypt       php54-ssh2          
php54-apcu           php54-memcache     php54-stats         
php54-boxwood        php54-memcached    php54-svm           
php54-chdb           php54-midgard2     php54-tidy          
php54-couchbase      php54-mongo        php54-timezonedb    
php54-dbase          php54-msgpack      php54-tokyotyrant   
php54-ev             php54-mysqlnd_ms   php54-twig          
php54-gearman        php54-oauth        php54-uploadprogress
php54-geoip          php54-opcache      php54-uuid          
php54-gmagick        php54-parsekit     php54-varnish       
php54-graphdat       php54-pcntl        php54-wbxml         
php54-http           php54-pdflib       php54-xcache        
php54-igbinary       php54-phalcon      php54-xdebug        
php54-imagick        php54-proctitle    php54-xhgui         
php54-inclued        php54-pspell       php54-xhp           
php54-intl           php54-pthreads     php54-xhprof        
php54-ioncubeloader  php54-raphf        php54-xmldiff       
php54-jsmin          php54-redis        php54-yac           
php54-judy           php54-riak         php54-yaf           
php54-leveldb        php54-runkit       php54-yaml          
php54-libevent       php54-scrypt       php54-yaz           
php54-libvirt

TLDR

  • 如果可能的话,您应该使用homebrew安装mcrypt
  • 如果您遇到错误,可能是因为您的配置文件搞砸了。检查extension_dir路径并找出mcrypt.so文件的位置并查看是否存在差异(或指定完整路径)
于 2013-11-21T01:11:17.833 回答
8

对我来说,在优胜美地

$ brew install mcrypt php56-mcrypt

重新启动计算机

成功了。

于 2014-12-12T12:04:38.563 回答
5

brew 的解决方案仅在以下情况下才有效:在您的 php.ini 中

nano /private/etc/php.ini

添加这一行:

extension="/usr/local/Cellar/php53-mcrypt/5.3.26/mcrypt.so"

警告!设置正确的 PHP 版本。

于 2013-09-08T15:19:17.440 回答
4

如果您可以选择,我建议您通过自制软件安装所有内容。我转了一圈,但通过 brew 安装 php 5.x,然后安装必要的模块就可以了。我正在使用 php 5.4 并使用它来开始:

https://github.com/josgonzalez/homebrew-php

然后安装附加模块:

brew install php54-redis
brew install php54-xdebug
brew install php54-mcrypt

...

于 2013-05-23T15:21:32.697 回答
3

对于那些想要保持 OS X 尽可能干净的人来说,另一种可能性是使用 vagrant [1] 来定义一个 php 开发环境。Vagrant 可以在无头模式下使用 VirtualBox [2](在我的 13 英寸 2009 年中 MacBook Pro 上占 CPU 的大约 3%)来运行带有 web 服务器和 php 的虚拟机。

要轻松创建 vagrant 环境,您可以使用这个很棒的工具https://puphpet.com/

  1. http://www.vagrantup.com/
  2. https://www.virtualbox.org/
于 2013-07-23T09:27:54.450 回答
2

我将创建一个 shell 脚本来为 PHP 5.3 安装 mcrypt 模块,无需自制软件。

如果需要,脚本会安装 php autoconf 并为您的 php 版本编译模块。

链接在这里:https ://gist.github.com/lucasgameiro/8730619

谢谢

于 2014-01-31T12:56:41.453 回答
1

Brew 基础解决方案对我有用

  1. 安装这些包

    $brew install brew install mcrypt php54-mcrypt

  2. 将默认的 php.ini.default 复制到 php.ini

    $sudo cp /private/etc/php.ini.default /private/etc/php.ini

  3. 将此行添加到 php.ini 文件扩展部分 - 请使用您机器中的安装位置验证扩展路径

    扩展="/usr/local/Cellar/php54-mcrypt/5.3.26/mcrypt.so"

  4. 重启你的 apache 服务器

    $apache 重启

于 2014-08-29T07:59:42.247 回答
1

没有任何效果,最后使用资源 @Here和 Here使其正常工作;请记住对于 OSX Mavericks (10.9) 应该使用 PHP 5.4.17 或稳定的 PHP 5.4.22 源来编译 mcrypt。PHP 源 5.4.22 在这里

于 2013-11-16T07:15:08.510 回答
1

这就是我所做的:

$ wget http://sourceforge.net/projects/mcrypt/files/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz/download
$ tar xzvf libmcrypt-2.5.8.tar.gz
$ ./configure
$ make
$ sudo make install

$ brew install autoconf

$ wget file:///Users/rmatikolai/Downloads/php-5.4.24.tar.bz2
$ tar xjvf php-5.4.24.tar.bz2
$ cd php-5.4.24/ext/mcrypt
$ phpize
$ ./configure # this is the step which fails without the above dependencies
$ make
$ make test
$ sudo make install


$ sudo cp /private/etc/php.ini.default /private/etc/php.ini
$ sudo vi /private/etc/php.ini

接下来,您需要添加以下行:

extension=mcrypt.so

$ sudo apachectl restart
于 2014-12-29T23:12:11.550 回答
0

mycrypt.o 和 mcrypt_filter.o 位于 php 下载目录的 ext/.libs 中。只需将文件复制到 ext/mcrypt,然后再次运行 make && make install。

于 2013-09-07T06:49:18.010 回答
0

所以运行后brew install mcrypt php,我必须通过 pecl 安装 php-mcrypt:

pecl install mcrypt-1.0.1

在撰写本文时,mcrypt 没有稳定的 pecl 版本,1.0.1 是 php 7.2 和 7.3 的当前版本,brew install php并将安装 php 7.2。

于 2018-07-05T19:17:28.603 回答
0

随着最近 brew 的变化(不推荐使用 homebrew/php),您现在使用 mcrypt 安装 php,如下所示。

brew install php@5.6 -with-mcrypt=mcrypt

您可能必须卸载以前安装的 php

于 2018-04-26T15:52:31.127 回答
-4

sudo apt-get install php5-mcrypt

ln -s /etc/php5/mods-available/mcrypt.ini /etc/php5/fpm/conf.d/mcrypt.ini

服务 php5-fpm 重启

服务 nginx 重启

于 2014-10-07T09:28:00.960 回答