文档章节

PHP-redis编译成功

dingdayu
 dingdayu
发布于 2015/10/18 02:54
字数 1692
阅读 338
收藏 4

下面是在看《Sams.Extending.and.Embedding.PHP》的第4章 编译PHP的一些实践记录,相应中文版 地址http://www.walu.cc/phpbook/4.1.md,书上关于windows部分的资料和命令是05年的,已经很老了下面找到PHP官方关于php在windows下编译的说明进行操作和记录。php官方windows编译说明:https://wiki.php.net/internals/windows/stepbystepbuild

下面没有按照官方的要求安装windows sdk6.1,而是安装的VS2008,启动Visual Studio命令提示(2010)后无法执行下面的语句,

  1. PHP 5.2, 5.3 and 5.4:

    setenv /x86 /xp /release
  2. PHP 5.5+:

    setenv /x86 /2008 /release

提示“setenv”命令不存在,直接放弃这个操作,执行如下操作设置windows的编译环境,

  1. bin\phpsdk_setvars.bat
  2. 以下命令仅仅在第一次建立目录树阶段使用
    bin\phpsdk_buildtree.bat php53dev


然后将php-5.3.17放到相对的php53dev\vc9\x86\php5.3-xyz路径,如果需要使用第三方库(第三方库包含大多数php扩展使用的依赖库文件),可以从http://wiki.php.net/internals/windows/libs这里的地址找到下载,然后放到D:\phpDev\php53dev\vc9\x86下的“deps”目录里面。进入源码目录,执行buildconf命令建立configure文件,就可以开始类似linux下的编译工作了。


cd  d:\phpDev>cd php53dev\vc9\x86\php-5.3.17

使用如下编译参数将只会编译--enable-$remains部分的扩展,其他都会被禁止掉

configure --disable-all --enable-cli --enable-$remains

注:配置中的--enable-memcache=shared意思是 memcache 以 dll 形式生成,否则就和php集成在一起了。

然后执行

nmake

如果一切顺利,现在就可以在D:\phpDev\php53dev\vc9\x86\php-5.3.17\Release_TS下面找到编译的文件了。

如果需要增加扩展重新编译,需要下载http://windows.php.net/downloads/php-sdk/目录下的对应deps-5.3-vc9-x86.7z,并按照目录格式要求放到D:\phpDev\php53dev\vc9\x86目录下

带上enable-debug 会导致编译的结果在Debug_TS下面,同时编译的文件可以通过VC来调试,编译为独立的dll文件需要给每个扩展添加shared参数

下面是修改版的PHP官方windows下的编译参数,可以编译出大多数的dll并且直接打包成zip文件。

configure --enable-cli  --enable-snapshot-build   --enable-debug-pack --without-mssql  --without-pdo-mssql  --without-pi3web  --enable-object-out-dir=../obj/ --enable-com-dotnet=shared --with-mcrypt=static  --disable-static-analyze

然后是nmake clean , nmake 就OK了,编译后的生成文件都在上级目录的obj目录下。

下面是对部分configure参数的说明:

--enable-snapshot-build       Build a snapshot; turns on everything i and ignores build errors

建立快照版本,打开所有编译项同时忽略编译错误

--enable-one-shot             Optimize for fast build - best for rele  snapshot builders, not so hot for

                              edit-and-rebuild hacking

--with-cygwin                 Path to cygwin utilities on your system

使用cygwin系统工具

--enable-object-out-dir       Alternate location for binary objects during build

二进制对象在编译后的目录

--enable-debug                Compile with debugging symbols

编译时带调试信息

--enable-debug-pack           Release binaries with external debug symbols

                              (--enable-debug must not be specified)

--disable-zts                 Thread safety

--with-prefix                 where PHP will be installed

--with-mp                     Tell VC9+ use up to [n,auto,disable] processes

                              for compilation

是否使用多处理器编译

