编译php-5.3.3时遇到的错误

configure: error: xml2-config not found. Please check your libxml2 installation.

[root@oracle Server]# yum install -y libxml2-devel

 configure: error: Cannot find OpenSSL’s <evp.h>
[root@oracle Server]# yum install -y openssl-devel

configure: error: Please reinstall the BZip2 distribution

[root@oracle Server]# yum install -y bzip2-devel

configure: error: Please reinstall the libcurl distribution –
    easy.h should be in <curl-dir>/include/curl/

[root@oracle Server]# yum -y install curl-devel

If configure fails try –with-jpeg-dir=<DIR>
configure: error: libpng.(a|so) not found.

[root@oracle Server]# yum install -y libpng-devel

如果安装了libpng及libpng-devel还报错,就需要将/usr/lib64/libpng.so复制到/usr/lib下,再次编译。

make: *** [libphp5.la] 错误 1
[root@oracle php-5.3.3]# yum install -y libtool-ltdl-devel

源码编译好痛苦···

PS:

apxs: /usr/sbin/apxs
比如说在编译安装配置httpd的时候,说需要apache下的apxs这个命令,那么很有可能就是跟httpd跟随的一个开发包,就是httpd-devel
再比如在编译内核的时候会需要ncurses-devel这个开发包,安装某些驱动软件的时候还需要kernel-devel开发包。

查看apache已加载模块

[root@oracle bin]# ./httpd -M

Loaded Modules:
 core_module (static)
 authn_file_module (static)
 authn_default_module (static)
 authz_host_module (static)
 authz_groupfile_module (static)
 authz_user_module (static)
 authz_default_module (static)
 auth_basic_module (static)
 include_module (static)
 filter_module (static)
 log_config_module (static)
 env_module (static)
 setenvif_module (static)
 version_module (static)
 mpm_prefork_module (static)
 http_module (static)
 mime_module (static)
 status_module (static)
 autoindex_module (static)
 asis_module (static)
 cgi_module (static)
 negotiation_module (static)
 dir_module (static)
 actions_module (static)
 userdir_module (static)
 alias_module (static)
 so_module (static)
 deflate_module (shared)
 expires_module (shared)
 headers_module (shared)
 rewrite_module (shared)
 php5_module (shared)
 jk_module (shared)
Syntax OK
[root@oracle bin]#

模块资料:

LoadModule auth_basic_module modules/mod_auth_basic.so            #基本认证模块
LoadModule auth_digest_module modules/mod_auth_digest.so        #使用MD5的用户验证模块
LoadModule authn_file_module modules/mod_authn_file.so            #使用文本文件的用户验证
LoadModule authn_alias_module modules/mod_authn_alias.so        #在原有的验证方法上提供拓展的验证
LoadModule authn_anon_module modules/mod_authn_anon.so            #允许匿名访问已验证的区域
LoadModule authn_dbm_module modules/mod_authn_dbm.so            #使用数据库文件验证
LoadModule authn_default_module modules/mod_authn_default.so        #认证的撤销模块
LoadModule authz_host_module modules/mod_authz_host.so            #基于主机名(或IP)的组授权
LoadModule authz_user_module modules/mod_authz_user.so            #用户授权
LoadModule authz_owner_module modules/mod_authz_owner.so        #依照文件拥有者的授权
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so    #使用明文文件的组授权
LoadModule authz_dbm_module modules/mod_authz_dbm.so            #使用数据库的组授权
LoadModule authz_default_module modules/mod_authz_default.so        #授权的撤销模块
LoadModule ldap_module modules/mod_ldap.so                #LDAP提供其它LADP的连接接和缓存服务模块
LoadModule authnz_ldap_module modules/mod_authnz_ldap.so        #允许使用一个LDAP的目录来存放HTTP基本授权文件
LoadModule include_module modules/mod_include.so            #服务器端解析HTML语法的模块
LoadModule log_config_module modules/mod_log_config.so            #记录服务器请求日志
LoadModule logio_module modules/mod_logio.so                #记录每个请求的I/O字节数
LoadModule env_module modules/mod_env.so                #设置传递给CGI脚本和SSI页面的环境?
LoadModule ext_filter_module modules/mod_ext_filter.so            #在递交给客户端以前通过外部程序发送相应本体
LoadModule mime_magic_module modules/mod_mime_magic.so            #通过查看一个文件的一些内容判断MIME类别        
LoadModule expires_module modules/mod_expires.so            #根据用户的特别设定来生成失效和隐藏控制的http头信息
LoadModule deflate_module modules/mod_deflate.so            #传送给客户端以前压缩数据
LoadModule headers_module modules/mod_headers.so            #定制响应和回复的HTTP头的内容    
LoadModule usertrack_module modules/mod_usertrack.so            #在一个站点上跟踪用户的登录信息
LoadModule setenvif_module modules/mod_setenvif.so            #允许经过客户编码请求来设定环境变量    
LoadModule mime_module modules/mod_mime.so                #通过文件的一些属性判读MIME类型
LoadModule dav_module modules/mod_dav.so                #基于WEB的创作和版本?
LoadModule status_module modules/mod_status.so                #提供服务器运行信息
LoadModule autoindex_module modules/mod_autoindex.so            #自动列出一个目录的索引表(类似于UNIX上的ls和DOS下的dir)
LoadModule info_module modules/mod_info.so                #提供服务配置的一个综合概况
LoadModule dav_fs_module modules/mod_dav_fs.so                #为mod_dav提供文件系统支持
LoadModule vhost_alias_module modules/mod_vhost_alias.so        #为虚拟主机提供动态配置
LoadModule negotiation_module modules/mod_negotiation.so        #为内容判断提供支持
LoadModule dir_module modules/mod_dir.so                #为“/”结尾的重定向和目录文件索引
LoadModule actions_module modules/mod_actions.so            #提供了基于请求和媒体类型的CGI脚本执行的支持
LoadModule speling_module modules/mod_speling.so            #尝试纠正用户输入错误的网址
LoadModule userdir_module modules/mod_userdir.so            #用户特定目录
LoadModule alias_module modules/mod_alias.so                #提供主机文件系统不同部分的文件树映射为URL
LoadModule rewrite_module modules/mod_rewrite.so            #提供在运行中基于规则的地址重写的支持
LoadModule proxy_module modules/mod_proxy.so                #基于HTTP1.1协议的网关或代理服务器
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so        #负载均衡的mod_proxy拓展
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so            #为mod_proxy提供的ftp支持模块
LoadModule proxy_http_module modules/mod_proxy_http.so            #为mod_proxy提供的http支持模块
LoadModule proxy_connect_module modules/mod_proxy_connect.so        #mod_proxy的连接处理拓展模块
LoadModule cache_module modules/mod_cache.so                #目录隐藏在URL外?
LoadModule suexec_module modules/mod_suexec.so                #允许CGI脚本使用特定的用户和组运行
LoadModule disk_cache_module modules/mod_disk_cache.so            #管理内容隐藏存放来适合URL的工具?
LoadModule file_cache_module modules/mod_file_cache.so            #在内存中缓存一个文件列表
LoadModule mem_cache_module modules/mod_mem_cache.so            #隐藏内容于URL
LoadModule cgi_module modules/mod_cgi.so                #执行CGI脚本

