php

[MySQL FAQ]启用SELinux后,PHP连接MySQL异常

同事报告一起奇怪的现象,一个最简单的测试PHP代码,在测试环境很正常,但是在正式环境下,无论用何种方式(tcp/ip、unix socket)都无法连接mysql。
我协助查看了下,确实如此,无论是指定IP、端口的tcp/ip方式连接,或者是用unix socket方式连接,报错信息都类似:

Could not connect: Can't connect to MySQL server on 'MYSQL.SERVER' (13)

无论如何修改MySQL的授权,或者调整php.ini中关于MySQL的设置,或者修改MySQL的监听网口,都无法解决。
而如果用命令行人工连接MySQL,则一切正常。

问题看起来像是php(with apache)不被允许连接MySQL,但是防火墙也没有限制。想来想去,唯有SELinux的因素会导致这个问题。

转换文件内容字符集工具(CCT)

转换文件内容字符集工具

技术相关:

httpd glibc free() 报错解决一例

最近公司网站访问量比以前增加了不少,导致 httpd 负载也响应加大,error log中也多次出现类似下面的错误。

[notice] child pid 11972 exit signal Segmentation fault (11)
*** glibc detected *** free(): invalid pointer: 0x0a7206cc ***
*** glibc detected *** free(): invalid next size (fast): 0x09e87e90 ***

google了一下,发现以前也有人碰到过,通过修改内核参数,加大共享内存即可,于是我也尝试了一下:

web#sysctl -a|grep shm
kernel.shmmni = 4096
kernel.shmall = 2097152
kernel.shmmax = 33554432

web#sysctl -w kernel.shmmax = 67108864

然后重启apache,以后就很少报告该错误了。

技术相关:

如何通过 PHP 取得 MySQL procedure 结果

总有网友问我,如何通过php调用MySQL的存储过程同时取得返回的结果集呢?确实,MySQL的存储过程大大方便了编程也提高了效率。但是,对于那些还在用php 4 的同学们来说可就麻烦了,因为php 4只能调用存储过程,但却无法直接取得返回结果集;不过,用php 5的mysqli函数就可以做到了。首先,重新编译php 5,增加对mysqli的支持,或者直接下载mysqli的扩展模块,这里不再细说。直接举个例子吧:

1、 创建存储过程,列出 test 库下的所有表:

mysql>DELIMITER //
mysql>CREATE PROCEDURE `yejr`()
    ->BEGIN
    ->SHOW TABLES;
    ->END; //
Query OK, 0 rows affected (0.12 sec)

技术相关:

Smarty中的ob_start问题

近日升级php 4.3.10 到 4.4.6,遭遇到一个奇怪的问题。描述如下:
Linux Redhat AS4, Apache 1.3.37, PHP 4.4.6, Smarty 2.6.3 环境中,只要在调用 Smarty 的 display() 函数之前有任何诸如
echo/print/print_r 等输出,那么整个输出结果就变成空白页面。一开始以为是版本升级导致的问题,遂换成旧版本,问题依旧。也怀疑到是否因为 SQUID 缓存引起的,于是直接走 Apache 端口,还是那样。把 PHP 的 error_reporting 改成 E_ALL,重启,没看到任何报错,但是问题依旧如此...这时已经有点烦躁了。 以前也从来没碰到过如此BT之问题,百思不得其解,干脆重启机器吧,可还是那样...

技术相关:

PHP实现多服务器session共享之mysql共享

闲话不多说了,相关文章请查看 PHP实现多服务器session共享之NFS共享PHP实现多服务器session共享之memcache共享
基于mysql的实现方式代码如下:

<?php
/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
//===========================================
// 程序:   mysql-Based Session Class
// 功能:   基于mysql存储的 Session 功能类
// 作者:    yejr
// 网站:    http://imysql.cn
// 时间:    2007-01-05
//===========================================

/**
 * 类名:    MySQL Session Class
 * 功能:    自主实现基于MySQL HEAP表存储的 Session 功能

技术相关:

PHP实现多服务器session共享之memcache共享

  本文是 PHP实现多服务器session共享之NFS共享的延续,不过这次,我采用memcache来存储session了,memcache的安装请看这里: 搭建高效、可靠、稳定的WEB服务器 -- 二、) 安装MySQL、memcache
接下来,再自定义一套session处理机制,关于session的实现方法我就不再多讲,直接贴程序了。

<?php
/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
//===========================================
// 程序:   Memcache-Based Session Class
// 功能:   基于Memcache存储的 Session 功能类
// 作者:    yejr

技术相关:

PHP实现多服务器session共享之NFS共享

前言,Nio大侠提出了session多服务器共享的问题,原文请见PHP 实现多服务器共享 SESSION 数据。其中,有一种方法就是利用NFS来共享session,如果session量比较大并且所有的session文件都在同一个子目录下的话,那么可能会由此带来很严重的负载问题,甚至导致网站无法使用。本文就是对这个方案做一下详细的解说。
首先,修改 php.ini的 session.save_path 选项,大致如下:

session.save_path = "2;/tmp/php_sess"

意为把session存放在 "/tmp/php_sess" 目录下,并且分成 2 级子目录,每级子目录又分别有 16 个子目录。

技术相关:

用PHP控制您的浏览器cache

用PHP控制您的浏览器cache

Output Control 函数可以让你自由控制脚本中数据的输出。它非常地有用,特别是对于:当你想在数据已经输出后,再输出文件头的情况。输出控制函数不对使用 header() 或 setcookie(), 发送的文件头信息产生影响,只对那些类似于 echo() 和 PHP 代码的数据块有作用。

我们先举一个简单的例子,让大家对Output Control有一个大致的印象:
Example 1.

ob_start(); //打开缓冲区
echo \"Hellon\"; //输出
header(“location:index.php”); //把浏览器重定向到index.php
ob_end_flush();//输出全部内容到浏览器
?>

所有对header()函数有了解的人都知道,这个函数会发送一段文件头给浏览器,但是如果在使用这个函数之前已经有了任何输出(包括空输出,比如空格,回车和换行)就会提示出错。如果我们去掉第一行的ob_start(),再执行此程序,我们会发现得到了一条错误提示:“Header had all ready send by”!但是加上ob_start,就不会提示出错,原因是当打开了缓冲区,echo后面的字符不会输出到浏览器,而是保留在服务器,直到你使用 flush或者ob_end_flush才会输出,所以并不会有任何文件头输出的错误!

技术相关:

PHP中正则表达式详细说明

PHP中正则表达式详细说明

  PHP继承*NIX的一贯传统,完全支持正规表达式的处理。正规表达式提供了一种高级的,但不直观的字符串匹配和处理的方法。用过PERL的正规表达式的朋友都知道,正规表达式的功能非常强大,但学起来不是那么容易。
  比如:
  
  ^.+@.+\..+$
  
  这段有效却难以理解的代码足够使一些程序员头痛(我就是)或者让他们放弃使用正规表达式。相信当你读完这个教程后,就可以理解这段代码的含义了。
  
  基本模式匹配
  
  一切从最基本的开始。模式,是正规表达式最基本的元素,它们是一组描述字符串特征的字符。模式可以很简单,由普通的字符串组成,也可以非常复杂,往往用特殊的字符表示一个范围内的字符、重复出现,或表示上下文。例如:

技术相关:

页面

Subscribe to RSS - php