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

use*_*687 39 php apache macos 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
Run Code Online (Sandbox Code Playgroud)

这似乎运作良好,并安装PHP 5.3.21罚款.我已经完成了

sudo nano /private/etc/php.ini
Run Code Online (Sandbox Code Playgroud)

并包括在内

extension=mcrypt.so
Run Code Online (Sandbox Code Playgroud)

随着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
Run Code Online (Sandbox Code Playgroud)

并尝试将这两个目录作为extension_dir,没有运气.

经过谷歌搜索后,我也尝试了以下内容

./configure --with-config-file-path=/private/etc/php.ini --with-apxs2=/usr/sbin/apxs --with-mcrypt
Run Code Online (Sandbox Code Playgroud)

这似乎工作正常,但随后"制造",它返回

ext/mcrypt/mcrypt.o: No such file or directory
ext/mcrypt/mcrypt_filter.o: No such file or directory
Run Code Online (Sandbox Code Playgroud)

再次,没有成功.

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

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

Dav*_*ell 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 ,它将返回路径.

  • 对我来说,这需要以下(php53-mcrypt不能直接使用):`brew tap josegonzalez/php`,`brew tap homebrew/dupes`然后`brew install php53-mcrypt`.我用`brew search php |找到了这个包 grep mcrypt` (20认同)
  • 你需要[homebrew-php](https://github.com/josegonzalez/homebrew-php#usage) (3认同)
  • 在上面的brew安装命令`brew install mcrypt php53-mcrypt`中你有`php53-mcrypt`.如果我的php安装是PHP 5.4.11,那会改为`php54-mcrypt`吗? (2认同)
  • `brew install mcrypt php55-mcrypt`完成了这项工作 (2认同)

ckm*_*ckm 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 
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

完成 - 不需要酿造.HTH有人.

  • 如果没有先安装libmcrypt,这可能无法正常工作,即便如此,您仍可能遇到问题. (3认同)
  • 长期以来最简单的解决方案. (2认同)

Wil*_*mer 38

安装php- mcrypt不使用portbrew

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

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

要手动完成任务,首先需要一些依赖项:一个用于构建PHP模块,另一个用于构建PHP模块mcrypt.这些都是autoconflibmcrypt,其中任何一个,你可能已经,但两者都不你将有一个新安装的OSX 10.9.

autoconf的

Autoconf(缺乏更好的描述)用于告诉不完全不同但仍然非常不同的系统如何编译.它允许您使用相同的一组基本命令在Linux上构建模块,就像在OSX上一样,尽管它们具有不同的文件系统层次结构等等.我使用了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
Run Code Online (Sandbox Code Playgroud)

接下来,运行以下命令验证安装:

$ which autoconf
Run Code Online (Sandbox Code Playgroud)

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

libmcrypt

接下来,您将需要libmcrypt,用于提供mcrypt扩展的内核(扩展本身是一个PHP接口提供到此库中).我使用的方法基于这里描述的方法,但我试图尽可能地简化事情:

首先,下载SourceForgelibmcrypt提供的源代码,截至撰写本文时,可以使用以下内容:

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
Run Code Online (Sandbox Code Playgroud)

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

构建mcrypt扩展

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

首先,我们需要获取mcrypt扩展的源代码.这是最容易获得的,隐藏在所有PHP的源代码中.因此:确定您需要的PHP源代码版本.

$ php --version # to get your PHP version
Run Code Online (Sandbox Code Playgroud)

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

$ 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
Run Code Online (Sandbox Code Playgroud)

不幸的是,我当前的版本(在这种情况下为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
Run Code Online (Sandbox Code Playgroud)

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

一旦拥有它,(以及所有依赖项,从上面开始),您就可以进入实际构建/安装模块的主要过程.

$ 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
Run Code Online (Sandbox Code Playgroud)

理论上,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
Run Code Online (Sandbox Code Playgroud)

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

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

$ sudo cp /private/etc/php.ini.default /private/etc/php.ini
Run Code Online (Sandbox Code Playgroud)

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

extension=mcrypt.so
Run Code Online (Sandbox Code Playgroud)

在文件的某个地方.我建议搜索文件;extension=,并在第一次出现之前立即添加.

完成此操作后,安装和配置即告完成.您可以通过运行来验证这是否有效:

php -m | grep mcrypt
Run Code Online (Sandbox Code Playgroud)

哪个应输出" mcrypt",而不是别的.

如果您使用PHP依赖于Apache httpd,则需要重新启动它才能注意到Web上的更改.你可以这样做:

$ sudo apachectl restart
Run Code Online (Sandbox Code Playgroud)

而且你已经完成了.

  • 我真的不敢相信没有人为此付出巨大努力而感到烦恼.我没有问过上面的问题,但我肯定会用你的答案,非常感谢你. (6认同)
  • 本教程绝对令人惊叹,谢谢!一切都运行得很好,除了一个小障碍:我不得不跳过这行`code curl -o curl -o libmcrypt.tar.bz2'<SourceForge direct link URL>'`手动下载该文件然后`code tar xjf {DIRECTORY TO下载文件}` (2认同)

cwd*_*cwd 10

为什么你会遇到这个错误

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

它还会告诉您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
Run Code Online (Sandbox Code Playgroud)

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

在您使用了那个非常棒的回购后,您可以安装phpmcrypt使用以下内容:

brew install php54 php54-mcrypt
Run Code Online (Sandbox Code Playgroud)

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

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

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

所以,是的,你可以从源代码构建它,如果你只是想让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
Run Code Online (Sandbox Code Playgroud)

TLDR

  • 如果可能的话,您应该使用homebrew安装mcrypt
  • 如果您收到错误,可能是因为您的配置文件搞砸了.检查extension_dir路径并确定mcrypt.so文件的位置,并查看是否存在差异(或指定完整路径)


Sin*_*dem 8

对我来说,在优胜美地

$ brew install mcrypt php56-mcrypt
Run Code Online (Sandbox Code Playgroud)

重启电脑

做了伎俩.


小智 5

使用brew的解决方案仅在以下之后工作:在php.ini中

nano /private/etc/php.ini
Run Code Online (Sandbox Code Playgroud)

添加此行:

extension="/usr/local/Cellar/php53-mcrypt/5.3.26/mcrypt.so"
Run Code Online (Sandbox Code Playgroud)

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