编译PHP5.3.24遇到:checking for mysql_close in -lmysqlclient_r… no

 更新时间:2016年11月25日 15:27  点击:1973
在自己编辑安装php时提示 checking for mysql_close in -lmysqlclient_r… no ,看这句我看是什么mysql问题,但结果是不是它的问题呢,下面我们一起来看看。

又在折腾服务器了~记录下自己编译php5.3.24的过程。执行了以下的 configure配置命令:

 

 代码如下 复制代码

    ./configure
    --prefix=/usr/local/php
    --with-config-file-path=/usr/local/php/etc
    --with-config-file-scan-dir=/usr/local/php/etc/conf.d
    --enable-fpm
    --with-fpm-user=webserver
    --with-fpm-group=webserver
    --with-curl
    --with-pear
    --with-gd
    --with-jpeg-dir
    --with-png-dir
    --with-zlib
    --with-xpm-dir
    --with-freetype-dir
    --with-mcrypt
    --with-mhash
    --with-mysql=/usr/local/mysql
    --with-mysqli=/usr/local/mysql
    --with-pdo-mysql=/usr/local/mysql
    --with-openssl
    --with-xmlrpc
    --with-xsl
    --with-bz2
    --with-gettext
    --disable-debug
    --enable-fpm
    --enable-exif
    --enable-wddx
    --enable-zip
    --enable-bcmath
    --enable-calendar
    --enable-ftp
    --enable-mbstring
    --enable-soap
    --enable-sockets
    --enable-sqlite-utf8
    --enable-shmop
    --enable-dba
    --enable-sysvsem
    --enable-sysvshm
    --enable-sysvmsg

遇到了如下错误:

    checking for mysql_close in -lmysqlclient_r... no
    checking for mysql_error in -lmysqlclient_r... no
    configure: error: mysql configure failed. Please check config.log for more information.

查证、搜索后,找到一blog,讲是这样的原因:

    See this bug report: http://www.111cn.net
    If you need libmysql, apply the patch or create the symlink.
    Better: Switch to mysqlnd

我也就把对于mysql, mysqli, pdo的配置选项改成了:

 代码如下 复制代码

    --with-mysql=mysqlnd
    --with-mysqli=mysqlnd
    --with-pdo-mysql=mysqlnd

编译通过~

为什么不用zend debugger,反而舍本求末用个偏方呢?因zend debugger目前最高只支持到php-5.3.x,php-5.4.x和php-5.5.x搞不定,所以需要xdebug,它就一备胎。

1、下载安装xdebug
1.1 到http://xdebug.org/download.php 下载适合你的PHP版本的xdebug
1.2 复制到php安装目录的ext文件夹,改名为php_xdebug.dll
1.3 配置xdebug

在php.ini尾部添加如下

[xdebug]

zend_extension="php_xdebug.dll"

xdebug.remote_enable         = On
xdebug.remote_host           = "localhost"
xdebug.remote_port           = 9000
xdebug.remote_handler        = "dbgp"
xdebug.auto_trace            = 1
xdebug.collect_includes      = 1
xdebug.collect_params        = 1
xdebug.collect_return        = 1
xdebug.default_enable        = 1
xdebug.collect_assignments   = 1
xdebug.collect_vars          = 1
xdebug.remote_autostart      = 1
xdebug.remote_connect_back   = 1
xdebug.show_local_vars       = 1
xdebug.show_exception_trace  = 0
运行phpinfo();看有xdebug模块信息出来就是搞定了。

2、配置Zend Studio 支持xdebug
这里的配置很重要
选择Zend Studio 的 Window 》 Preference 》 PHP 》Installed Debuggers 双击 Xdebug,弹出对话框如下图

Debug Port 设为跟php.ini中设置的一样(默认是9000)。
Accept remote session(JIT) 选择localhost
允许浏览器访问网站时zend studio自动打开文件开始调试。

选项说明: http://www.111cn.net
off: 关闭浏览器访问时打开调试功能;
localhost: 通过localhost访问网页的时候打开调试。
any:只要访问服务器上的php都打开调试;
prompt:访问服务器上的php时弹出询问是否要调试。

