最近在部署一个网站时出了一个问题。
在本地运行没有问题的代码,上传到服务器后,打开直接就500了。
经过查找了解到服务器环境配置与本地的不同,本地php采用handle模式,而服务器采用fastcgi模式。
一般情况下应该是没有问题的,但这个网站用了htaccess文件进行php参数设置
继续阅读“PHP在FastCGI模式下htaccess文件设置php_value等配置无效”
最近在部署一个网站时出了一个问题。
在本地运行没有问题的代码,上传到服务器后,打开直接就500了。
经过查找了解到服务器环境配置与本地的不同,本地php采用handle模式,而服务器采用fastcgi模式。
一般情况下应该是没有问题的,但这个网站用了htaccess文件进行php参数设置
继续阅读“PHP在FastCGI模式下htaccess文件设置php_value等配置无效”
在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
先创建网站的根目录,作为测试,把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 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编译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,问题解决
64位centos 6.4源码安装apache和PHP
使用yum安装mysql,搭建lamp环境
安装版本
Apache 2.2.25
PHP 5.3.27
继续阅读“CentOS编译安装Apache和PHP,搭建LAMP环境”
漏洞无非这么几类,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做页面模版时,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); } } } ?>
在Yii中实现用户登录时进行记录等操作,很多时候都是用WebUser继承CWebUser,重写login函数,在里面添加些自己需要的操作。
但是login只是在登录时触发,如果网站为了用户更方便,而使用记住登陆状态自动登陆功能,那要如何在用户再次来到网站,自动登录时,记录日志或进行一些其他操作呢?
通过查看CWebUser的源码发现,在登陆的login和自动登录的restoreFromCookie函数里最终都执行了changeIdentity函数,正是在changeIdentity里更新了用户的信息,保存session。
继续阅读“用Yii实现用户登录时进行其他操作,支持用户自动登陆”
PO 文件是面向翻译人员的、提取于源代码的一种资源文件。当软件升级的时候,通过使用 gettext 软件包处理 PO
文件,可以在一定程度上使翻译成果得以继承,减轻翻译人员的负担。
MO 文件是面向计算机的、由 PO 文件通过 gettext
软件包编译而成的二进制文件。程序通过读取 MO 文件使自身的界面转换成用户使用的语言。
继续阅读“在Yii应用程序中使用gettext”