精华内容
下载资源
问答
  • 编译PHP扩展的方法

    2021-04-25 01:20:58
    编译PHP扩展的方法【相关学习推荐:php编程(视频)】构建PHP扩展你已经知道如何去编译PHP本身,下一步我们将编译外部扩展。我们将讨论扩展的构建过程和可用的编译选项。载入共享扩展在前一个章节你已经知道,PHP 扩展...

    编译PHP扩展的方法

    40d5da79a777c767bcbb8726d1957865.png

    【相关学习推荐:php编程(视频)】

    构建PHP扩展

    你已经知道如何去编译PHP本身,下一步我们将编译外部扩展。我们将讨论扩展的构建过程和可用的编译选项。

    载入共享扩展

    在前一个章节你已经知道,PHP 扩展既能构建成静态库也可以构建成动态库(.so)。大多数静态库是与 PHP 捆绑在一起编译的,动态库可以显式地传递参数 --enable-EXTNAME=shared 或 --with-EXTNAME=shared 给 ./configure。

    静态扩展默认是可用的,动态库需要增加 extension 或者 zend_extension 的 ini 配置。俩者可以是绝对路径,也可以是相对路径。

    例如编译 PHP 扩展用项目的配置项:~/php-src> ./configure --prefix=$HOME/myphp

    --enable-debug --enable-maintainer-zts

    --enable-opcache --with-gmp=shared

    这个例子中 opcache 扩展和 GMP 扩展都被编译为位于 modules/ 目录中的共享对象。 您可以通过更改extension_dir或通过传递绝对路径来加载:~/php-src> sapi/cli/php -dzend_extension=`pwd`/modules/opcache.so

    -dextension=`pwd`/modules/gmp.so

    # or

    ~/php-src> sapi/cli/php -dextension_dir=`pwd`/modules

    -dzend_extension=opcache.so -dextension=gmp.so

    在 make install 步骤中,这两个 .so 文件会被移进 PHP 安装的扩展目录,你使用 php-config --extension-dir 命令可能可以找到它。对于上面的构建选项,它将是 /home/myuser/myphp/lib/php/extensions/no-debug-non-zts-MODULE_API。这个值也是 extension_dir 配置选项的默认值,所以你无需明确地指定它,就可以直接加载进扩展:~/myphp> bin/php -dzend_extension=opcache.so -dextension=gmp.so

    这给我们留下了一个问题:你应该使用哪种机制?共享对象使你有一个基本的 PHP 二进制文件并通过 php.ini 加载其他扩展。发行版通过原始的 PHP 软件包和将扩展作为单独的软件包分发来利用此功能。另一方面,如果你编译自己的 PHP 二进制文件,则可能不需要这个,因为你已经知道需要哪些扩展。

    根据经验,你将对 PHP 本身捆绑的扩展使用静态链接,并将共享扩展用于其他地方。原因很简单,就像你稍后看到的,构建外部扩展为共享对象的更容易(或至少减少了侵入性)。另一个好处是你可以在不用重新构建 PHP 的情况下更新扩展。注意

    如果你需要有关扩展和 Zend 扩展之间差异的信息,你可以查阅专门章节。

    从 PECL 安装扩展

    PECL,PHP 扩展社区库,提供了大量的 PHP 扩展。当扩展从主 PHP 发行版中删除,它们通常还在 PECL中。同样,现在与 PHP 捆绑一起的许多扩展以前都是 PECL 扩展。

    除非你在 PHP 构建的配置步骤指定 --without-pear,否则 make install 将PECL 作为 PEAR 的一部分下载并安装。你可以在 $PREFIX/bin 目录下找到 pecl 脚本。现在安装扩展很简单,就像运行 pecl install EXTNAME 一样,例如:~/myphp> bin/pecl install apcu

    该命令将下载、编译并安装 APCu 扩展。结果会是 apcu.so 文件在扩展目录下,可以通过传递 extension=apcu.so 配置选项来加载此文件。

    虽然 pecl install 对终端用户非常方便,但扩展开发人员对它没什么兴趣。在下面,我们将会说明两种手动构建扩展的方式:通过将其导入主要的 PHP 源码树(允许静态链接)或通过外部构建(仅共享)。

    添加扩展到 PHP 源码树

    第三方扩展和捆绑在 PHP 的扩展之间没有根本上的区别。因此你可以通过复制外部扩展到 PHP 源码树,并和通常的构建过程一样来构建。我们以APCu 作为例子来演示。

    首先,你要把扩展的源代码放到 PHP 源码树的 ext/EXTNAME 目录。如果扩展可通过 Git 获得,就像从 ext/ 中克隆仓库一样简单:~/php-src/ext> git clone https://github.com/krakjoe/apcu.git

    或者你也可以下载源码压缩包并解压它:/tmp> wget http://pecl.php.net/get/apcu-4.0.2.tgz

    /tmp> tar xzf apcu-4.0.2.tgz

    /tmp> mkdir ~/php-src/ext/apcu

    /tmp> cp -r apcu-4.0.2/. ~/php-src/ext/apcu

    该扩展会包含一个 config.m4 文件,该文件指定autoconf文件使用的特定扩展构建指令。 为了将它们包含在 /configure 脚本,你必须再次运行 ./buildconf。为了确保配置文件已经重新生成,建议事先删除它:~/php-src> rm configure && ./buildconf --force

    现在你可以使用 ./config.nice 脚本将 APCu 添加到你的现有配置,或者从全新的配置行开始:~/php-src> ./config.nice --enable-apcu

    # or

    ~/php-src> ./configure --enable-apcu # --other-options

    最后,运行 make -jN 执行实际的构建。由于我们没有使用 --enable-apcu=shared,该扩展已经静态链接到 PHP 库,即不需要额外的操作即可使用它。显然,你也可以使用 make install 去安装最后的二进制文件。

    使用 phpize 构建扩展

    还可以通过使用构建 PHP章节提及到的 phpize 脚本与 PHP 分开构建。

    phpize 的作用与 ./buildconf 用于 PHP 构建的脚本相似:第一,通过$PREFIX/lib/php/build 复制文件导入 PHP 构建系统到你的扩展中。这些文件是 acinclude.m4(PHP 的 M4宏)、phpize.m4(它会在你的扩展中重命名为 configure.in 并包含主要的构建说明)和 run-tests.php。

    然后 phpize 将调用 autoconf 生成 ./configure 文件,该文件可以自定义扩展构建。注意,没必要传递 --enable-apcu 给它,因为这是隐式假定的。相反,你应该使用 --with-php-config 指定你的 php-config 脚本路径:/tmp/apcu-4.0.2> ~/myphp/bin/phpize

    Configuring for:

    PHP Api Version: 20121113

    Zend Module Api No: 20121113

    Zend Extension Api No: 220121113

    /tmp/apcu-4.0.2> ./configure --with-php-config=$HOME/myphp/bin/php-config

    /tmp/apcu-4.0.2> make -jN && make install

    当你构建扩展时,你应该总是指定 --with-php-config 选项(除非你只有一个全局的 PHP 安装),否则 ./configure 无法确定要构建的 PHP 版本和标志。指定 php-config 脚本也确保了 make install 将移动生成的 .so 文件(可以在 modules/ 目录找到)到正确的扩展目录。

    由于在 phpize 阶段还复制了 run-tests.php 文件,因此你可以使用 make test(或显示调用 run-tests)运行扩展测试。

    删除已编译对象的 make clean 也是可用的,并且允许你增量构建失败时强制重新构建扩展。 另外 phpize 提供了一个清理选项 phpize --clean。该命令将删除所有 phpize 导入的文件和通过 /configure 脚本生成的文件。

    显示关于扩展的信息

    PHP CLI 二进制文件提供了几个选项来显示关于扩展的信息。你已经知道 -m,该命令会列出所有已经下载的扩展。你可以利用它来确定扩展是否正确下载了:~/myphp/bin> ./php -dextension=apcu.so -m | grep apcu

    apcu

    还有其他一些以 --r 开头的参数都是具有 Reflection 功能。例如,你可以使用 --ri 去显示扩展的配置:~/myphp/bin> ./php -dextension=apcu.so --ri apcu

    apcu

    APCu Support => disabled

    Version => 4.0.2

    APCu Debugging => Disabled

    MMAP Support => Enabled

    MMAP File Mask =>

    Serialization Support => broken

    Revision => $Revision: 328290 $

    Build Date => Jan 1 2014 16:40:00

    Directive => Local Value => Master Value

    apc.enabled => On => On

    apc.shm_segments => 1 => 1

    apc.shm_size => 32M => 32M

    apc.entries_hint => 4096 => 4096

    apc.gc_ttl => 3600 => 3600

    apc.ttl => 0 => 0

    # ...

    --re 参数列出扩展添加的所有初始设置、常数、函数和类:~/myphp/bin> ./php -dextension=apcu.so --re apcu

    Extension [ extension #27 apcu version 4.0.2 ] {

    - INI {

    Entry [ apc.enabled ]

    Current = '1'

    }

    Entry [ apc.shm_segments ]

    Current = '1'

    }

    # ...

    }

    - Constants [1] {

    Constant [ boolean APCU_APC_FULL_BC ] { 1 }

    }

    - Functions {

    Function [ function apcu_cache_info ] {

    - Parameters [2] {

    Parameter #0 [ $type ]

    Parameter #1 [ $limited ]

    }

    }

    # ...

    }

    }

    --re 参数仅适用普通扩展,Zend 扩展使用 --rz 代替。 你可以在 opcache 上尝试:~/myphp/bin> ./php -dzend_extension=opcache.so --rz "Zend OPcache"

    Zend Extension [ Zend OPcache 7.0.3-dev Copyright (c) 1999-2013 by Zend Technologies ]

    如你所见, 该命令没有显示有用的信息。因为 opcache 同时注册了普通扩展和 Zend 扩展, 前者包含所有初始配置、常量和函数。因此在这个特殊的案例中,你仍然需要使用 --re。其他 Zend 扩展通过 --rz 可得到信息。

    扩展 API 兼容性

    扩展对5个主要因素非常敏感。如果它们不合适,则该扩展将不会加载到 PHP中,并将无用:PHP Api 版本

    Zend 模块 Api 编号

    Zend 扩展 Api 编号

    调试模式

    线程安全

    phpize 工具可让你回想它们的一些信息。所以,如果你在调试模式下构建 PHP,并试图加载和使用非调试模式构建的扩展,那它将无法工作。其他检查也一样。

    PHP Api 版本 是内部 API 版本号,Zend 模块 Api 编号 和 Zend 扩展 Api 编号 分别与 PHP 扩展和 Zend 扩展 API 有关。

    那些编号随后作为 C 宏传递给正在构建的扩展,以便它本身可以检查那些参数,并在 C 预处理器 #ifdef 的基础上采用不同的代码路径。当那些编号作为宏传给扩展代码,它们会被写在扩展结构中,以便你每次尝试在 PHP 二进制文件中加载该扩展时,都将对照 PHP 二进制文件本身的编号进行检查。如果不匹配,那么该扩展不会被加载,并显示一条错误信息。

    如果我们看一下扩展的 C 结构,它看起来像这样:zend_module_entry foo_module_entry = {

    STANDARD_MODULE_HEADER,

    "foo",

    foo_functions,

    PHP_MINIT(foo),

    PHP_MSHUTDOWN(foo),

    NULL,

    NULL,

    PHP_MINFO(foo),

    PHP_FOO_VERSION,

    STANDARD_MODULE_PROPERTIES

    };

    至今,对我们来说有趣的是 STANDARD_MODULE_HEADER 宏。如果我们扩展它,我们可以看到:#define STANDARD_MODULE_HEADER_EX sizeof(zend_module_entry), ZEND_MODULE_API_NO, ZEND_DEBUG, USING_ZTS

    #define STANDARD_MODULE_HEADER STANDARD_MODULE_HEADER_EX, NULL, NULL

    注意 ZEND_MODULE_API_NO、ZEND_DEBUG、 USING_ZTS 是如何使用的。

    如果查看 PHP 扩展的默认目录,它应该像 no-debug-non-zts-20090626。如你所料,该目录由不同的部分组成:调试模式,其次是线程安全信息,然后是Zend 模块 Api 编号。所以默认情况下,PHP 试图帮你浏览扩展。注意

    通常,当你成为一位内部开发人员或扩展开发人员,必须使用调试参数,并且如果必须处理 Windows 平台,线程也会显示出来。你可以针对那些参数的多种情况多次编译同一扩展。

    记住,每次新的 PHP 主要/次要版本都会更改参数,比如 PHP Api 版本,这就是为什么你需要针对新的 PHP 版本重新编译的原因。> /path/to/php70/bin/phpize -v

    Configuring for:

    PHP Api Version: 20151012

    Zend Module Api No: 20151012

    Zend Extension Api No: 320151012

    > /path/to/php71/bin/phpize -v

    Configuring for:

    PHP Api Version: 20160303

    Zend Module Api No: 20160303

    Zend Extension Api No: 320160303

    > /path/to/php56/bin/phpize -v

    Configuring for:

    PHP Api Version: 20131106

    Zend Module Api No: 20131226

    Zend Extension Api No: 220131226注意

    Zend 模块 Api 编号 本身是使用 年 月 日 的日期格式构建。这是 API 更改和并被标记的日期。Zend 扩展 Api 编号 是 Zend 版本,其次是 Zend 模块 Api 编号。

    注意

    数字太多?是的,一个 API 编号绑定一个 PHP 版本,对任何人来说都足够了,并且可以简化对 PHP 的理解。不幸的是,除了 PHP 版本本身,还增加了3种不同的 API 编号。你应该找哪一个?答案是任何一个:当 PHP 版本演变时,它们三种同时演变。由于历史原因,我们有三种不同编号。

    但是,你是一位 C开发人员,不是吗?为什么不根据这些数字构建一个“兼容的”头文件?我们在我们的扩展中使用了类似这些:#include "php.h"

    #include "Zend/zend_extensions.h"

    #define PHP_5_5_X_API_NO 220121212

    #define PHP_5_6_X_API_NO 220131226

    #define PHP_7_0_X_API_NO 320151012

    #define PHP_7_1_X_API_NO 320160303

    #define PHP_7_2_X_API_NO 320160731

    #define IS_PHP_72 ZEND_EXTENSION_API_NO == PHP_7_2_X_API_NO

    #define IS_AT_LEAST_PHP_72 ZEND_EXTENSION_API_NO >= PHP_7_2_X_API_NO

    #define IS_PHP_71 ZEND_EXTENSION_API_NO == PHP_7_1_X_API_NO

    #define IS_AT_LEAST_PHP_71 ZEND_EXTENSION_API_NO >= PHP_7_1_X_API_NO

    #define IS_PHP_70 ZEND_EXTENSION_API_NO == PHP_7_0_X_API_NO

    #define IS_AT_LEAST_PHP_70 ZEND_EXTENSION_API_NO >= PHP_7_0_X_API_NO

    #define IS_PHP_56 ZEND_EXTENSION_API_NO == PHP_5_6_X_API_NO

    #define IS_AT_LEAST_PHP_56 (ZEND_EXTENSION_API_NO >= PHP_5_6_X_API_NO && ZEND_EXTENSION_API_NO < PHP_7_0_X_API_NO)

    #define IS_PHP_55 ZEND_EXTENSION_API_NO == PHP_5_5_X_API_NO

    #define IS_AT_LEAST_PHP_55 (ZEND_EXTENSION_API_NO >= PHP_5_5_X_API_NO && ZEND_EXTENSION_API_NO < PHP_7_0_X_API_NO)

    #if ZEND_EXTENSION_API_NO >= PHP_7_0_X_API_NO

    #define IS_PHP_7 1

    #define IS_PHP_5 0

    #else

    #define IS_PHP_7 0

    #define IS_PHP_5 1

    #endif

    看见了?

    或者更简单(更好)的是使用 PHP_VERSION_ID ,这你可能更熟悉:#if PHP_VERSION_ID >= 50600想了解更多编程学习,敬请关注php培训栏目!

    编译PHP扩展的方法的教程已介绍完毕,更多请关注跳墙网其他文章教程!

    编译PHP扩展的方法相关教程

    展开全文
  • 安装php扩展

    2021-04-13 11:15:08
    入职后第二个任务:安装php扩展:memcache,redis,imagick,magickwand,scws#!/bin/bash#php扩展脚本#Email:1445675350@qq.com#autor:fujinzhou#createtime:2016-11-29#安装php-memecache扩展wgethttps://pecl....

    入职后第二个任务:安装php扩展:memcache,redis,imagick,magickwand,scws#!/bin/bash

    #php扩展脚本

    #Email:1445675350@qq.com

    #autor:fujinzhou

    #create time:  2016-11-29

    #安装php-memecache扩展

    wget https://pecl.php.net/get/memcache-3.0.8.tgz

    tar zxvf memcache-3.0.8.tgz && mv  /usr/local/memcache

    cd /usr/local/memcache

    /usr/local/php/bin/phpize

    ./configure --enable-memcache --with-php-config=/usr/local/php/bin/php-config --with-zlib-dir

    make && make install

    #安装phpredis扩展

    wget https://github.com/nicolasff/phpredis/archive/2.2.4.tar.gz

    tar -xf phpredis-2.2.4.tar.gz && cd phpredis-2.2.4

    /usr/local/php/bin/phpize

    ./configure --with-php-config=/usr/local/php/bin/php-config

    make && make install

    #安装imagick扩展

    wget http://nchc.dl.sourceforge.net/project/p_w_picpathmagick/old-sources/6.x/6.8/ImageMagick-6.8.9-10.tar.gz

    tar -xf ImageMagick-6.8.9-10.tar.gz

    cd ImageMagick-6.8.9-10

    ./configure --prefix=/usr/local/p_w_picpathmagick

    make && make install

    wget http://pecl.php.net/get/imagick-3.1.2.tgz

    cd imagick-3.1.2

    /usr/local/php/bin/phpize

    ./configure --with-php-config=/usr/local/php/bin/php-config  --with-imagick=/usr/local/p_w_picpathmagick/

    make && make install

    #安装magickwand扩展

    wget ftp://ftp.fifi.org/ImageMagick/php/releases/MagickWandForPHP-1.0.9-2.tar.gz

    tar -xf MagickWandForPHP-1.0.9-2.tar.gz

    cd MagickWandForPHP-1.0.9

    /usr/local/php/bin/phpize

    ./configure  --with-php-config=/usr/local/php/bin/php-config  --enable-shared --with-magickwand=/usr/local/p_w_picpathmagick

    make && make install

    #安装scws扩展

    wget http://www.ftphp.com/scws/down/scws-1.2.0.tar.bz2

    tar -xjf scws-1.2.0.tar.bz2

    cd scws-1.2.0

    ./configure  --prefix=/usr/local/scws

    make && make install

    cd phpext/

    /usr/local/php/bin/phpize

    ./configure  --with-scws=/usr/local/scws/ --with-php-config=/usr/local/php/bin/php-config

    make && make install

    #删除安装目录

    rm phpredis-2.2.4 -rf

    rm ImageMagick-6.8.9-10 -rf

    rm imagick-3.1.2 -rf

    rm MagickWandForPHP-1.0.9 -rf

    rm scws-1.2.0 -rf

    '''

    [scws]

    extension = scws.so

    extension_dir = /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/

    scws.default.charset = utf8

    scws.default.fpath   = /usr/local/scws/etc

    [redis]

    extension = redis.so

    extension_dir = /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/

    [memcache]

    extension = memcache.so

    extension_dir = /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/

    [imagick]

    extension = imagick.so

    extension_dir = /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/

    [magickwand]

    extension = magickwand.so

    extension_dir = /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/

    '''

    展开全文
  • 什么是php扩展

    2021-03-23 18:48:36
    PHP扩展英文为PHP Extension and Application Repository,简称pear(下面都以pear简称),中文全称为PHP扩展与应用库。是为了创建一个类似于Perl CPAN档案的工具,Stig S. Bakken在1999年创立了PEAR项目。下面为大家...

    a057acaacf580e3dc057c26baabb51ca.png

    PHP扩展英文为PHP Extension and Application Repository,简称pear(下面都以pear简称),中文全称为PHP扩展与应用库。是为了创建一个类似于Perl CPAN档案的工具,Stig S. Bakken在1999年创立了PEAR项目。下面为大家详细介绍一下php扩展。

    PEAR是PHP扩展与应用库(the PHP Extension and Application Repository)的缩写。它是一个PHP扩展及应用的一个代码仓库,简单地说,PEAR之于PHP就像是CPAN(Comprehensive Perl Archive Network)之于Perl。

    PEAR的基本目标是发展成为PHP扩展和库代码的知识库,而这个项目最有雄心的目标则是试图定义一种标准,这种标准将帮助开发者编写可移植、可重用的代码。

    Internet上已经有关于该项目的一些文档。例如,一些初始的资料已经可以在PHP正式手册中找到,更多的资料即将加入。

    在很大程度上,PEAR还是一项正在进行之中的工作。在未来的几个月内,PEAR安装程序和PEAR网站将有很大的发展。为了在下一个PHP版本中使用PEAR管理数量日益增长的C扩展,以及用PEAR安装程序作为用户把扩展下载和安装到PHP的前端工具,在PHP Core Developer邮件列表上已经有了大量的讨论。

    软件安装

    安装PEAR实际上很简单。由于PEAR库更新很快,所以下面我要介绍的是如何安装PEAR最新的CVS版本。

    注意:PEAR内部知识库系统将来可能要发生变化。就目前来说,PEAR包、库与PHP本身一起保存到同一CVS树,它可能导致在管理PHP主知识库和开发者、PEAR本身的知识库和开发者这两方面都出现问题。可以预料,在不远的将来,PEAR将分离成为独立的模块/树。这个模块已经存在,但大部分的包仍旧在老位置。

    如果你从来没有听说过CVS,请看看相关资料。CVS不是一种特别难用的技术,但熟悉它却需要一定的时间。

    假设你的机器上已经安装好了标准的CVS客户软件,接下来你应该:

    打开一个终端窗口(rxvt,xterm,或其他)。

    输入下面的命令:cvs -z3 -d :pserver:cvsread@cvs.php.net:/repository login

    Password: [在这里输入“phpfi”作为密码]

    cvs -z3 -d :pserver:cvsread@cvs.php.net:/repository co php4

    [这个命令将创建新的目录php4]

    cd php4

    cvs -z3 -d :pserver:cvsread@cvs.zend.com:/repository login

    Password: [这里输入密码zend]

    cvs -z3 -d :pserver:cvsread@cvs.zend.com:/repository co Zend TSRM

    [该命令将在php4下面创建两个新目录,名字为“Zend”和“TSRM”]

    ./buildcon

    这就是全部的安装过程。运行buildconf将创建标准的configure脚本,这个脚本可以用来设置PHP选项。在默认安装中,PEAR将自动安装到/usr/local/lib/php下。但是,你也可以手工构造各个文件,方法是:以超级用户身份进入,转到php4/pear目录,执行make install-su。

    除此之外,你还应该把PEAR根目录加入到php.ini文件的include_path。默认的目录应该是/usr/local/lib/php,但如果你手工修改了选项,它可能在其他位置。

    展开全文
  • Docker php扩展安装篇

    2021-03-23 18:09:15
    这篇文章主要讲述:docker-php-sourcedocker-php-ext-installdocker-php-ext-enabledocker-php-ext-configure如何通过这四个命令来安装php扩展的,这四个命令在容器中都做了哪些事情。1.演示命令的作用docker-...

    这篇文章主要讲述:

    docker-php-source

    docker-php-ext-install

    docker-php-ext-enable

    docker-php-ext-configure

    如何通过这四个命令来安装php扩展的,这四个命令在容器中都做了哪些事情。

    1.演示命令的作用

    docker-php-source 此命令就是在php容器中创建源码存放目录用的。我们都知道linux一般的源码存放地点为,/usr/src,而此命令就是在/usr/src下创建一个php文件夹:/usr/src/php 里面放一些php的扩展源码,而php安装后的扩展实际存放路径为/usr/src/php/ext 下面

    1

    docker-php-source此命令就是在php容器中创建源码存放目录用的。我们都知道linux一般的源码存放地点为,/usr/src,而此命令就是在/usr/src下创建一个php文件夹:/usr/src/php里面放一些php的扩展源码,而php安装后的扩展实际存放路径为/usr/src/php/ext下面

    参数:

    extract : 创建并初始化 /usr/src/php目录

    delete : 删除 /usr/src/php目录

    1

    2

    3

    参数:

    extract:创建并初始化/usr/src/php目录

    delete:删除/usr/src/php目录

    #创建并初始化

    docker-php-source extract

    #删除

    docker-php-source delete

    1

    2

    3

    4

    #创建并初始化

    docker-php-sourceextract

    #删除

    docker-php-sourcedelete

    bb5e5495e150e9031a4ae9ebd45bb7fb.png

    docker-php-ext-install

    这个命令,是用来安装并启动PHP扩展的。

    命令格式:

    docker-php-ext-install [源码包目录名]

    注意点:

    源码包需要放在/usr/src/php/ext 目录下 (这个目录就是上面那条命令创建的,ext目录下包含了大多数php扩展,方便我们之间通过命令安装)

    默认情况,PHP容器没有 /usr/src/php这个目录,需要使用 docker-php-source extract来生成。

    docker-php-ext-install 安装的扩展在安装完成后,会自动调用docker-php-ext-enable来启动安装的扩展。

    卸载扩展,直接删除/usr/local/etc/php/conf.d 对应的配置文件即可。

    演示(安装pdo_mysql扩展和redis扩展)

    1.安装pdo_mysql扩展

    docker-php-ext-install pdo_mysql

    1

    docker-php-ext-installpdo_mysql

    5b0a448fd2649d681efdc3f96ed51da5.png

    pdo_mysql 安装完成

    2.安装redis扩展

    docker-php-ext-install redis

    1

    docker-php-ext-installredis

    猜猜会不会报错。

    ae188daaa3971549e45fc440b47fd481.png

    报错,为什么? 因为你的/usr/src/php/ext 目录下跟没有这个扩展,不信看pdo的那张图里,那你现在要干什么,当然是要去下载,然后解压到这个目录里,再执行上面的命令。(我已经下载好了 直接挪过去执行就行)

    0d17032c1d24566acd5aa6e2db923a33.png

    安装完成后重启下php,然后看

    4c01823558570b5e1a0235d227f46743.png

    8fd2a846eaf7442214397fa10bcb29d0.png

    卸载扩展

    卸载扩展直接删除 /usr/local/etc/php/conf.d 对应的配置文件即可

    1960e597151c36944f1b801c372d0e55.png我们删掉redis扩展试试看

    a522fde2fd6d20d4737cea54c4fc0a54.png没有了

    docker-php-ext-configure

    docker-php-ext-configure 一般都是需要跟 docker-php-ext-install搭配使用的。它的作用就是,当你安装扩展的时候,需要自定义配置时,就可以使用它来帮你做到。 你可以把他理解为编译安装 的 ./configure –with 。。。。。等等参数,一般Dockerfile里会用到

    例:

    FROM php:7.2-fpm

    RUN apt-get update && apt-get install -y \

    libfreetype6-dev \

    libjpeg62-turbo-dev \

    libpng-dev \

    && docker-php-ext-install -j$(nproc) iconv \

    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \

    && docker-php-ext-install -j$(nproc) gd

    1

    2

    3

    4

    5

    6

    7

    8

    FROMphp:7.2-fpm

    RUNapt-getupdate&&apt-getinstall-y\

    libfreetype6-dev\

    libjpeg62-turbo-dev\

    libpng-dev\

    &&docker-php-ext-install-j$(nproc)iconv\

    &&docker-php-ext-configuregd--with-freetype-dir=/usr/include/--with-jpeg-dir=/usr/include/\

    &&docker-php-ext-install-j$(nproc)gd

    最后编辑:2019-11-08作者:shooter

    cb9daae677fbcf9a9b0e39a252b93c86?s=96&d=monsterid&r=g

    这个作者貌似有点懒,什么都没有留下。

    展开全文
  • php扩展 的管理以及开启,下载。1.打开环境,打开根目录下的index.php,输入途中代码,保存在浏览器地址栏内输入localhost/index.php或者127.0.0.1/index.php2.phpinfo( )函数会打印出当前使用的php环境的详细配置3....
  • mac php 扩展按照

    2021-04-08 10:17:45
    网上有文章写到,可以使用brew安装php扩展。亲测之后,此方法失败。如:> brew install php70-redis>## 推荐使用pecl安装php扩展### 一、把pecl命令和phpize命令添加到环境变量中pecl所在路径如下:```/usr/...
  • 扩展需要 libxml PHP 扩展。这表示需要使用 --enable-libxml ,尽管这将隐式完成因为 libxml 是缺省开启的。要开启SOAP支持, 配置 PHP 时要加上 --enable-soap .二、相关函数is_soap_fault — ...
  • 扩展需要 libxml PHP 扩展。这表示需要使用 --enable-libxml ,尽管这将隐式完成因为 libxml 是缺省开启的。需要PHP5及以上版本。此扩展默认为启用,编译时可通过下列选项禁用: --disable-simplexml二、使用示例基...
  • PHP扩展开发入门教程,php扩展入门教程PHP扩展开发我准备在此系列博文中总结我有关PHP扩展开发的学习和感悟,力图简单清晰地描述在Linux系统下开发一个PHP扩展应该具备的最基本知识。水平较低,难免有错误,望指出。...
  • docker安装php扩展gd库

    2020-12-20 12:22:59
    Docker 是一个开源的应用容器引擎,基于Go 语言并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何...一、安装nginx、php、mysql镜像docker p...
  • golang 编写 PHP 扩展

    2021-03-23 20:40:09
    phper 都知道 php-extension 采用 C/C++ 编写.由于 C/C++ 开发效率问题我们来采用 golang 编写 php-extension充分利用 golang 的开发效率和生态给 PHP 添砖加瓦.环境准备wsl ubuntugolang 1.13php 7.3新建项目...
  • golang怎么编写PHP扩展

    2021-03-26 12:22:27
    下面由golang教程栏目给大家介绍golang编写PHP扩展方法,希望对需要的朋友有所帮助!golang 编写 PHP 扩展phper 都知道 php-extension 采用 C/C++ 编写.由于 C/C++ 开发效率问题我们来采用 golang 编写 ...
  • 如何安装php扩展模块

    2021-04-08 12:02:38
    安装php扩展模块的方法:首先进入PHP解压缩后的源码包中,找到要安装的扩展模块的目录;然后进行编译安装;接着修改php.ini文件;最后重启apache即可生效。推荐:《PHP视频教程》1、先进入PHP解压缩后的源码包中,...
  • 使用纯Rust开发PHP扩展

    2021-04-16 12:32:40
    背景最近由于工作需要使用某个开源的PHP扩展,发现扩展并不成熟,在某些情况下会产生内存段错误使php-fpm退出,从而产生502错误。联想到PHP源码和PHP扩展都是用C语言写的,虽然C语言在性能和内存精细控制等方面很...
  • PHP扩展的安装方式通常分为两种:1. 随同PHP编译2. 生成单独的.so文件这里介绍第二种方式,对于第二种方式执行效率可能低些,但是模块化,就是可以保持php安装不变的情况下,通过php.ini连接单独生成的so文件实现...
  • Linux下安装PHP扩展

    2021-05-15 19:29:02
    安装php-redis扩展下载在github上搜索 phpredis , 我选择下载地址为 https://github.com/phpredis/phpredis克隆下载1git clone https://github.com/phpredis/phpredis.git解压,如果下载的 .zip 压缩包可以通过 un.....
  • 安装第三方PHP扩展示例宝塔面板的PHP安装路径为/www/server/php/ 且支持多个PHP版本共存,所以安装PHP扩展的方法与网上那些示例略有不同,下们我通过安装oauth扩展来说明一下如何安装第三方PHP扩展。注意:1、安装...
  • Ubuntu下安装php扩展

    2021-02-11 13:13:45
    PHP扩展的安装方式通常分为两种:1. 随同PHP编译2. 生成单独的.so文件这里介绍第二种方式,对于第二种方式执行效率可能低些,但是模块化,就是可以保持php安装不变的情况下,通过php.ini连接单独生成的so文件实现...
  • ffmpeg-php扩展

    2021-04-06 08:24:53
    php视频缩略图,较常用的是ffmpeg-php1: 安装 ffmpegffmpeg的下载链接 http://ffmpeg.org/download.html解压安装包tar -jxvf ffmpeg-x.x.tar.bz2进入目录cdffmpeg-x.x编译安装./configure --enable-shared &...
  • centos7 下安装PHP扩展

    2021-05-08 02:06:36
    添加PHP扩展:方法一编译PHP时添加在编译安装 PHP 时加上–with-pdo-mysql[=DIR] 参数即可安装 PDO MySQL 扩展。其中的[=DIR]是可选的,是指 MySQL 的安装目录。另外,需要用到 –with-mysql-sock[=DIR] 参数来设置...
  • php扩展没有加载的解决方法:1、打开php.ini配置文件;2、修改配置【display_startup_errors = On】;3、创建错误日志;4、重启php5-fpm守护程序。问题还原:我正在尝试安装php的ssh2扩展,并且有一点点困难,文件在...
  • laravel项目需要的一些php扩展,laravel项目phplaravel 5.5的要求:PHP >= 7.0.0PHP OpenSSL 扩展PHP PDO 扩展PHP Mbstring 扩展PHP Tokenizer 扩展PHP XML 扩展easywechat的扩展要求:PHP >= 7.0PHP cURL ...
  • php中文手册mac版v1.0.2 官方最新版类型:Mac编程软件大小:31.4M语言:中文 评分:10.0标签:立即下载Mac OS X中如何安装php扩展支持?Mac OS X中安装php扩展支持教程。有Mac用户询问Mac OS X中如何安装php扩展支持...
  • 安装php扩展 ffmpeg-php

    2021-03-26 15:19:52
    首先先下载扩展扩展下载地址:http://nchc.dl.sourceforge.net/project/ffmpeg-php/ffmpeg-php/0.6.0/ffmpeg-php-0.6.0.tbz2进入 ffmpeg-php目录 进行编译扩展/usr/local/...php/bin/...
  • 我正在尝试构建一个bash脚本来安装Source Guardian PHP扩展,但目标目录在Ubuntu的每个后续版本上都是不同的.在Ubuntu 14.04上安装PHP5导致扩展存储在/usr/lib / php5 / 20121212 lfs /中,在Ubuntu 15.04中,该目录...
  • Dockerfile 安装PHP扩展

    2021-04-29 09:37:26
    1、方法一FROM php:7.2.12-fpmRUN apt-get update \# 相关依赖... apt-get install -y \libfreetype6-dev \libjpeg62-turbo-dev \libmcrypt-dev \libpng-dev \# 安装扩展&& docker-php-ext-install -j$(npr...
  • php扩展怎么卸载

    2021-03-22 23:53:02
    卸载php的命令,使用命令yum remove php是不够的,因为yum并不会帮你把php完全卸载掉,如果你使用php -v可以发现php的版本号仍然存在。正确的卸载php的方法是:删除php的rpm安装包(其实yum安装在根本上还是使用的rpm...
  • php扩展模块如何安装

    2021-04-24 21:49:53
    我们编译完php之后,它有一个功能可以查看所有加载的模块,这些模块会包含一些静态的也会包含一些动态的[root@zhangmengjunlinux curl]# /usr/local/php/bin/php -m一些动态的可以再php.ini也就是php的配置文件里去...
  • 今天在linux下开发php扩展,发现修改源代码重新编译安装后,.so文件还是原来的,并没有更新。最后清理了所有编译后产生的文件,重新编译安装才更新了.so文件。估计是编译后产生了缓存,为了方便清理,可以在ext_skel...
  • 怎样编写PHP扩展

    2020-12-22 02:53:37
    每个PHP程序员必接触过扩展,PECL库提供超过100多个扩展,比较常用的memcache,apc,mysqli等。在php.ini文件中,extension_dir指示就是扩展路径。为什么要扩展PHP的设计理念,开源语言,方便各个社区自行开发丰富...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 398,299
精华内容 159,319
关键字:

php扩展

友情链接: androidCode.rar