一旦打开zend studio允许xebug调试,所有访问php页面都会进入调试。
我们可以使用easy xdebug火狐插件可在客户端控制是否开启调试。
1、首先php.ini设置
xdebug.remote_autostart = 0
不自动启动调试。
2、安装火狐插件easy xdebug,
安装好该插件后,点击如下图右下角小绿虫后,虫子上面有个小红点,这时候我们访问测试服务器的时候,Zend Studio就回自动弹出调试。

另外,可设置使用xdebug,在zend studio中对直接调试php文档,这里就不多说了。

Views – 61

 

昨天帮一朋友配置服务器结果发现apache日志中有PHP Warning: PHP Startup: Unable to load dynamic library 提示了,然后调试数据库连接发现提示Call to undefined function mysql_connect()错误,这样就想到了是mysql没有加载成功了,下面我们一起来看看问题解决办法。


连接代码

<?php
echo 'a';
$cn = mysql_connect("localhost",'你的mysql用户名','你的mysql用户密码') or die(mysql_error());
if( $cn )
{
  echo phpinfo();
}
else
{
 echo 'mysql connect fail';
}
?>

因为服务器使用的是安全php.ini所在没有错误显示,于时相看了apache安装目录的logs的errors.log日志文

件发现如下错误

PHP Warning:  PHP Startup: Unable to load dynamic library

'D:\myserver\php\ext\php_mysql.dll' - xd5xd2xb2xbbxb5xbdxd6xb8xb6xa8xb5xc4xc4

xa3xbfxe9xa1xa3rn in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library

'D:\myserver\php\ext\php_mysqli.dll' - xd5xd2xb2xbbxb5xbdxd6xb8xb6xa8xb5xc4

xc4xa3xbfxe9xa1xa3rn in Unknown on line 0

 

[Tue Dec 31 09:05:15 2013] [error] [client 127.0.0.1] PHP Fatal error:  Call to undefined

function mysql_connect() in E:\www\a.php on line 2, referer: http://localhost/
[Tue Dec 31 09:05:16 2013] [error] [client 127.0.0.1] PHP Fatal error:  Call to undefined

function mysql_connect() in E:\www\a.php on line 2, referer: http://localhost/
[Tue Dec 31 09:05:17 2013] [error] [client 127.0.0.1] PHP Fatal error:  Call to undefined

function mysql_connect() in E:\www\a.php on line 2, referer: http://localhost/
[Tue Dec 31 09:06:04 2013] [error] [client 127.0.0.1] PHP Fatal error:  Call to undefined

function mysql_connect() in E:\www\a.php on line 3, referer: http://localhost/
[Tue Dec 31 09:06:05 2013] [error] [client 127.0.0.1] PHP Fatal error:  Call to undefined

function mysql_connect() in E:\www\a.php on line 3, referer: http://localhost/
[Tue Dec 31 09:06:05 2013] [error] [client 127.0.0.1] PHP Fatal error:  Call to undefined

function mysql_connect() in E:\www\a.php on line 3, referer: http://localhost/
[Tue Dec 31 09:06:05 2013] [error] [client 127.0.0.1] PHP Fatal error:  Call to undefined

function mysql_connect() in E:\www\a.php on line 3, referer: http://localhost/
[Tue Dec 31 09:06:06 2013] [error] [client 127.0.0.1] PHP Fatal error:  Call to undefined

function mysql_connect() in E:\www\a.php on line 3, referer: http://localhost/
[Tue Dec 31 09:06:06 2013] [error] [client 127.0.0.1] PHP Fatal error:  Call to undefined

function mysql_connect() in E:\www\a.php on line 3, referer: http://localhost/

日志中有这么一句

PHP Startup: Unable to load dynamic library  'D:\myserver\php\ext\php_mysql.dll' 这个意思是

没有加载成功php_mysql文件了,还有一点是提示 PHP Fatal error:  Call to undefined function

mysql_connect(),,这个是mysql没有连接成功也就是加载mysql库失败了,根据分析有两种可能一是文件不

存在,这个问题不存因为我以前用的是这个php解压包,2是服务器环境变量问题,如果是环境变量有两种解

决办法


1,是直接在windows增加环境变量

