在OSX Mountain Lion上安装PHP的mcrypt扩展

时间:2013-01-30 02:45:02

标签: php macos apache mcrypt

为潜在的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?

有人请帮忙吗?我在Google搜索页面上浏览过没有运气的页面!

16 个答案:

答案 0 :(得分:77)

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

然后你应该可以用brew install mcrypt php53-mcrypt安装它,它就是Just Work(tm)。

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

还要记住,如果您使用内置的Mac PHP,它已安装到/usr/bin中,您可以在终端上查看您使用which php的哪个php,它将返回路径。< / p>

答案 1 :(得分:50)

我刚刚在Mountain Lion上看过这个。自制软件封锁了它认为缺失的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某人。

答案 2 :(得分:38)

安装php - mcrypt而不使用portbrew

  

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

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

要手动执行操作,首先需要一些依赖项:一个用于构建PHP模块,另一个用于mcrypt。这些是autoconflibmcrypt,您可能已经使用过这两种版本,但在全新安装OSX 10.9时,这两种版本都没有。

autoconf的

Autoconf(缺乏更好的描述)用于告诉不完全不同但仍然非常不同的系统如何编译。它允许您使用相同的一组基本命令在Linux上构建模块,就像在OSX上一样,尽管它们具有不同的文件系统层次结构等等。我使用了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来源$ 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 ,可在撰写本文时查阅,具体请访问:

SourceForge

你需要跳过标准的SourceForge箍来获得真正的下载链接,但是一旦你拥有它,就可以将它传递给类似的东西:

./configure

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

构建mcrypt扩展

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

首先,我们需要获取$ php --version # to get your PHP version 扩展程序的源代码。这是最容易获得的,隐藏在所有PHP的源代码中。所以:确定你需要的PHP源代码版本。

$ 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

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

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

不幸的是,我目前的版本(在本例中为5.4.17)不可用,因此我需要使用http://sourceforge.net/projects/mcrypt/files/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.bz2/download(也是官方PHP下载站点)的替代/历史链接。对于这些,你可以使用类似的东西:

$ 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.ini现在位于PHP扩展目录中。接下来,我们需要告诉PHP它。

配置mcrypt扩展

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

默认情况下,/private/etc/php.ini.default文件不存在。相反,文件php.ini列出了默认配置,并且可以用作创建“true”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

哪个应该输出“httpd”,而不是其他内容。

如果您使用PHP依赖于Apache的$ sudo apachectl restart ,则需要重新启动它才能注意到Web上的更改。您可以通过以下方式执行此操作:

{{1}}

你已经完成了。

答案 3 :(得分:10)

为什么会出现此错误

PHP抱怨如果使用mcrypt.so语法包含extension="mcrypt.so"之类的文件,但该文件不在extension_dir路径中(使用<?php phpinfo(); ?>或{{1}检查那个)。

它还会告诉您正在加载哪个php -i配置文件,以便您知道设置的来源。如果您使用自制软件版本,很可能会像php.ini那样。

请注意下面的部分说“扫描此目录以获取其他.ini文件”,因为这意味着它可以让您放置自己的文件,例如/usr/local/etc/php/5.4/php.ini之后加载的文件主配置文件,以便您可以轻松地进行更改并跟上它们。还要记住,此目录中的所有文件都按字母顺序加载,因此如果您有一个名为tweaks.ini且包含adjustments.ini指令的文件,并且有一个mcrypt,则很可能您的设置将被覆盖。

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

什么对我有用

在小牛队,我没有必要这样做。我完成了extension_dir的全新安装,然后使用:

添加了josegonzalez tap
homebrew

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

点击 that awesome repo 后,您可以使用以下内容安装brew tap josegonzalez/homebrew-php php

mcrypt

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

我强烈建议在从源代码下载和构建之前尝试这条路线。从源代码构建并不难 - 但我不想保持这一点。这是首先使用brew install php54 php54-mcrypt 的原因之一 - 它是一个包管理器(有一个巨大的社区)。

homebrew项目有很多开发项目 - 如果您遇到问题,我建议您查看issues page

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

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

如果您是自制新手,您应该知道使用php53查看可用的其他内容,其中包含以下内容:

brew search php54

TLDR

  • 如果可能的话,您应该使用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 安装homebrew
  • 如果您遇到错误,可能是因为您的配置文件搞砸了。检查mcrypt路径并确定extension_dir文件的位置,并查看是否存在差异(或指定完整路径)

答案 4 :(得分:8)

对我而言,在优胜美地

$ brew install mcrypt php56-mcrypt

重启电脑

做了这个伎俩。

答案 5 :(得分:5)

使用brew的解决方案仅在以下情况下工作: 在你的php.ini

nano /private/etc/php.ini

添加以下行:

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

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

答案 6 :(得分:4)

如果你有选择,我建议你通过自制软件安装一切。我进入了一段时间,但是通过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

...

答案 7 :(得分:3)

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

要轻松创建流浪汉环境,您可以使用这个出色的工具https://puphpet.com/

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

答案 8 :(得分:2)

我创建了一个shell脚本来安装PHP 5.3的mcrypt模块而没有自制软件。

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

链接位于:https://gist.github.com/lucasgameiro/8730619

由于

答案 9 :(得分:1)

没有任何效果,最终使用资源@ HereHere使其工作;请记住OSX Mavericks(10.9)应该使用PHP 5.4.17或Stable PHP 5.4.22源来编译mcrypt。 Php Source 5.4.22 here

答案 10 :(得分:1)

Brew base solution为我工作

  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 /本地/地窖/ php54-mcrypt的/ 5.3.26 / mcrypt.so”

  4. 重新启动Apache服务器

    $ apache restart

答案 11 :(得分: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

答案 12 :(得分:0)

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

答案 13 :(得分:0)

随着brew的最近更改(自制软件/ php的弃用),您现在使用mcrypt安装php以及以下内容。

brew install php@5.6 -with-mcrypt=mcrypt

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

答案 14 :(得分: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。

答案 15 :(得分:-4)

  

sudo apt-get install php5-mcrypt

     

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

     

service php5-fpm restart

     

服务nginx重启