PHP在FastCGI模式下htaccess文件设置php_value等配置无效

最近在部署一个网站时出了一个问题。
在本地运行没有问题的代码,上传到服务器后,打开直接就500了。

经过查找了解到服务器环境配置与本地的不同,本地php采用handle模式,而服务器采用fastcgi模式。
一般情况下应该是没有问题的,但这个网站用了htaccess文件进行php参数设置
继续阅读“PHP在FastCGI模式下htaccess文件设置php_value等配置无效”

apache2.4设置开启gzip

在apache 2.4中开启gzip
修改apache配置文件httpd.conf
将下面两句前的#去掉

LoadModule deflate_module modules/mod_deflate.so
LoadModule filter_module modules/mod_filter.so  

再在http.conf最后加上下面配置

<IfModule deflate_module>
SetOutputFilter DEFLATE
DeflateCompressionLevel 9

#下面是设置那些请求不进行压缩
#SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:html|htm)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:pdf|doc)$ no-gzip dont-vary
</IfModule>

重启apache,即开启gzip

CentOS配置apache mod_php php-fpm

先创建网站的根目录,作为测试,把apache默认的目录文件复制过来

 cp -r /var/www /home/www

配置apache
修改安全设置,让selinux允许apache网站目录设置在home里,如果网站目录不放在home里就不用设置了

setsebool -P httpd_enable_homedirs on

-P 参数是把设置写入配置文档,以后将为修改后状态运行
可以使用 getsebool 命令来获取当前设置状态

getsebool httpd_enable_homedirs

可以用 getsebool -a |grep httpd 命令查看更多规则,进行修改

编辑apache配置文件 /etc/httpd/conf/httpd.conf

修改网站根目录
将     DocumentRoot “/var/www/html”
改为  DocumentRoot “/home/www/html”

将     <Directory “/var/www/html”>
改为  <Directory “/home/www/html”>

在往下几行
将     AllowOverride None
改为  AllowOverride All

在文件的最后加上
Include vhost.d/*.conf

用来放VirtualHost的配置文件
保存
继续阅读“CentOS配置apache mod_php php-fpm”

CentOS安装nginx apache mysql php

在CentOS安装nginx、apache、mysql、php,真是一遍遍的折腾啊
趁着搞完这会,写篇笔记备忘

新装的系统  CentOS 6.4 x64 minimal

换一个国内的源,比如163的,这样安装速度会快一些
先安装下载软件wget

yum install wget

备份原始源

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak

下载163的源

wget http://mirrors.163.com/.help/CentOS6-Base-163.repo

安装第三方源,因为一些软件默认源里没有,比如nginx,mod_fastcgi等,根据系统选择
安装RepoForge源

rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt

#i386
rpm -ivh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.i686.rpm

#x86_64
rpm -ivh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm

安装epel源

#i386
rpm -Uvh http://mirrors.yun-idc.com/epel/6/i386/epel-release-6-8.noarch.rpm

#x86_64
rpm -Uvh http://mirrors.yun-idc.com/epel/6/x86_64/epel-release-6-8.noarch.rpm

更新缓存和软件到最新版本,包括系统软件

yum makecache
yum -y update

继续阅读“CentOS安装nginx apache mysql php”

编译时出现错误/usr/bin/ld: cannot find -lltdl

在CentOS编译PHP时出现错误
/usr/bin/ld: cannot find -lltdl

通常在编译时出现的 /usr/bin/ld: cannot find -lxxx 错误,主要的原因是库文件并没有导入到 ld 检索目录中
其中xxx即表示函式库文件名称,其命名规则是:lib+库名(即xxx)+.so
可以谷歌搜索libxxx寻找相关的库并安装

我在安装php时出现 /usr/bin/ld: cannot find -lltdl
通过搜索libltdl,了解到需要安装 libtool
安装 libtool-ltdl
可在 http://ftp.gnu.org/gnu/libtool/ 找到需要的版本

下载并安装

wget http://ftp.gnu.org/gnu/libtool/libtool-2.4.2.tar.gz
tar -zxvf libtool-2.4.2.tar.gz
cd libtool-2.4.2
./configure
make
make install

创建符号链接

ln -s  /usr/local/lib/libltdl.so /usr/lib/libltdl.so

完成,再次编译PHP,问题解决

[转]一点关于PHP XSS和SQL注入的问题

漏洞无非这么几类,XSS、sql注入、命令执行、上传漏洞、本地包含、远程包含、权限绕过、信息泄露、cookie伪造、CSRF(跨站请求)等。这些漏洞不仅仅是针对PHP语言的,本文只是简单介绍PHP如何有效防止这些漏洞。

1.xss + sql注入(关于xss攻击详细介绍)

其中占大头的自然是XSS与SQL注入,对于框架类型或者有公共文件的,建议在公共文件中统一做一次XSS和SQL注入的过滤。用PHP写个过滤函数,可由如下所示:

$_REQUEST = filter_xss($_REQUEST);

$_GET = filter_xss($_GET);

$_POST = filter_xss($_POST);

$_COOKIE = filter_xss($_COOKIE);

$_POST = filter_sql($_POST);

$_GET = filter_sql($_GET);

$_COOKIE = filter_sql($_COOKIE);

$_REQUEST = filter_sql($_REQUEST);

最简单的filter_xss函数是 htmlspecialchars()
最简单的filter_sql函数是 mysql_real_escape_string()
继续阅读“[转]一点关于PHP XSS和SQL注入的问题”

改造Smarty,让其支持layout

使用smarty做页面模版时,smarty并没有提供一个可以做整体布局的方法,每个页面都要写多个include共同的模版块。可以对smarty进行改造,让其支持layout机制。

在smarty中建类 MySmarty.class.php

<?php
include_once 'Smarty.class.php';

class MySmarty extends Smarty {
	/** @var string 模板所用layout */
	public $layouts  = false;
	
	public function display($template = NULL, $cache_id = NULL, $compile_id = NULL, $parent = NULL) {
		/** 使用 layout 机制 */
		if ($this->layouts) {
			$this->assign('CONTENT_FOR_LAYOUT', $template);
			parent::display($this->layouts, $cache_id, $compile_id, $parent);
			// 最后的smarty显示处理,调用Smarty原始函数
		} else {
			parent::display($template, $cache_id, $compile_id, $parent);
		}
	}
}
?>

继续阅读“改造Smarty,让其支持layout”

用Yii实现用户登录时进行其他操作,支持用户自动登陆

在Yii中实现用户登录时进行记录等操作,很多时候都是用WebUser继承CWebUser,重写login函数,在里面添加些自己需要的操作。

但是login只是在登录时触发,如果网站为了用户更方便,而使用记住登陆状态自动登陆功能,那要如何在用户再次来到网站,自动登录时,记录日志或进行一些其他操作呢?

通过查看CWebUser的源码发现,在登陆的login和自动登录的restoreFromCookie函数里最终都执行了changeIdentity函数,正是在changeIdentity里更新了用户的信息,保存session。
继续阅读“用Yii实现用户登录时进行其他操作,支持用户自动登陆”

在Yii应用程序中使用gettext

PO 文件是面向翻译人员的、提取于源代码的一种资源文件。当软件升级的时候,通过使用 gettext 软件包处理 PO
文件,可以在一定程度上使翻译成果得以继承,减轻翻译人员的负担。
MO 文件是面向计算机的、由 PO 文件通过 gettext
软件包编译而成的二进制文件。程序通过读取 MO 文件使自身的界面转换成用户使用的语言。
继续阅读“在Yii应用程序中使用gettext”