2,直接把在d:PHP里找到php5ts.dll,libmysql.dll将其复制到c:/winnt/system32下(winNT/2000的机器),

而winXP/2003是复制到c:/windows/system32下即可

记住复制到system目录之后必须重记apache环境,如我再测试http://localhost/a.php 就可以看到

输出的phpinfo相关信息了,本站原创文章转载注明来源www.111cn.net

本文章一给大家介绍php.ini中session和cookie有关的配置详解,希望此教程对各位同学会有所帮助。

1,session.use_cookie = 1

是否采用Cookie方法传递session id值。默认是1,表示启用。

2,session.name = PHPSESSID

不 管是Cookie传递sessioin_id,还是GET方法传递session_id,都需要使用键值。他们的格式分别是Cookie:  sess_name=session_id;和/path.php?sess_name=session_id,其中sess_name就是由这里指定 的。

3,session.use_only_cookies = 0

表示只使用Cookie 的方法传递session id。我们说过,传递cookie的方法,除了cookie,还有GET方法,GET方法是不安全的方法。在用户端禁用了cookie的时候,会采用 GET方法传递session_id,可以通过这个设置尽用GET方法传递session_id。

4,session.cookie_lifetime = 0, session.cookie_path = / 以及session.cookie_domain =
如 果使用Cookie方法传递session_id的话,这里分别指定了cookie有效域、目录和时间。分别对应setcookie()函数的形 参$expire、$path和$domain。其中cookie_lifetime=0表示直到关闭浏览器才删除Cookie。还可以使用 session_set_cookie_params()函数修改这些值。

5,session_name([string $name])

获 取或更新session_name。如果传了name,则表示不使用默认的名称PHPSESSID(由session.name)指定,否则获取当前 session_name。注意:如果设置session_name,则必须在session_start()之前调用才生效。

6,session_id([string $id])

与session_name()类似,但它是读取或者设置session_id的方法。同样,设置session_id的话,必须在session_start()之前调用才有效。

7,session_set_cookie_params()和session_get_cookie_params()

通 过session_set_cookie_params()可以重新设定session.cookie_lifetime, session.cookie_path以及session.cookie_domain这三个php.ini设置。而 session_get_cookie_params()则是获取这些设定的值

在PHP中 Session配置我们可以直接在php.ini中进行设置,下面我来给各位介绍在php.ini中具体配置session的一些参考说明。


