代码之家  ›  专栏  ›  技术社区  ›  Leo Galleguillos

如何在MAMP上启用pthreads

  •  2
  • Leo Galleguillos  · 技术社区  · 10 年前

    我使用的是带有OS X Mavericks的Mac,并在MAMP中运行php脚本。我正在运行的一些php脚本需要使用 pthreads .

    有人能提供在Mac上安装或启用pthreads的分步说明吗?

    我在谷歌上进行了大量搜索,几乎找不到关于这方面的文档。我所发现的是,我可能需要也可能不需要从源代码重新编译php,或者只是在php.ini中添加几个标志,或者我可以只使用pecl等 pecl install pthreads 并收到此错误:

    无法安装,当前用户无法写入通道“pecl.php.net”的php_dir

    在这一点上我几乎迷失了。如果可能的话,我想避免切换到使用WAMP的Windows计算机。

    1 回复  |  直到 10 年前
        1
  •  6
  •   Joe Watkins    10 年前

    我不是Mac用户,但是Mac和unix的构建过程是相同的,所以我可以帮助您。

    要配置当前安装,请执行以下操作:

    无法安装,当前用户无法写入通道“pecl.php.net”的php_dir

    这就是pecl安装失败的原因,请检查php_dir的配置。

    您可以通过以下方式确定设置值:

    pecl配置获取php_dir

    我不熟悉MAMP,但可能是因为您没有PHP的线程安全构建。

    您可以通过以下方式确定这一点:

    php-i | grep线程

    您应该期望:

    线程安全=>启用

    如果您启用了线程安全,那么修复php_dir上的权限将解决您的问题。

    如果不这样做,则必须重新构建或从其他源安装PHP的线程安全构建。

    打造自己

    最后一个选择是自己构建,因为这意味着你会错过上游提供的更新,尽管我不够熟悉,无法确定是否有维护良好的线程安全构建,我会假设有。

    要构建自己,您需要用新的安装来覆盖当前的安装,请将源代码下载到所需版本的PHP(建议使用5.5以上版本,最新版本稳定,最好一直使用)。

    已启用扩展

    您需要确定为当前版本启用了哪些扩展,并决定要在新版本中启用哪些扩展。

    要确定启用了哪些扩展,请执行以下操作:

    php-m

    记下这些:

    php-m>启用的扩展

    配置生成

    要将生成配置为线程安全,请使用以下配置选项:

    --启用维护者zts

    您需要将新安装的前缀设置为与旧安装的前缀匹配:

    --prefix=/old/前缀

    如果当前php二进制文件位于/usr/local/bin/php,则前缀为/usr/local。 如果当前php二进制文件位于/usr/bin/php,则前缀为/usr/。

    您还需要匹配当前生成配置目录和扫描目录设置:

    --配置文件路径=/old/config/path

    如果当前php.ini位于/usr/lib/php.ini,则路径为/usr/lib 如果当前php.ini位于/etc/php.ini,则路径为/etc/php.ini

    例如,如果您在启动时使用扫描目录,则目录/etc/php.d

    --配置文件scan-dir=/etc/php.d

    如果当前扫描目录是/etc/php.d,那么目录是/etc/php.d

    要配置扩展,请参考您在开始时创建的列表,使用以下命令:

    ./configure--帮助

    要找出开关,请启用您选择的扩展。如果列表中有pecl中的扩展,则可以在构建完成后使用pecl命令安装这些扩展。

    一般而言:

    • --enable-extname :不依赖外部库
    • --with-extname :依赖于外部库

    生成

    之后 configure 我们得跑了 make ,如果您有多个处理器或内核,则可能需要使用多个作业:

    品牌-j8

    将允许make并行运行(最多8个作业),这大大加快了构建速度。尽可能多地使用核心作业。

    在期间 制作 ,如果发生故障,则很明显故障与什么有关,如果您可以找到库的名称(通常导致故障的扩展名很有用),则通常可以通过安装导致故障的库的开发包来解决错误。

    开发包包含头和/或静态库,通常情况下,包维护人员会从普通包中省略这些内容以减轻重量,因此您可以安装libxml2包,但不安装头。

    安装内部版本

    什么时候 制作 完成后,您将准备好安装生成,请确保您具有前缀的权限并执行

    制造安装

    Pecl扩展

    现在,您应该能够使用安装所需的PECL扩展

    pecl安装extname

    线程

    您现在可以使用PECL或从github安装:

    pecl安装pthreads