Archive of the categories: PHP技术

Mantis 安装与中文化配置简要整理

一、安装基本配置环境:APACHE+PHP+MYSQL跳过,注:我是在windows 2003系统下面安装;

二、官方下载地址:http://www.mantisbt.org/  下载mantisbt-1.2.14.zip,跳过数据库与系统安装直接进入配置:

1、字体显示大小问题
字体显示太小,打开Mantis\css\default.css文件,将font-size: 8pt,全部修改为font-size: 9pt。
2、默认环境配置,修改config_inc.php配置文件如下:
-基本环境:
$g_default_language  = ‘chinese_simplified’;
$g_default_timezone = ‘Asia/Shanghai’;
$g_enable_email_notification = ON;
$g_system_font_folder = ‘c:/windows/fonts/’;
-显示附件图片文件:
$g_preview_attachments_inline_max_size = 5000000;
$g_preview_max_width = 800;
$g_preview_max_height = 1200;
-显示真名:
$g_show_realname = ON;
-邮件配置:(真实的配置)
$g_phpMailer_method = PHPMAILER_METHOD_SMTP; //还有另外2个,但我主要是这个方式;
$g_smtp_host = ‘smtp.exmail.qq.com’; // used with PHPMAILER_METHOD_SMTP
$g_smtp_username = ‘bug@xxx.com’; //used with PHPMAILER_METHOD_SMTP
$g_smtp_password = ‘xxx’; //used with PHPMAILER_METHOD_SMTP
$g_administrator_email = ‘administrator@xxx.com’;
$g_webmaster_email = ‘webmaster@xxx.com’;
$g_from_email = ‘bug@xxx.com’; # the “From: ” field in emails
$g_return_path_email = ‘bug@xxx.com’; # the return address for bounced mail
$g_from_name = ‘BUG缺陷管理系统’;
$g_smtp_port = 25;

另外要修改php的配置文件,否则无法成功发送邮件。
修改php.ini,查找类似以下文件
[mail function]
; For Win32 only.
SMTP = smtp.exmail.qq.com
smtp_port = 25
; For Win32 only.
;sendmail_from = bug@ank-guard.com

-邮件通知:(注册用户时间不发送邮件)
$g_enable_email_notification = ON;
-邮件发送计划:(不然可能影响访问速度)
$g_email_send_using_cronjob = ON;
-上传文件附件大小与位置
$g_allow_file_upload = ON;
$g_file_upload_method = DISK;
$g_absolute_path_default_upload_folder = ‘upload/’;
$g_max_file_size = 10000000;
-标题
$g_window_title = ‘BUG缺陷管理系统’;
3、安装Mantis图表 1.0插件(怎么安装就明说了),但图形中文无法正常显示:
简单一点的做法:修改plugins\MantisGraph\core\graph_api.php
第59行:’arial’ => ‘arial.TTF’
替换为:’arial’ => ‘SIMFANG.TTF’ //你也可以试试其它的字体,我是发现无法使用ttc的字体,如simsun.ttc宋体无法使用,显示图片为一个叉图。后来在网上下载了一个simsun.ttf,就OK了。

4、其它使用问题:
分派工作人员配置:
管理->配置管理->工作流管理->管理问题,将需要可分派工作人员进行说勾选,如管理员不需要被分派,可以去掉勾。

注意大家看到有什么帮助,网上很多都不全,或资料比较老。

5、 解决CVS导出乱码:

找到Mantis根目录下csv_export.php,进行修改:
添加函数:
function expChangeCode($str)
{
return mb_convert_encoding($str,”CP936″,”UTF-8″);
}

然后修改:
将echo $t_header 改成 echo expChangeCode($t_header);
将echo $t_value 改成 echo expChangeCode($t_value);
将echo $t_function( $t_row[ $t_column ] )改成 echo expChangeCode($t_function( $t_row[ $t_column ] ));

---
注:以下为解决Excel导出乱码,不过发现无法成功。

找到Mantis根目录下core/excel_api.php,进行修改:
将$t_ret .= utf8_encode( $t_value );改成$t_ret .= $t_value;

也就是将utf8_encode函数去掉,也可以这样改:
将$t_value = str_replace( “>”, “>”, $t_value );改为$t_ret = str_replace( “>”, “>”, $t_value );
然后将$t_ret .= utf8_encode( $t_value );这句删除或者注释掉。

