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

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

terminal中的以下步骤是我到目前为止完成我的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,没有运气。

经过多次Googlesearch之后,我也尝试了以下方法

 ./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.sofind下find?

任何人请帮忙? 我已经浏览了谷歌search的页面,没有运气!

我倾向于在Mac上使用Homebrew。 它会为你安装和configuration所有的东西。
http://mxcl.github.com/homebrew/

那么你应该可以安装brew install mcrypt php53-mcrypt ,它会正常工作(tm)。

你可以用你正在使用的任何版本的PHPreplace53 ,比如php56-mcrypt或者php70-mcrypt 。 如果您不确定,请使用brew search php

还要记住,如果你使用内置的Mac PHP,它被安装到/usr/bin你可以看到你使用which php在terminal上使用which php ,它将返回path。

我刚刚在山狮上经历过这个。 自制软件阻止了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的人。

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

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

我刚刚安装了新的OSX 10.9。 为我工作的解决scheme非常接近ckm的解决scheme – 我完整地包括他们的步骤以及我自己的步骤。 我的主要目标(除了“有mcrypt ”)是以一种对系统整体影响最小的方式来执行安装。 这意味着手动做事(没有port ,没有brew

要手动执行,您首先需要一些依赖关系:一个用于构buildPHP模块,另一个用于mcrypt 。 这些是autoconflibmcrypt ,你可能已经拥有了这两者,但是这两者都不是全新安装的OSX 10.9。

autoconf的

Autoconf(缺乏更好的描述)被用来告诉不是完全不同的,但仍然非常不同的系统如何编译的东西。 它允许你使用相同的一组基本命令来在Linux上构build模块,就像在OSX上一样,尽pipe它们有不同的文件系统层次结构等等。我使用了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 

接下来,通过运行以validation安装:

 $ which autoconf 

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

libmcrypt

接下来,您将需要libmcrypt ,用于提供mcrypt扩展的内容(该扩展本身是提供给这个库的PHP接口)。 我使用的方法是基于这里描述的方法,但我试图尽我所能简化事情:

首先,从SourceForge下载libmcrypt源文件,并在撰写本文时提供该文件,具体说明如下:

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 

我知道validation这个工作的唯一方法是通过mcrypt扩展本身的./configure步骤(下面)

build立mcrypt扩展

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

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

 $ php --version # to get your PHP version 

现在,如果你幸运的话,你现在的版本可以从主镜下载。 如果是这样,你可以input如下所示的内容:

 $ 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 

再次,根据您的当前版本。

一旦你拥有了它(和所有的依赖关系,从上面),你可以到达实际构build/安装模块的主要过程。

 $ 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。

configurationmcrypt扩展

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

默认情况下, php.ini文件不存在。 相反,文件/private/etc/php.ini.default列出了默认的configuration,可以用作创build“真正的” php.ini一个很好的模板,如果它不存在的话。

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

 $ ls /private/etc/php.ini 

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

要创buildphp.ini文件,请运行:

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

接下来,你需要添加行:

 extension=mcrypt.so 

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

一旦完成,安装和configuration就完成了。 您可以通过运行以validation这是否正常工作:

 php -m | grep mcrypt 

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

如果您对PHP的使用依赖于Apache的httpd ,那么在您注意到Web上的更改之前,您需要重新启动它。 你可以这样做:

 $ sudo apachectl restart 

你完成了。

为什么你得到这个错误

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

它也会告诉你哪个php.iniconfiguration文件正在被加载,所以你会知道设置来自哪里。 如果你使用的是自制软件,最有可能的就是/usr/local/etc/php/5.4/php.ini

记下它下面的部分,如“扫描这个目录以获得额外的.ini文件”,因为这意味着它可以让你放置自己的文件,就像在主configuration文件之后加载tweaks.ini一样您可以轻松地进行更改并跟上他们。 还要记住,这个目录中的所有文件都是按字母顺序加载的,所以如果你有一个包含mcrypt指令的mcrypt.ini ,并且有一个mcrypt.ini ,那么很可能你的设置将被覆盖。

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

什么为我工作

在小牛队,我也不必这样做。 我做了一个新的安装homebrew ,然后添加josegonzalez水龙头使用:

 brew tap josegonzalez/homebrew-php 

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

当你点击这个真棒回购后,你可以使用类似的东西来安装phpmcrypt

 brew install php54 php54-mcrypt 

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

我强烈build议在下载之前尝试使用此路线,并从源代码构build。 从源头上构build并不难 – 但我不想保持这一点。 这是首先使用homebrew的原因之一 – 它是一个软件包pipe理员(拥有一个巨大的社区)。

homebrew项目上有很多的发展,如果你遇到问题,我build议你查看他们的问题页面

所以是的,你可以从源代码build立它,现在看起来可能是一个很好的select,如果你只是想mcrypt工作,但你可能会恨自己后来这样做…

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

如果你是新来的自制软件,你应该知道你可以使用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
  • 如果你得到错误,可能是因为你的configuration文件被搞乱了。 检查extension_dirpath并找出mcrypt.so文件的位置,并查看是否存在差异(或指定完整path)

对我来说,在约塞米蒂

 $ brew install mcrypt php56-mcrypt 

重启电脑

做的伎俩。

使用brew的解决scheme只能在以下情况下工作:在您的php.ini中

 nano /private/etc/php.ini 

添加这一行:

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

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

如果你有select,我会build议通过自制软件安装一切。 我绕了一圈,但通过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 

希望尽可能保持OS X清洁的另一种可能性是使用vagrant [1]来定义一个php开发环境。 Vagrant可以在无头模式下使用VirtualBox [2](我的13英寸,2009年中期MacBook Pro上〜3%的CPU)运行带有web服务器和php以及全部的虚拟机。

要轻松创buildstream浪环境,您可以使用这个伟大的工具https://puphpet.com/

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

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

脚本安装PHP autoconf如果需要和编译你的PHP版本的模块。

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

谢谢

没有任何工作,并最终得到它的工作使用资源@ 这里和这里 ; 只记得OSX Mavericks(10.9)应该使用PHP 5.4.17或Stable PHP 5.4.22源码来编译mcrypt。 PHP源5.4.22在这里

Brew基础解决scheme为我工作

  1. 安装这些软件包

    $ brew install brew安装mcrypt php54-mcrypt

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

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

  3. 将此行添加到php.ini文件扩展名部分 – 请validation您的计算机中安装位置的扩展path

    扩展= “/ USR /本地/地窖/ php54-mcrypt的/ 5.3.26 / mcrypt.so”

  4. 重新启动你的Apache服务器

    $ apache重新启动

这就是我所做的:

 $ 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 

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

sudo apt-get install php5-mcrypt

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

服务php5-fpm重启

服务nginx重启