在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的人。
在不使用port
或brew
情况下安装php- mcrypt
注:这些说明很长,因为他们打算彻底。 这个过程实际上相当简单。 如果你是一个乐观主义者,你可以跳到构buildmcrypt扩展部分,但你可能会很好地看到我所做的错误,告诉我先安装
autoconf
和libmcrypt
。
我刚刚安装了新的OSX 10.9。 为我工作的解决scheme非常接近ckm的解决scheme – 我完整地包括他们的步骤以及我自己的步骤。 我的主要目标(除了“有mcrypt
”)是以一种对系统整体影响最小的方式来执行安装。 这意味着手动做事(没有port
,没有brew
)
要手动执行,您首先需要一些依赖关系:一个用于构buildPHP模块,另一个用于mcrypt
。 这些是autoconf
和libmcrypt
,你可能已经拥有了这两者,但是这两者都不是全新安装的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中,它实际上具有特定于mcrypt
configuration信息,但除非您告诉它,否则它实际上并不激活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_dir
path(使用<?php phpinfo(); ?>
或php -i
来检查)。
它也会告诉你哪个php.ini
configuration文件正在被加载,所以你会知道设置来自哪里。 如果你使用的是自制软件,最有可能的就是/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,并且在这个设置中也使用了自制软件。)
当你点击这个真棒回购后,你可以使用类似的东西来安装php
和mcrypt
:
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_dir
path并找出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/
我会创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为我工作
-
安装这些软件包
$ brew install brew安装mcrypt php54-mcrypt
-
将默认的php.ini.default复制到php.ini
$ sudo cp /private/etc/php.ini.default /private/etc/php.ini
-
将此行添加到php.ini文件扩展名部分 – 请validation您的计算机中安装位置的扩展path
扩展= “/ USR /本地/地窖/ php54-mcrypt的/ 5.3.26 / mcrypt.so”
-
重新启动你的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重启