-11.32php扩展模块安装-扩展-apacherewrite教程http://coffeelet.blog.163.com/blog/static/13515745320115842755199/http://www.cnblogs.com/top5/archive/2009/08/12/1544098.html-apacherewrite出现死循环http://ask.apelearn.com/question/1043-php错误日志级别参考http://ask.apelearn.com/question/6973-php开启短标签http://ask.apelearn.com/question/120-php.ini详解http://legolas.blog.51cto.com/2682485/493917#11.32PHP扩展模块安装-/usr/local/php/bin/php-m//查看模块-下面安装一个redis的模块-cd/usr/local/src/-wgethttps://codeload.github.com/phpredis/phpredis/zip/develop-mvdevelopphpredis-develop.zip-unzipphpredis-develop.zip-cdphpredis-develop-/usr/local/php/bin/phpize//生成configure文件-./configure--with-php-config=/usr/local/php/bin/php-config-make&&makeinstall-/usr/local/php/bin/php-i|grepextension_dir//查看扩展模块存放目录,我们可以在php.ini中去自定义该路径-vim/usr/local/php/etc/php.ini//增加一行配置(可以放到文件最后一行)extension=redis.so-```Lastlogin:FriOct1320:46:332017[root@localhost~]#cd/usr/local/src/[root@localhostsrc]#lsapr-1.6.2httpd-2.4.27php-5.6.30.tar.gzapr-1.6.2.tar.gzhttpd-2.4.27.tar.gzphp-7.1.6apr-util-1.6.0mysql-5.6.36-linux-glibc2.5-x86_64.tar.gzphp-7.1.6.tar.bz2apr-util-1.6.0.tar.gzphp-5.6.30[root@localhostsrc]#wgethttps://codeload.github.com/phpredis/phpredis/zip/develop--2017-10-1321:20:21--https://codeload.github.com/phpredis/phpredis/zip/develop正在解析主机codeload.github.com(codeload.github.com)...192.30.255.121,192.30.255.120正在连接codeload.github.com(codeload.github.com)|192.30.255.121|:443...已连接。已发出HTTP请求,正在等待回应...200OK长度:未指定[application/zip]正在保存至:“develop”[<=>]224,195116KB/s用时1.9s2017-10-1321:20:24(116KB/s)-“develop”已保存[224195][root@localhostsrc]#du-shdevelop220Kdevelop[root@localhostsrc]#mvdevelopphpredis-develop.zip[root@localhostsrc]#unzipphpredis-develop.zipinflating:phpredis-develop/tests/RedisTest.phpinflating:phpredis-develop/tests/TestRedis.phpinflating:phpredis-develop/tests/TestSuite.phpinflating:phpredis-develop/tests/make-cluster.shinflating:phpredis-develop/tests/mkring.sh[root@localhostsrc]#```-进入phpredis-develop目录下```[root@localhostsrc]#lsapr-1.6.2httpd-2.4.27.tar.gzphp-7.1.6.tar.bz2apr-1.6.2.tar.gzmysql-5.6.36-linux-glibc2.5-x86_64.tar.gzphpredis-developapr-util-1.6.0php-5.6.30phpredis-develop.zipapr-util-1.6.0.tar.gzphp-5.6.30.tar.gzhttpd-2.4.27php-7.1.6[root@localhostsrc]#cdphpredis-develop[root@localhostphpredis-develop]#lsarrays.markdownCREDITSphp_redis.hredis_commands.ccluster_library.cdebianREADME.markdownredis_commands.hcluster_library.hdebian.controlredis_array.credis_session.ccluster.markdownISSUE_TEMPLATE.mdredis_array.hredis_session.hcommon.hlibrary.credis_array_impl.crpmconfig.m4library.hredis_array_impl.hserialize.listconfig.w32mkdeb-apache2.shredis.ctestsCOPYINGmkdeb.shredis_cluster.ccrc16.hpackage.xmlredis_cluster.h[root@localhostphpredis-develop]#```-用php7/usr/local/php/bin/phpize//生成configure文件```[root@localhostphpredis-develop]#/usr/local/php/bin/phpizeConfiguringfor:PHPApiVersion:20131106ZendModuleApiNo:20131226ZendExtensionApiNo:220131226Cannotfindautoconf.Pleasecheckyourautoconfinstallationandthe$PHP_AUTOCONFenvironmentvariable.Then,rerunthisscript.[root@localhostphpredis-develop]#```-显示没有生成少一个包autoconf,再继续生成./configure,```[root@localhostphpredis-develop]#yuminstall-yautoconf已安装:autoconf.noarch0:2.69-11.el7作为依赖被安装:m4.x86_640:1.4.16-10.el7完毕![root@localhostphpredis-develop]#[root@localhostphpredis-develop]#/usr/local/php/bin/phpizeConfiguringfor:PHPApiVersion:20131106ZendModuleApiNo:20131226ZendExtensionApiNo:220131226[root@localhostphpredis-develop]#[root@localhostphpredis-develop]#lsacinclude.m4config.h.indebian.controlmkinstalldirsredis_cluster.haclocal.m4config.m4install-shpackage.xmlredis_commands.carrays.markdownconfig.subISSUE_TEMPLATE.mdphp_redis.hredis_commands.hautom4te.cacheconfigurelibrary.cREADME.markdownredis_session.cbuildconfigure.inlibrary.hredis_array.credis_session.hcluster_library.cconfig.w32ltmain.shredis_array.hrpmcluster_library.hCOPYINGMakefile.globalredis_array_impl.crun-tests.phpcluster.markdowncrc16.hmissingredis_array_impl.hserialize.listcommon.hCREDITSmkdeb-apache2.shredis.ctestsconfig.guessdebianmkdeb.shredis_cluster.c[root@localhostphpredis-develop]#```-./configure```[root@localhostphpredis-develop]#./configure--with-php-config=/usr/local/php7/bin/php-configcheckingforgrepthathandleslonglinesand-e.../usr/bin/grepcheckingforegrep.../usr/bin/grep-Echeckingforasedthatdoesnottruncateoutput.../usr/bin/sedcheckingforcc...cccheckingwhethertheCcompilerworks...yescheckingforCcompilerdefault```-makemakeinstall```[root@localhostphpredis-develop]#makeSeeanyoperatingsystemdocumentationaboutsharedlibrariesformoreinformation,suchastheld(1)andld.so(8)manualpages.----------------------------------------------------------------------Buildcomplete.Don‘tforgettorun‘maketest‘.[root@localhostphpredis-develop]#[root@localhostphpredis-develop]#makeinstallInstallingsharedextensions:/usr/local/php7/lib/php/extensions/no-debug-zts-20160303/[root@localhostphpredis-develop]#ls/usr/local/php7/lib/php/extensions/no-debug-zts-20160303/opcache.soredis.so[root@localhostphpredis-develop]#```-生成了一个redis.so这个文件就是我们要的扩展模块-现在php还不支持它,没有模块文件,现在还是不支持redis的```[root@localhostphpredis-develop]#/usr/local/php7/bin/php-m[PHPModules]bz2CorectypedatedomexiffileinfofiltergdhashiconvjsonlibxmlmbstringmcryptmysqliopensslpcrePDOpdo_mysqlpdo_sqlitePharposixReflectionsessionSimpleXMLsoapsocketsSPLsqlite3standardtokenizerxmlxmlreaderxmlwriterzlib[ZendModules][root@localhostphpredis-develop]#[root@localhostphpredis-develop]#/usr/local/php7/bin/php-m|grepredis[root@localhostphpredis-develop]#```-所以你需要把它配置一下,把它加载一下,需要去编辑配置文件-先找一下扩展模块所在的路径在哪里-/usr/local/php/bin/php-i|grepextension_dir//查看扩展模块存放目录,我们可以在php.ini中去自定义该路径```[root@localhostphpredis-develop]#/usr/local/php7/bin/php-i|grep-iextension_dirextension_dir=>/usr/local/php7/lib/php/extensions/no-debug-zts-20160303=>/usr/local/php7/lib/php/extensions/no-debug-zts-20160303sqlite3.extension_dir=>novalue=>novalue[root@localhostphpredis-develop]#```-实际上就是我们刚刚看的目录,这个extension_dir也可以定义的```[root@localhostphpredis-develop]#ls/usr/local/php7/lib/php/extensions/no-debug-zts-20160303opcache.soredis.so[root@localhostphpredis-develop]#```-之后需要编辑下vi/usr/local/php7/etc/php.ini,搜索extension,在后面加上extension=redis.so```[root@localhostphpredis-develop]#vi/usr/local/php7/etc/php.ini[PHP];;;;;;;;;;;;;;;;;;;;Aboutphp.ini;;extension=php_bz2.dll;extension=php_curl.dll;extension=php_fileinfo.dll;extension=php_ftp.dll;extension=php_gd2.dll;extension=php_gettext.dll;extension=php_gmp.dll;extension=php_intl.dll;extension=php_imap.dll;extension=php_interbase.dll;extension=php_ldap.dll;extension=php_mbstring.dll;extension=php_exif.dll;Mustbeaftermbstringasitdependsonit;extension=php_mysqli.dll;extension=php_oci8_12c.dll;UsewithOracleDatabase12cInstantClient;extension=php_openssl.dll;extension=php_pdo_firebird.dll;extension=php_pdo_mysql.dll;extension=php_pdo_oci.dll;extension=php_pdo_odbc.dll;extension=php_pdo_pgsql.dll;extension=php_pdo_sqlite.dll;extension=php_pgsql.dll;extension=php_shmop.dllextension=redis.so;TheMIBSdataavailableinthePHPdistributionmustbeinstalled.:wq```-dll后缀名结尾的,都是Windows使用的模块-添加好配置以后查询模块是否存在-已经加载了redis```[root@localhostphpredis-develop]#vi/usr/local/php7/etc/php.ini[root@localhostphpredis-develop]#/usr/local/php7/bin/php-m|grepredisredis[root@localhostphpredis-develop]#```-如果你想编译一个模块,而且他自带的源码包目录/usr/local/src/php-5.6.30/ext下有,那么只需要进行以下一些步骤,就可以完成扩展模块新增1、在你需要增加的拓展模块的目录下执行/usr/local/php/bin/phpize,生成一个configure文件2、执行./configure–with-php-config=/usr/local/php/bin/php-config配置php-config文件3、开始编译make4、编译后移动到目录makeinstall5、修改配置文件vim/usr/local/php/etc/php.ini,新增所需extension=xxxx.so拓展模块-这就是php的扩展模块安装-当然还要一种方法redis和是属于第三方的,它在php源码包里面本身是没有的```[root@localhostphpredis-develop]#cd[root@localhost~]#cd/usr/local/src/[root@localhostsrc]#cdphp-7.1.6[root@localhostphp-7.1.6]#lsacinclude.m4LICENSEREADME.namespacesaclocal.m4ltmain.shREADME.NEW-OUTPUT-APIappveyormainREADME.PARAMETER_PARSING_APIbuildmakedistREADME.REDIST.BINSbuildconfMakefileREADME.RELEASE_PROCESSbuildconf.batMakefile.fragREADME.SELF-CONTAINED-EXTENSIONSCODING_STANDARDSMakefile.fragmentsREADME.STREAMSconfig.guessMakefile.gcovREADME.SUBMITTING_PATCHconfig.logMakefile.globalREADME.TESTINGconfig.niceMakefile.objectsREADME.TESTING2config.statusmakerpmREADME.UNIX-BUILD-SYSTEMconfig.submeta_ccldREADME.WIN32-BUILD-SYSTEMconfiguremissingrun-tests.phpconfigure.inmkinstalldirssapiCONTRIBUTING.mdmodulesscriptsCREDITSnetwareserver-tests-config.phpextNEWSserver-tests.phpEXTENSIONSpearsnapshotfooterphp7.specstamp-h.ingenerated_listsphp7.spec.instub.cgenfilesphp.giftestsheaderphp.ini-developmenttravisincludephp.ini-productionTSRMINSTALLREADME.EXT_SKELUPGRADINGinstall-shREADME.GIT-RULESUPGRADING.INTERNALSlibphp7.laREADME.input_filtervcscleanlibsREADME.MAILINGLIST_RULESwin32libtoolREADME.mdZend[root@localhostphp-7.1.6]#```-实际上在php源码包里面有个ext的目录,这个下面有很多的这种所谓的模块```[root@localhostphp-7.1.6]#cdext/[root@localhostext]#lsbcmathext_skelinterbaseopcachepdo_sqliteskeletontokenizerbz2ext_skel_win32.phpintlopensslpgsqlsnmpwddxcalendarfileinfojsonpcntlpharsoapxmlcom_dotnetfilterldappcreposixsocketsxmlreaderctypeftplibxmlpdopspellsplxmlrpccurlgdmbstringpdo_dblibreadlinesqlite3xmlwriterdategettextmcryptpdo_firebirdrecodestandardxsldbagmpmysqlipdo_mysqlreflectionsysvmsgzipdomhashmysqlndpdo_ocisessionsysvsemzlibenchanticonvoci8pdo_odbcshmopsysvshmexifimapodbcpdo_pgsqlsimplexmltidy[root@localhostext]#[root@localhostext]#/usr/local/php7/bin/php-m|grepzip[root@localhostext]#```-比如说现在没有zip,假如说没有zip-那我现在需要编译一个zip,先进入到zip目录下来,然后直接执行/usr/local/php7/bin/phpize```[root@localhostext]#/usr/local/php7/bin/php-m|grepzip[root@localhostext]#cdzip/[root@localhostzip]#lsconfig.m4CREDITSlibphp_zip.ctestszip_stream.cconfig.w32examplesLICENSE_libzipphp_zip.hTODO[root@localhostzip]#/usr/local/php7/bin/phpizeConfiguringfor:PHPApiVersion:20160303ZendModuleApiNo:20160303ZendExtensionApiNo:320160303[root@localhostzip]#```-也就是说你想编译一个扩展模块的时候,如果它自带的源码包里面ext目录下有这个目录,那你就可以直接在这去编译它不用去下载了-/usr/local/php7/bin/phpize完成之后呢,./configure```[root@localhostzip]#./configure--with-php-config=/usr/local/php7/bin/php-configcreatinglibtoolappendingconfigurationtag"CXX"tolibtoolconfigure:creating./config.statusconfig.status:creatingconfig.h[root@localhostzip]#```-make,makeinstall```[root@localhostzip]#makeBuildcomplete.Don‘tforgettorun‘maketest‘.[root@localhostzip]#makeinstallInstallingsharedextensions:/usr/local/php7/lib/php/extensions/no-debug-zts-20160303/[root@localhostzip]#[root@localhostzip]#ls/usr/local/php7/lib/php/extensions/no-debug-zts-20160303/opcache.soredis.sozip.so[root@localhostzip]#```-里面多了一个zip.so,这个就是怎么去添加一个扩展模块###扩展-1.apacherewrite教程http://coffeelet.blog.163.com/blog/static/13515745320115842755199/http://www.cnblogs.com/top5/archive/2009/08/12/1544098.html-2.apacherewrite出现死循环http://ask.apelearn.com/question/1043我的一条规则RewriteRule^(.*)/111/$1[R,L]使用curl测试,没有问题,但是使用浏览器访问时,出现了无限循环。本来访问的是www.111.com结果变成了www.111.com/111/111/111/.....虽然在最后加了[L]依然不管用,可能apache还是不够智能,一直满足条件就一直去匹配,一直去跳转。最后没招了只能再加一个条件。RewriteCond%{REQUEST_URI}!^/111RewriteRule^(.*)/111/$1[R,L]这样就不再循环了。-3.php错误日志级别参考http://ask.apelearn.com/question/6973php的错误日志级别error_report;E_ALL所有错误和警告(除E_STRICT外);E_ERROR致命的错误。脚本的执行被暂停。;E_RECOVERABLE_ERROR大多数的致命错误。;E_WARNING非致命的运行时错误,只是警告,脚本的执行不会停止。;E_PARSE编译时解析错误,解析错误应该只由分析器生成。;E_NOTICE脚本运行时产生的提醒(往往是我们写的脚本里面的一些bug,比如某个变量没有定义),这个错误不会导致任务中断。;E_STRICT脚本运行时产生的提醒信息,会包含一些php抛出的让我们要如何修改的建议信息。;E_CORE_ERROR在php启动后发生的致命性错误;E_CORE_WARNING在php启动后发生的非致命性错误,也就是警告信息;E_COMPILE_ERRORphp编译时产生的致命性错误;E_COMPILE_WARNINGphp编译时产生的警告信息;E_USER_ERROR用户生成的错误;E_USER_WARNING用户生成的警告;E_USER_NOTICE用户生成的提醒&表示并且~表示非|表示或者比如:error_reporting=E_ALL&~E_NOTICE表示错误级别为E_ALL并且除了E_NOTICE-4.php开启短标签http://ask.apelearn.com/question/120控制参数:short_open_tag=On如果设置为Off,则不能正常解析类似于这样形式的php文件:<?phpinfo()?>而只能解析<?phpphpinfo()?>这样形式的php文件所以要想php支持短标签,需要我们把short_open_tag设置为On.-5.php.ini详解http://legolas.blog.51cto.com/2682485/493917
11.32 php扩展模块安装
原文地址:http://ch71smas.blog.51cto.com/13090095/1972261