php.ini中的session配置说明

  下面介绍能让session运行的必要配置步骤

  手动配置PHP运行环境时,最容易遗忘的一项是服务器端session文件的存储目录配置工作,打开php.ini文件,搜索Session,找到session.save_path,默认值为/tmp,代表session文件保存在c:/tmp目录下,默认tmp目录并没有创建,你可以在c盘下创建tmp目录,或者创建一个其他目录,比如leapsoulcn,再修改session.save_path的值,并去掉;,即

  session.save_path = ‘/leapsoulcn’;

  注意事项:

  1、一般为了保证服务器的安全,session.save_path值最好设置为外网无法访问的目录,另外如果你是在linux服务器下进行session配置,请务必同时配置此目录为可读写权限,否则在执行session操作时会报错。

  2、在使用session变量时,为了保证服务器的安全性,最好将register_globals设置为off,以保证全局变量不混淆,在使用session_register()注册session变量时,你可以通过系统全局变量$_SESSION来访问,比如你注册了leapsoulcn变量,你可以通过$_SESSION['leapsoulcn']来访问此变量。PHP环境变量$_SERVER和系统常量详细说明

  session.save_path配置其他说明事项,从php.ini配置文件翻译而来

  你可以使用”N;[MODE;]/path”这样模式定义该路径,N是一个整数,表示使用N层深度的子目录,而不是将所有数据文件都保存在一个目录下。

  [MODE;]可选,必须使用8进制数,默认600(=384),表示每个目录下最多保存的会话文件数量。[MODE;]并不会改写进程的umask。php不会自动创建这些文件夹结构。可使用ext/session目录下的mod_files.sh脚本创建。如果该文件夹可以被不安全的用户访问(比如默认的”/tmp”),那么将会带来安全漏洞。当N>0时自动垃圾回收将会失效,具体参见下面有关垃圾搜集的部分。

  如果你服务器上有多个虚拟主机,建议针对每个不同的虚拟主机分别设置各自不同的目录。

  至此最基本的session配置就完成了,你只要保存php.ini,并重启apache,即可使用session功能。

  其他session配置说明

  session.save_handler = ”files”

  默认以文件方式存取session数据,如果想要使用自定义的处理器来存取session数据,比如数据库,用”user”。

  session.use_cookies = 1

  是否使用cookies在客户端保存会话sessionid,默认为采用cookies

  session.use_only_cookies = 0

  是否仅仅使用cookie在客户端保存会话sessionid,这个选项可以使管理员禁止用户通过URL来传递id,默认为0,如果禁用的话,客户端如果禁用Cookie将使session无法工作。

  session.name = “PHPSESSID”

  当做cookie name来使用的session标识名

  session.auto_start = 0

  是否自动启动session,默认不启动,我们知道在使用session功能时,我们基本上在每个php脚本头部都会通过session_start()函数来启动session,如果你启动这个选项,则在每个脚本头部都会自动启动session,不需要每个脚本头部都以session_start()函数启动session,推荐关闭这个选项,采用默认值。

  session.cookie_lifetime = 0

  传递sessionid的Cookie有效期(秒),0表示仅在浏览器打开期间有效。

  session.gc_probability = 1

  session.gc_divisor = 100

  定义在每次初始化会话时,启动垃圾回收程序的概率。计算公式如下:session.gc_probability/session.gc_divisor,比如1/100,表示有1%的概率启动启动垃圾回收程序,对会话页面访问越频繁,概率就应当越小。建议值为1/1000~5000。

  session.gc_maxlifetime = 1440

  设定保存的session文件生存期,超过此参数设定秒数后,保存的数据将被视为’垃圾’并由垃圾回收程序清理。判断标准是最后访问数据的时间(对于FAT文件系统是最后刷新数据的时间)。如果多个脚本共享同一个session.save_path目录但session.gc_maxlifetime不同,将以所有session.gc_maxlifetime指令中的最小值为准。

  如果你在session.save_path选项中设定使用子目录来存储session数据文件,垃圾回收程序不会自动启动,你必须使用自己编写的shell脚本、cron项或者其他办法来执行垃圾搜集。

  比如设置”session.gc_maxlifetime=1440″ (24分钟):

  cd /path/to/sessions; find -cmin +24 | xargs rm

  以上是一些常用的session配置选项说明,更多的session配置选项说明你可以参考php.ini文件中的说明。

  至此,在php.ini配置文件中对session进行配置的PHP教程就介绍完毕了,通过上面的步骤实践与学习,基本的session功能都可以使用,至于session性能等其他方面则需要根据服务器环境和需求进行微调了,这个得自己体会。

附一表

[Session]
session.save_handler      = files   ; 用于保存/取回数据的控制方式
session.save_path         = C:wintemp    ; 在 save_handler 设为文件时传给控制器的参数,
                                    ; 这是数据文件将保存的路径。
session.use_cookies       = 1       ; 是否使用cookies
session.name              = PHPSESSID 
                                    ; 用在cookie里的session的名字
session.auto_start        = 0       ; 在请求启动时初始化session
session.cookie_lifetime   = 0       ; 为按秒记的cookie的保存时间,
                                    ; 或为0时,直到浏览器被重启
session.cookie_path       = /       ; cookie的有效路径
session.cookie_domain     =         ; cookie的有效域
session.serialize_handler = php     ; 用于连接数据的控制器
                                    ; php是 PHP 的标准控制器。
session.gc_probability    = 1       ; 按百分比的'garbage collection(碎片整理)'进程
                                    ; 在每次 session 初始化的时候开始的可能性。
session.gc_maxlifetime    = 1440    ; 在这里数字所指的秒数后,保存的数据将被视为
                                    ; '碎片(garbage)'并由gc 进程清理掉。
session.referer_check     =         ; 检查 HTTP引用以使额外包含于URLs中的ids无效
session.entropy_length    = 0       ; 从文件中读取多少字节
session.entropy_file      =         ; 指定这里建立 session id
; session.entropy_length    = 16
; session.entropy_file      = /dev/urandom
session.cache_limiter     = nocache ; 设为{nocache,private,public},以决定 HTTP 的
                                    ; 缓存问题