--
参考:http://hi.baidu.com/coolslob/item/23063fb8506a49a5ebba936c

重定向与apache404错误页处理

header(Location)标准的使用方法
<?
ob_start();
……..
if ( something ){
ob_end_clean();
header("Location: yourlocation");
exit;
else{
……….
ob_flush(); //可省略
}
?>
例如:
<?
header("Location:http://www.fengjian.org");
exit;
?>
注:
php中进行网页重定向一共有三种方法:
1、利用header()重定向
<?
header("Location: $url");
exit;
?>
2、用嵌入HTML的<meta>标识重定向
<META HTTP-EQUIV="REFRESH" CONTENT="5; URL=<? echo $url;?>>
3、用嵌入javascript的重定向
<?
echo "<!–<SCRIPT LANGUAGE="javascript">";
echo "location.href='$url'";
echo "</SCRIPT>–>";
?>

用Session对Web页面进行保护-PHP教程,PHP应用

在很多时候,我们都要对某些web 页面进行安全保护。典型的例子就是前台浏览页面与后台管理页面的安全性。这也是 web 上用得最多的一种页面安全模式。在用php4 开发一个小型的书籍管理系统中,我也遇到了这个安全问题。于是我想到了php4 的新特性—-session ..

要求目的:同一站点,无权用户,一般授权用户和超级用户能看到和使用不同的页面。

实现办法:在要保护的页面 include 不同级别的安全检验摸板。

注意事项:
1 > 要避免用户浏览器不使用 cookie 而不能浏览受保护的页面(session 默认使用客户端的 cookie).
2 > 要防止权限被盗用。( php 4 的 session 的默认存活期间是从建立 session 开始到关闭浏览器为止。)

如何使用:
1 > 在需要一般保护的页面的代码最前边加上 include ("secturity2.php"); 就行了
2 > 在需要特殊保护的页面的代码最前边加上 include ("secturity1.php"); 和 include ("secturity2.php"); 就行了
(假设所有文件都在同一个文件夹里)

程序代码及详细解释:
security1.php 特殊用户页面保护摸板
security2.php 一般用户页面保护摸板
login2.php 用户登陆页面

我们先来看 login2.php (用户登陆页面)的代码:

<?php
session_register("user");#增加用户名变数
session_register("password"); #增加密码变数
session_register("tmlast"); #增加时间变数
if($user==""){#判断是否是第一次登陆
$error="chooseyounameandinputthepasswordplease!";
}
$tmlast=date("u"); #记录登陆时间
if($user1)
$user=trim($user1); #记录用户名(引用user1变量是为什么?请读者自己思考。)
$password=trim($password1); #记录密码
if($user1&&$password1){
if($password1==888){ #判断登陆密码是否是默认密码888结束 php 程式
$sid="phpsessid=".session_id(); #保存当前session的id号
$warning="yourpasswordisstillthedefaultpassword888,pleasechangeit.";
header("location:changepassword.php?$sid&warning=$warning"); #传递警告参数warning到changepassword.php 页面
exit(); #立刻结束 php 程式
}
if(strtolower($user)=="root"){ #判断登陆用户是否是超级用户,可以自行扩充用户
$filename="backend_index.php";
}
else{
if(!$filename) #判断进入登陆页面的上一页是否是受保护页面
$filename="index.php";
}
$sid="phpsessid=".session_id(); #保存当前session的id号
header("location:$filename?$sid); #登陆成功进入指定页面,传递当前session的id号,防止用户不使用 cookie 而读不到 session 值
exit(); #立刻结束 php 程式
}
?>
<html>
<title></title>
<head>
<linkrel="stylesheet"href="class/style.css">
<metahttp-equiv="content-type"content="text/html;charset=gb2312">
</head>
<h2>loginpage</h2>
<?php
echo"$error"; #显示登陆提示
?>
<formaction="<?phpecho$php_self;#提交到当前页?>"method=post>
<p><b>name:</b>
<?php
include("class/dbclass.inc"); #调用dbclass.inc类,用法和 mysql.inc 类一样
$q=newdb_sql; #定义一个新的对象
$q->connect($host,$database,$user,$password); #连接 mysql数据库
$query="selectchrusername,chrfirstname,chrlastname".
"fromuser".
"wherechrfirstname!=".
"orderbychrfirstname";
$q->query($query); #执行sql语句
echo"<selectname=user1size=1>";
while($q->next_record()){ #从数据库中调出一般用户
if($user==$q->f(0)) #判断是否是当前用户
$select="selected"; #是当前用户则设置为默认值
else
$select="";
echo"<optionvalue=".$q->f(0)."$select>".
ucfirst($q->f(1))."". #用户名首字大写
ucfirst($q->f(2))."</option>";
}
echo"</select>";
?></p>
<p><b>password:</b><inputname=password1type=password></p>
<inputname=tmlasttype=hiddenvalue=<?phpechodate("u")?>>
<inputname=filenametype=hiddenvalue=<?phpecho$filename?>>
<p><inputname=submittype=submitvalue=确认></p>
</form>

security2.php (一般用户页面保护摸板):
<?php
session_register("user"); #说明同上
session_register("password");
session_register("tmlast");
if($filename=="")
$filename=$php_self; #记录当前页面路径
if($durtime=="")
$durtime=300; #设置 session “失效”时间
$currtime=date("u");
if(($currtime-$tmlast)>$durtime){ #判断 session是否“失效”
//session_destroy();
$error=urlencode("seesionexpired.loginagainplease!");
header("location:login2.php?filename=$filename&error=$error&user=$user"); #跳到重新登陆页
exit();
}
else{
$tmlast=$currtime; # session 没“失效”则更新最后“登陆”时间
}

include("class/dbclass.inc");

$q=newdb_sql;
$q->connect($host,$database,$user,$password);

$query="selectiduserfromuser".
"wherechrusername=$user".
"andchrpasswd=$password";
$q->query($query);

if(!$q->num_rows()){ #判断是否找到密码匹配的用户
$error=urlencode("passwordiswrongornoprivilegeuser.");
header("location:login2.php?filename=$filename&error=$error&user=$user"); #跳到密码错误登陆页
}
else{
$sid="phpsessid=".session_id();
$q->next_record();
$userid=$q->f(iduser); #保存通过验证用户的id号,方便以后使用
}
?>

security1.php (特殊用户页面保护摸板):
<?php
session_register("user"); #说明同上
$privilege="root,macro,jackie"; #设置超级用户名单列表,用“,”隔开
$pieces=explode(",",$privilege); #取得单个超级用户名单
for($i=0;$i<count($pieces);$i++){
if(strtolower($user)==$pieces[$i]){ #判断是否是超级用户
$hasprivilege=1;
break; #跳出判断循环
}
}

if(!$hasprivilege){
if($filename=="")
$filename=$php_self;
$error=urlencode("youhavenoprivilegetoviewthispage!");
header("location:login2.php?filename=$filename&error=$error&id=$id");
exit(); #跳到无权用户登陆页面
}
?>

如何给php页面添加密码

<?php
session_start(); //设置session
if($_SESSION['register'] != 1){
$password = "1234"; //预设的密码
$pass = $_POST['pass'];
if($pass != $password){
exit('密码错误');
}else{
$_SESSION['register'] = 1;
}
}
?>

这是一个很简单的输入密码才能进入的功能,安全性也比较低

Ubuntu下安装PHP GD

sudo apt-get install php5-gd

sudo /etc/init.d/apache2 restart

nginx+PHP

昨天在FreeBSD下玩了nginx+php,今天到ubuntu下来玩玩了,首先要感谢“过够了”的文章以下是按他的文章修改而来。在ubuntu下搭建比freebsd下速度要快得多,因为在freebsd我是用ports方式安装,需要编译,ubuntu下直接apt-get install 的方式安装,速度很快,下面就来开始安装吧!

1,安装nginx,执行以下命令,很快完成,不过目前apg-get方式安装默认是0.5.33的版本

sudo apt-get install nginx

配置文件默认安装位置:

conf: /etc/nginx/nginx.conf
bin:/usr/sbin/nginx
vhost: /etc/nginx/sites-enable/default
cgi-params: /etc/nginx/fastcgi-params

例:建一个虚拟Server

server {
listen 80;
server_name www.23day.com;
access_log /var/log/nginx/home.ucenter.access.log;

location / {
root /var/www/23day.com;
index index.php;

location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/23day.com$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
}

2,安装php-cgi模块

执行sudo apt-get install php5-cgi

配置文件默认安装位置:

php-cgi: /usr/bin/php-cgi
php5-cgi: /usr/bin/php5-cgi
cgi config: /usr/bin/cgi/php.ini

修改php.ini文件的cgi.fix_pathinfo数据为1,默认为0 cgi.fix_pathinfo=1; 这样php-cgi方能正常使用SCRIPT_FILENAME这个变量

sudo apt-get install build-essential
wget http://www.lighttpd.net/download/lighttpd-1.4.19.tar.gz
tar -xvf lighttpd-1.4.19.tar.gz
cd lighttpd-1.4.19/
sudo apt-get install libpcre3-dev
./configure –without-zlib –without-bzip2
make
sudo cp src/spawn-fcgi /usr/local/bin/spawn-fcgi

这样cgi控制器就安装完成.

4.启动测试系统.启动fast_cgi:

spawn-fcgi -a 127.0.0.1 -p 9000 -C 5 -u www-data -g www-data -f /usr/bin/php-cgi

注意:ip,端口与nginx服务器中的cgi-pass要对应. -C表示打开几个cgi进程

启动nginx

sudo /etc/init.d/nginx start

好了,如果没有出错信息,则说明配置成功了,现在写个phpinfo测试下吧!

最后,附上我的/etc/nginx/sites-enable/default的配置文件,此配置文件启用了rewrite功能

server {
listen 80;
server_name localhost;

access_log /var/log/nginx/localhost.access.log;

location / {
root /var/www/nginx-default;
index index.php;

if (-f $request_filename/index.html){
rewrite (.*) $1/index.html break;
}
if (-f $request_filename/index.php){
rewrite (.*) $1/index.php;
}
if (!-f $request_filename){
rewrite (.*) /index.php;
}

}

#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/nginx-default;
}

# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ .php$ {
#proxy_pass http://127.0.0.1;
#}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/nginx-default$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}

# deny access to .htaccess files, if Apache’s document root
# concurs with nginx’s one
#
#location ~ /.ht {
#deny all;
#}
}

# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
#listen 8000;
#listen somename:8080;
#server_name somename alias another.alias;

#location / {
#root html;
#index index.html index.htm;
#}
#}

# HTTPS server
#
#server {
#listen 443;
#server_name localhost;

#ssl on;
#ssl_certificate cert.pem;
#ssl_certificate_key cert.key;

#ssl_session_timeout 5m;

#ssl_protocols SSLv2 SSLv3 TLSv1;
#ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
#ssl_prefer_server_ciphers on;

#location / {
#root html;
#index index.html index.htm;
#}
#}

LAMP在windows下的搭建!

不知道为什么,其实对php也算有点认识了,但一直没有写个文档什么的,所以趁这次环境准备的机会专用写作记录。
一、程序准备:
1、apache_2.2.9-win32-x86-no_ssl-r2.msi
2、php-5.2.6-Win32.zip
3、mysql-5.0.67-win32.zip
二、环境准备
1、安装apache后,首先访问http://127.0.0.1
看看是不是有显示it work!
然后备份C:Program FilesApache Software FoundationApache2.2confhttpd.conf
并打开这个配置文件httpd.conf
:找到三个地方,根目录、目录、索引页,配置相关的目录:

DocumentRoot "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs"

<Directory "C:/Program Files/Apache Software Foundation/Apache2.2/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

#
# 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 None

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

</Directory>

还有

<IfModule dir_module>
DirectoryIndex index.html
</IfModule>

即可作基本的WEB服务!
2、php配置

1)针对php.ihi:
找到 php.ini-dist或php.ini-recommended,改其改成php.ini
修改配置如下
1> 有一个“register_globals = Off”值,这个值是用来打开全局变量的,比如表单送过来的值,如果这个值设为“Off”,就只能用“$_POST['变量名']、$_GET['变量名 ']”等来取得送过来的值,如果设为“On”,就可以直接使用“$变量名”来获取送过来的值,当然,设为“Off”就比较安全,不会让人轻易将网页间传送的数据截取。这个值是否改成“On”就看自己感觉了,是安全重要还是方便重要?
2>这里还有一个地方要编辑,功能就是使php能够直接调用其它模块,比如访问mysql,选择要加载的模块,去掉前面的 “;”,就表示要加载此模块了,加载的越多,占用的资源也就多一点,不过也多不到哪去,比如我要用mysql,就要把“;extension= php_mysql.dll”前的“;”去掉。所有的模块文件都放在php解压缩目录的“ext”之下,如“ext”目录下默认没有此模块,加载会提示找不到文件而出错。一般不需要加载需要的就可以了,编辑好后保存,关闭。

如果上一步加载了其它模块,就要指明模块的位置,否则重启Apache的时候会提示“找不到指定模块”的错误,这里介绍一种最简单的方法, 直接将php安装路径、里面的ext路径指定到windows系统路径中——在“我的电脑”上右键,“属性”,选择“高级”标签,点选“环境变量”,在“系统变量”下找到“Path”变量,选择,双击或点击“编辑”,将“;c:php;c:phpext”加到原有值的后面,当然,其中的“c:php” 是我的安装目录,你要将它改为自己的php安装目录,如下图所示,全部确定。系统路径添加好后要重启电脑才能生效,可以现在重启,也可以在所有软件安装或配置好后重启。

2)针对httpd.conf
1>现在开始将php以module方式与Apache相结合,使php融入Apache,照先前的方法打开Apache的配置文件,在LoadModule最后添加:第一行“LoadModule php5_module c:/php/php5apache2.dll”是指以module方式加载php,第二行“PHPIniDir "c:/php"”是指明php的配置文件php.ini的位置,是当然,其中的“c:/php”要改成你先前选择的php解压缩的目录。