禁止apache列出目录内容

        如果网站根目录下有一个test的文件夹,里面有网页页面,如果test文件夹下没有系统定义的默认页面,当用户访问网站test目录的话,Apache会把test文件夹里的内容全列出来。这样是不安全的。

要禁止此功能,修改httpd.conf,找到下面这一句删除掉Indexes即可。

Options Indexes FollowSymLinks

配置示例:

<Directory “/usr/local/apache/htdocs”>
    #
    # Possible values for the Options directive are “None”, “All”,
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that “MultiViews” must be named *explicitly* — “Options All”
    # doesn’t give it to you.
    #
    # The Options directive is both complicated and important.  Please see
    # http://httpd.apache.org/docs/2.2/mod/core.html#options
    # for more information.
    #
    #Options Indexes FollowSymLinks

      Options FollowSymLinks

    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be “All”, “None”, or any combination of the keywords:
    #   Options FileInfo AuthConfig Limit
    #
    AllowOverride All

    #
    # Controls who can get stuff from this server.
    #
    Order allow,deny
    Allow from all

</Directory>

缺少 mysqli 扩展。请检查 PHP 配置(redhat安装mysqli模块)

phpmyadmin登录时提示错误:缺少 mysqli 扩展。请检查 PHP 配置

需要在php源码中编译出模块然后加载

先介绍点知识:
phpize是什么?php官方说明:
http://php.net/manual/en/install.pecl.phpize.php
phpize是用来扩展php扩展模块的,通过phpize可以建立php的外挂模块。
比如你想在原来编译好的php中加入json或者mysqli等扩展模块,可以使用phpize实现。
当php编译完成后,php的bin目录下会有phpize程序。进入php源码ext下的相关扩展目录,在编译要添加的模块之前,执行phpize就可以生成configure文件。
如果你是rpm包安装php的话,就安装php-devel这个包,就会有phpize命令了。

开始之前,需要进入php源码安装包中,防止出错,php的版本跟运行的版本一定要一致。

这里系统版本为64位。

[root@oracle mysqli]# /usr/local/php/bin/phpize
Configuring for:
PHP Api Version:         20090626
Zend Module Api No:      20090626
Zend Extension Api No:   220090626
Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.

[root@oracle Server]# yum install -y autoconf   //我没安装自动配置程序包

root@oracle mysqli]# ./configure --with-php-config=/usr/local/php/bin/php-config

报错:
checking whether to enable embedded MySQLi support… no
mysql_config not found
configure: error: Please reinstall the mysql distribution
没找到mysql_config,手动指定路径再编译


[root@oracle mysqli]#./configure --with-php-config=/usr/local/php/bin/php-config --with-mysqli=/usr/local/mysql/bin/mysql_config

OK,没问题
[root@oracle mysqli]# make
[root@oracle mysqli]# make install
Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/

拷贝/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/下的mysqli.so模块至/usr/lib64/php/modules下。
编辑php.ini添加一行:
extension_dir=/usr/lib64/php/modules/       //定义模块路径
extension=mysqli.so //载入mysqli.so模块
重启apache生效。

PS:
刚才重启apache,在phpinfo中始终看不到mysqli部分,一直以为是没有正确加载,检查php.ini也没问题,路径都没问题,权限也没问题,最后在phpinfo中看到

Loaded Configuration File 后面参数为(none)
把/usr/local/php/etc/php.ini拷贝一份到/etc下,重启apache解决了。(之前没有将php.ini复制到/etc下)