--with-php-build              Path to where you extracted the development libraries

                              (http://wiki.php.net/internals/windows/   Assumes that it is a sibling of this so

                              dir (..\deps) if not specified

指定在windows下编译php需要的开发库

--with-extra-includes         Extra include path to use when building  everything

编译php时使用的其他包含路径

--with-extra-libs             Extra library path to use when linking  everything

链接时使用的其他包含库路径

--disable-ipv6                Disable IPv6 support (default is turn it on if available)

--enable-fd-setsize           Set maximum number of sockets for selected(2)

为selected设置最大数量的socket数量

--enable-zend-multibyte       Enable Zend multibyte encoding support

François Laupretre came next, with a fix forhref="http://bugs.php.net/42396">bug #42396 in PHP 5. He wrote that the configuration option --enable-zend-multibyte leads to
auto-detection of Unicode encoded scripts. This is fine until a script
contains null bytes following a call to __HALT_COMPILER(), when
execution results in ‘a lot of ‘?’ garbage‘. Effectively, this renders
anything using __HALT_COMPILER() (read: PHK or phar) incompatible
with --enable-zend-multibyte, with the only workaround being the
unacceptable one of turning off the detect_unicode flag.
François’ patch offered ‘a small detection loop‘ to check for a
sequence of four 0xff bytes; if found, Unicode detection is
switched off and the script considered non-Unicode. His idea was that
deliberately setting the switch would make generated archives compatible with
the configuration option.

 

--with-snapshot-template      Path to snapshot builder template dir

--enable-security-flags       Enable the compiler security flags

--enable-static-analyze       Enable the VC compiler static analyze

intel static analyze中使用static analyze 检查安全漏洞

http://software.intel.com/sites/products/documentation/doclib/stdxe/2013/composerxe/compiler/cpp-lin/GUID-9B795CE3-8341-47C1-83A9-614AB60110B3.htm

--with-aolserver              Build AOLserver support

--enable-apache               Build Apache 1.3.x version of PHP

--with-apache-includes        Where to find Apache 1.3 headers

--with-apache-libs            Where to find Apache 1.3 libraries

--enable-apache2filter        Build Apache 2.x filter

--enable-apache2-2filter      Build Apache 2.2.x filter

--enable-apache2handler       Build Apache 2.x handler

--enable-apache2-2handler     Build Apache 2.2.x handler

--with-apache-hooks           Build Apache 1.3.x (hooks) version of PHP

--disable-cgi                 Build CGI version of PHP

--disable-cli                 Build CLI version of PHP

--enable-crt-debug            Enable CRT memory dumps for debugging send to STDERR

检测内存泄漏的主要工具是调试器和 C 运行时库 (CRT) 调试堆函数。若要启用调试堆函数,请在程序中包括以下语句:

#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>

http://msdn.microsoft.com/zh-cn/library/e5ewb1h3(v=vs.80).aspx

--enable-cli-win32            Build console-less CLI version of PHP

--enable-embed                Embedded SAPI library

--enable-isapi                Build ISAPI version of PHP

--enable-nsapi                Build NSAPI for Netscape/iPlanet/SunONE

                              webservers

--with-nsapi-includes         Where to find NSAPI headers

--with-nsapi-libs             Where to find NSAPI libraries

--with-pi3web                 Pi3Web

--disable-bcmath              bc style precision math functions

--with-bz2                    BZip2

--disable-calendar            calendar conversion support

--disable-com-dotnet          COM and .Net support

--disable-ctype               ctype

--with-curl                   cURL support

--with-dba                    DBA support

Database (dbm-style) Abstraction Layer

 

--with-enchant                Enchant Support

Enchant spelling library

--without-ereg                POSIX extended regular expressions

--enable-fileinfo             fileinfo support

--disable-filter              Filter Support

是否使用flter扩展来处理安全过滤问题

http://blog.php-security.org/archives/64-Why-extfilter.html

--disable-ftp                 ftp support

--without-gd                  Bundled GD support

--without-t1lib               t1lib support

--with-gettext                gettext support

--with-gmp                    Include GNU MP support.

--disable-hash                enable hash support

--with-mhash                  mhash support

--without-iconv               iconv support

--with-imap                   IMAP Support

--with-interbase              InterBase support

--enable-intl                 Enable internationalization support

使用ICU库提供软件 Unicode 和 Globalization支持,http://site.icu-project.org/

--disable-json                JavaScript Object Serialization support

--with-ldap                   LDAP support

--enable-mbstring             multibyte string functions

--enable-mbregex              multibyte regex support

--disable-mbregex-backtrack   check multibyte regex backtrack

--with-mcrypt                 mcrypt support

--with-mssql                  mssql support

--with-dblib                  mssql support with freetds

--without-mysqlnd             Mysql Native Client Driver

--with-oci8                   OCI8 support

--with-oci8-11g               OCI8 support using Oracle 11g Instant C

--disable-odbc                ODBC support

--with-openssl                OpenSSL support

--with-pgsql                  PostgreSQL support

--with-pspell                 pspell/aspell (whatever it's called thi

                              month) support

--disable-session             session support

--enable-shmop                shmop support

--with-snmp                   SNMP support

--enable-sockets              SOCKETS support

--with-sqlite3                SQLite 3 support

--with-config-file-scan-dir   Dir to check for additional php ini fil

--with-sybase-ct              SYBASE_CT support

--with-tidy                   TIDY support

--disable-tokenizer           tokenizer support

--disable-zip                 ZIP support

--disable-zlib                ZLIB support

--without-libxml              LibXML support

--without-dom                 DOM support

--enable-exif                 exif

--with-mysql                  MySQL support

--with-mysqli                 MySQLi support

--enable-pdo                  Enable PHP Data Objects support

--with-pdo-dblib              freetds dblib (Sybase, MS-SQL) support

--with-pdo-mssql              Native MS-SQL support for PDO

--with-pdo-firebird           Firebird support for PDO

--with-pdo-mysql              MySQL support for PDO

--with-pdo-oci                Oracle OCI support for PDO

--with-pdo-odbc               ODBC support for PDO

--with-pdo-pgsql              PostgreSQL support for PDO

--with-pdo-sqlite             for pdo_sqlite support

--with-pdo-sqlite-external    for pdo_sqlite support from an external

--disable-phar                disable phar support

--enable-phar-native-ssl      enable phar with native OpenSSL support

--without-simplexml           Simple XML support

--enable-soap                 SOAP support

--with-sqlite                 SQLite support

--without-wddx                WDDX support

--without-xml                 XML support

--disable-xmlreader           XMLReader support

--with-xmlrpc                 XMLRPC-EPI support

--disable-xmlwriter           XMLWriter support

--with-xsl                    xsl support

--enable-com-dotnet=shared   windows 特有扩展支持,可以使用com和.net库

http://www.php.net/manual/en/refs.utilspec.windows.php

编译问题:

d:\phpdev\php53dev\vc9\x86\php-5.3.17\ext\calendar\jewish.c(324) : error C2001:
常量中有换行符

多行上面的错误,发现php bugs上面已经有提交了,也有人说通过editplus来处理字符集问题也不行,后来通过将linux下的UTF-8编码的内容复制过来就可以了,不过文件还是要转换为UTF-8来处理

本文转载自:http://blog.csdn.net/jfcat/article/details/8937138

dingdayu

dingdayu

粉丝 35
博文 120
码字总数 60172
作品 3
海淀
后端工程师
私信 提问
安装redis和php-redis扩展的那点事

是在centos7环境下进行安装,由于yum中没有redis的rpm包直接下载,需要编译,首先通过yum安装gcc make,以下是安装redis的步骤: 1、安装gcc make: yum install gcc make -y 2、下载redis,...

RitaChen
2016/11/15
227
0
CentOS下安装Redis及Redis的PHP扩展

1、安装Redis 1.1 如果没有安装wget,安装wget yum install wget 1.2 在http://redis.io/download页面查看redis版本,并下载安装 wget http://download.redis.io/releases/redis-3.2.0.tar.g......

stone_ryan
2018/06/26
0
0
PHP 安装 phpredis 扩展(二)

本文主要介绍为 PHP 安装 扩展,并用 PHP 代码连接 Redis 服务器。 一、安装 phpredis 扩展 1. Linux、macOS 下安装 下载、解压、安装、编译: 编译成功后会提示一个路径,表示已经将扩展放置...

天秤vs永恒
2016/11/26
96
0
centos 安装 redis php-redis扩展的方法及问题解决

redis简介 redis是一款很不错的高性能的key-value数据库,它的出现在很大程度上弥补了很多像memcached这类的keyvalue存储的不足,它的特点有:支持持久化、半持久化数据保存、支持主从同步、...

xiaogg
2018/10/19
22
0
redis安装及在php上的扩展

第一步redis安装: 1、首先确认下载包为64位的还是32位的 2、下载http://code.google.com/p/servicestack/downloads 3、解压下载包得到以下文件: cygwin1.dll redis-benchmark.exe //性能测...

小小邱
2013/12/31
7.7K
0

没有更多内容

加载失败,请刷新页面

加载更多

Go 每日一库之 viper

简介 上一篇文章介绍 cobra 的时候提到了 viper,今天我们就来介绍一下这个库。 viper 是一个配置解决方案,拥有丰富的特性: 支持 JSON/TOML/YAML/HCL/envfile/Java properties 等多种格式的...

darjunlee
33分钟前
44
0
Raspberry Pi 树莓派 搭建java8环境

更新软件源 apt-get upgradeapt-get update 移除自带的openjdk(如果有的话) apt-get remove openjdk* 安装oracle jdk,地址: https://www.oracle.com/technetwork/java/javase/downl......

ChangeZ
今天
139
0
树莓派3b 安装openwrt

https://downloads.openwrt.org/releases/19.07.0/targets/brcm2708/bcm2710/openwrt-19.07.0-brcm2708-bcm2710-rpi-3-squashfs-factory.img.gz 插入并启动树莓派3B+,顺便接上键盘和显示器,......

FalconChen
今天
191
0
OSChina 周一乱弹 —— 有些运动也常用到膝盖

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @薛定谔的兄弟 :分享洛神有语创建的歌单「我喜欢的音乐」: 《火宵の月・テーマ~ピアノソロ》- 中村由利子 手机党少年们想听歌,请使劲儿戳(...

小小编辑
今天
2.5K
11
Redis持久化机制

RDB存储 RDB方式的持久化是通过快照完成的,当符合一定条件时Redis会自动将内存中的所有数据生成一份副本并存储在硬盘上。 Redis会在一下集中情况下对数据进行快照: 根据配置规则进行快照;...

XuePeng77
今天
219
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部