2>加入“AddType application/x-httpd-php .php”、“AddType application/x-httpd-php .html”两行,你也可以加入更多,实质就是添加可以执行php的文件类型,比如你再加上一行“AddType application/x-httpd-php .htm”,则.htm文件也可以执行php程序了,你甚至还可以添加上一行“AddType application/x-httpd-php .txt”,让普通的文本文件格式也能运行php程序。

3>在DirectoryIndex “index.php”设为默认索引文件
<IfModule dir_module>
DirectoryIndex index.html,index.php
</IfModule>

现在,php的安装,与Apache的结合已经全部完成,用屏幕右下角的小图标重启Apache,你的Apache服务器就支持了php。
编写以下代码保存为index.php,放在根目录下。OK了吧,可以看到蓝色的php信息网页了。

<?php
phpinfo();
?>

3、mysql配置
一般默认setup.exe安装即可。注意字符集设置!中文要么用GBK或UTF-8.

这里就是与php.ini里设置第2>部分,增加“;extension= php_mysql.dll”即可。

都安装完全后,开始试用程序,发现mysql无法使用,安装phpmywind显示:
问题一、无法载入mysql扩展,请检查PHP 配置
修改php.ini的extension_dir = "./"为extension_dir = "C:phpext"
可能是之前的变量没有生效的原因???

