【问题标题】:Installing mcrypt extension for PHP on OSX Mountain Lion在 OSX Mountain Lion 上为 PHP 安装 mcrypt 扩展
【发布时间】:2013-01-13 18:53:17
【问题描述】:

为潜在的 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 的物理编译没有发生,或者编译不正确,因为我怀疑在 locate 下找到了另一个 mcrypt.so?

有人帮忙吗?我翻遍了谷歌搜索的页面,但没有运气!

【问题讨论】:

标签: php macos apache mcrypt


【解决方案1】:

我倾向于在 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,它会返回路径。

【讨论】:

  • 在上面的 brew install 命令brew install mcrypt php53-mcrypt 你有php53-mcrypt。如果我的 php 安装是 PHP 5.4.11,那会更改为 php54-mcrypt 吗?
  • 我用这个命令安装了mcrypt,但是homebrew不能链接它,也不允许覆盖链接。你遇到过这个问题吗?
  • 你需要homebrew-php
  • 对我来说,这需要以下内容(php53-mcrypt 不能直接使用):brew tap josegonzalez/phpbrew tap homebrew/dupes,然后是 brew install php53-mcrypt。我发现这个包是brew search php | grep mcrypt
  • brew install mcrypt php55-mcrypt 完成了这项工作
【解决方案2】:

我刚刚在 Mountain Lion 上经历过这个。 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

完成 - 无需冲泡。 HTH 某人。

【讨论】:

  • 我确实使用 brew 来安装 autoconf,因为没有 autoconf 的 phpize 失败。
  • 如果不先安装 libmcrypt,这可能无法正常工作,即便如此,您仍然可能遇到问题。
  • 确认修复了 Ubuntu 13.10 和 PHP 5.5.4 +
  • 是的,这与您已经安装的版本相匹配。 php -v
  • 最简单的解决方案。
【解决方案3】:

在不使用portbrew的情况下安装php-mcrypt

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

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

要手动执行操作,您首先需要几个依赖项:一个用于构建 PHP 模块,另一个用于 mcrypt。它们是 autoconflibmcrypt,您可能已经拥有其中任何一个,但在全新安装的 OSX 10.9 上您都不会拥有。

自动配置

Autoconf(因为没有更好的描述)用于告诉不完全不同但仍然非常不同的系统如何编译东西。它允许您使用与在 OSX 上相同的一组基本命令在 Linux 上构建模块,例如,尽管它们具有不同的文件系统层次结构等。我使用了 the method described by Ares on 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 接口)。我使用的方法是基于here 描述的方法,但我已尽力简化:

首先,下载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 扩展本身的 ./configure 步骤(如下)

构建 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 列出了默认配置,并且可以用作创建“真实”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,您需要重新启动它才能注意到网络上的更改。您可以通过以下方式进行:

$ sudo apachectl restart

你已经完成了。

【讨论】:

  • 我真的不敢相信没有人愿意感谢您的巨大努力。我没有问以上问题,但我肯定会使用你的答案,非常感谢你。
  • 我同意。像魅力一样工作。我没有使用所有 CURL 命令,因为很容易在提供的目录中搜索我需要的文件,手动下载它们,然后手动解包。
  • 我收到一个错误:grep: /usr/include/php/main/php.h: No such file or directoryzend_modules.hzend_extensions.h 相同 - 有什么想法吗? (PHP 5.4.24)
  • @DisgruntledGoat 你运行的是什么版本的 MacOSX?
  • 本教程非常棒,谢谢!一切都很完美,除了一个小障碍:我不得不跳过这一行code curl -o curl -o libmcrypt.tar.bz2 '&lt;SourceForge direct link URL&gt;'手动下载该文件,然后code tar xjf {DIRECTORY TO DOWNLOADED FILE}
【解决方案4】:

为什么会出现此错误

如果使用语法extension="mcrypt.so" 包含mcrypt.so 之类的文件之一,但该文件不在extension_dir 路径中(使用&lt;?php phpinfo(); ?&gt;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,然后使用以下命令添加了 josgonzalez 水龙头:

brew tap josegonzalez/homebrew-php

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

点击 that awesome repo 后,您可以使用以下方式安装 phpmcrypt

brew install php54 php54-mcrypt

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

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

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

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

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

如果您是 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 文件的位置,看看是否存在差异(或指定完整路径)

【讨论】:

【解决方案5】:

对我来说,在优胜美地

$ brew install mcrypt php56-mcrypt

重启电脑

成功了。

【讨论】:

  • 我可以运行它:brew install mcrypt
  • 毫无疑问,最好的解决方案。我的“El Capitan”说......“你走吧”
【解决方案6】:

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

nano /private/etc/php.ini

添加这一行:

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

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

【讨论】:

  • 地窖来自自制
  • 这非常有效。 This other question 为我指明了相同的方向。谢谢。
【解决方案7】:

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

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

然后安装附加模块:

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

...

【讨论】:

    【解决方案8】:

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

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

    1. http://www.vagrantup.com/
    2. https://www.virtualbox.org/

    【讨论】:

      【解决方案9】:

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

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

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

      谢谢

      【讨论】:

        【解决方案10】:

        没有任何效果,最后使用资源 @HereHere 让它工作;请记住对于 OSX Mavericks (10.9) 应该使用 PHP 5.4.17 或稳定的 PHP 5.4.22 源来编译 mcrypt。 Php Source 5.4.22 here

        【讨论】:

          【解决方案11】:

          酿造基础解决方案对我有用

          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 文件扩展部分 - 请使用您机器中的安装位置验证扩展路径

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

          4. 重启你的apache服务器

            $apache 重启

          【讨论】:

            【解决方案12】:

            这就是我所做的:

            $ 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
            

            【讨论】:

              【解决方案13】:

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

              【讨论】:

                【解决方案14】:

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

                brew install php@5.6 -with-mcrypt=mcrypt
                

                您可能需要卸载以前安装的 php

                【讨论】:

                  【解决方案15】:

                  所以在运行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。

                  【讨论】:

                    【解决方案16】:

                    sudo apt-get install php5-mcrypt

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

                    服务 php5-fpm 重启

                    服务 nginx 重启

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 2012-12-26
                      • 1970-01-01
                      • 2012-10-15
                      • 2013-04-06
                      • 1970-01-01
                      • 1970-01-01
                      • 2013-04-13
                      • 1970-01-01
                      相关资源
                      最近更新 更多