session.cache_expire      = 180     ; 文档在 n 分钟后过时
session.use_trans_sid     = 1       ; 使用过渡性的 sid 支持,若编译时许可了
                                    ;  --enable-trans-sid
url_rewriter.tags         = "a=href,

[!--infotagslink--]

相关文章

  • Spring Cloud 中@FeignClient注解中的contextId属性详解

    这篇文章主要介绍了Spring Cloud 中@FeignClient注解中的contextId属性详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-25
  • 解决Feign切换client到okhttp无法生效的坑(出现原因说明)

    这篇文章主要介绍了解决Feign切换client到okhttp无法生效的坑(出现原因说明),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-25
  • 自定义feignClient的常见坑及解决

    这篇文章主要介绍了自定义feignClient的常见坑及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-10-20
  • C#中HttpWebRequest、WebClient、HttpClient的使用详解

    这篇文章主要介绍了C#中HttpWebRequest、WebClient、HttpClient的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
  • VSCode C++多文件编译的简单使用方法

    这篇文章主要介绍了VSCode C++多文件编译的简单使用方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-03-29
  • Vue3 编译流程-源码解析

    今天将从 Vue 的入口文件开始,看看声明了一个 Vue 的单文件之后是如何被 compile-core 编译核心模块编译成渲染函数的。下面小编讲解并附上代码分析展现在文章里,感兴趣的小伙伴不要错过奥...2021-09-25
  • vscode和cmake编译多个C++文件的实现方法

    这篇文章主要介绍了vscode和cmake编译多个C++文件的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-10
  • golang在GRPC中设置client的超时时间

    这篇文章主要介绍了golang在GRPC中设置client的超时时间,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-27
  • 使用 C# 动态编译代码和执行的代码

    一个控制台例子, 演示了如何用 C# 动态的生成代码, 编译代码, 最后执行...2020-06-25
  • 详解.NET Core 使用HttpClient SSL请求出错的解决办法

    这篇文章主要介绍了.NET Core 使用HttpClient SSL请求出错的解决办法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2021-09-22
  • java HttpClient传输json格式的参数实例讲解

    这篇文章主要介绍了java HttpClient传输json格式的参数实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-22
  • 手把手教你如何编译打包video.js

    这篇文章主要介绍了编译打包video.js的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧...2020-12-09
  • Windows系统下Eclipse搭建ESP32编译环境及安装过程

    Ecppse 使用了 ESP-IDF 中的 Makefile 支持。这意味着您需要从创建 ESP-IDF 项目开始。您可以使用 github 中的 idf-template 项目,接下来通过本文给大家介绍Windows系统下Eclipse搭建ESP32编译环境及安装过程,感兴趣的朋友一起看看吧...2021-10-18
  • jsp 自动编译机制详细介绍

    这篇文章主要介绍了 Jasper的自动检测实现的机制比较简单,依靠某后台线程不断检测JSP文件与编译后的class文件的最后修改时间是否相同,若相同则认为没有改动,但倘若不同则需要重新编译,需要的朋友可以参考下...2016-12-02
  • QT5编译使用QFtp的方法步骤

    这篇文章主要介绍了QT5编译使用QFtp的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-04
  • SpringCloud @FeignClient参数的用法解析

    这篇文章主要介绍了SpringCloud @FeignClient参数的用法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-10-21
  • 解析C语言与C++的编译模型

    C++继承了C的编译模型,C语言的编译链接模型相对简洁,但C++继承了这些机制之后变得更加复杂难以理解,这里就来带大家简要解析C语言与C++的编译模型...2020-04-25
  • SpringCloud之@FeignClient()注解的使用方式

    这篇文章主要介绍了SpringCloud之@FeignClient()注解的使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-25
  • C#中在WebClient中使用post发送数据实现方法

    这篇文章主要介绍了C#中在WebClient中使用post发送数据实现方法,需要的朋友可以参考下...2020-06-25
  • golang elasticsearch Client的使用详解

    这篇文章主要介绍了golang elasticsearch Client的使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-04