Windows Server 2008系统中的PHP运行环境搭建

PHP;Apache;MySQL;PHPMyAdmin;Zend Optimizer在Windows Server 2008系统中的PHP运行环境搭建和配置。

选择安装的目录(目录名称中不要含有空格,避免不必要的麻烦或错误)

安装php
下载PHP程序,直接给php(PHP不用安装)压缩包解压到选定的文件夹即可。

安装apache
如已安装IIS,需要修改IIS端口。下载apache程序,解压文件,同意协议,一路Next,中间会出现:Server Information这一步,往Network Domain、Server Name中填写:localhost(写其它的也没什么影响),选择默认选项,Next,选择Custom,Next,安装功能为默认。安装地址可以自行选定,Next,Install,便开始安装。

安装结束后,在浏览器地址栏中输入:http://localhost/或http://127.0.0.1/会出一个默认界面,如:It works!便证明apache安装成功。同时任务栏右下角会新多出一个小图标,通过点击该图标,可以停止、启动、重启apache服务器。

php和apache的配置
打开php安装目录,找到:php.ini-recommended将其重命名为:php.ini保存,打开找到:
extension=php_gd2.dll
extension=php_mbstring.dll
extension=php_mhash.dll
extension=php_mime_magic.dll
extension=php_ming.dll
extension=php_mysql.dll
去掉前面的 ;(分号)便加注了相关模块,也可以根据自己的需要进行配置。保存。

设置程序变量:Computer>properties > Advanced system settings > Advanced > Environment Varibles > System variables > Path > Edit给php、phpext、mysqlbin使用分号隔开,添加进去(根据安装的目录添加盘符,如:D:php;)。如果觉得麻烦也可以给php目录底下的.dll文件复制到