Windows撰写的日志

php+gettext多多语言的探讨

Web程序中使用php-gettext做多语言的探讨
一直在开发LAP电子商城系统,很多国内客户做外贸生意,不仅需要中英文,还通常要翻译成德文;研究了下php-gettext做多语言方案。写出来和大家分享下。
1,php-gettext的安装
1.1 gettext扩展在php5.2默认是开启的。
1.2 如果没开启,windows用户印象中是在php.ini开启php_gettext.dll扩展。
1.3 ubuntu系统中安装扩展很方便。sudo apt-get install php-gettext
1.4 如果服务器(如centos)是自己编译安装的。如果编译的时候没有–with-gettext.需要phpize编译安装gettext
进入php源码包,如 cd /usr/local/src/php/ext/gettext
phpize //运行后此目录下多出了一些configure文件
make
make install
按提示。将生成的gettext.so文件写入到php.ini中。如 extension=gettext.so;
重启 /etc/init.d/apache restart
2,php-gettext的使用.以一个具体的例子说明
如果debian系列的linux用户,注意查看本地语言支持。 vim /usr/share/i18n/SUPPORTED
中文:zh_CN.UTF-8
英文:en_US.UTF-8
德文:de_DE.UTF-8
法文:fr_FR.UTF-8
如果没有,则相应的安装之。方法:sudo apt-get locale-gen zh_CN.UTF-8
在php程序中,可以使用gettext()来标记需要翻译的语言包,gettext()函数常用_()代替;
2.1 建立文件目录
mkdir gettext
cd gettext
touch Locale.php
touch test.php
//中文mo文件的地方.
mkdir -p Locale/zh_CN/LC_MESSAGES
//英文文mo文件的地方.
mkdir -p Locale/en_US/LC_MESSAGES
2.2 Locale.php文件代码

View Code PHP<?php
/**
* Dh_Locale 语言包类
*
* 系统语言包采用的是php-gettext模块.
* 如果模板使用的是smarty.使用了smarty-gettext插件.插件地址http://sourceforge.net/projects/smarty-gettext/
* php-gettext的安装和使用(ubuntu平台下)
* 1 Installation of gettext package: sudo apt-get install php-gettext
* 2 Install locales: see all locales More >

windows xp 磁盘安装 ubuntu 10.04 方法

ubuntu 10.04 也发布一段时间了相信很多人都迫不及待了,ubuntu 10.04是一个长期支持的版本。
安装方法有三种。

通过 ubuntu 9.10 直接升级到10.04不过的更新起来比较慢,但是可以保留之前一些软件的配置,还是值得一试。
通过向官方申请 ubuntu 10.04 安装光盘。然后通过光盘安装就是了,不过申请光盘是需要时间的,相信很多人都没这个耐心吧。当然也可以通过下载ubuntu 10.04 镜像文件,然后自己刻录ubuntu 10.04 安装盘。
通过引导进行磁盘安装。

上面第一和第二种都是很普通的方法。下面就讲解一下磁盘安装方法吧。

准备工作

下载 grub4dos-0.4.4-2009-06-20.zip 选择一个版本 本人选择的是grub4dos-0.4.4。
下载ubuntu-10.04-desktop-i386.iso 文件.下载地址见:http://www.blags.org/ubuntu-10-04-lts-release/.

配置引导

右击 我的电脑->属性->高级->启动和故障恢复->设置->编辑
在最后面加上 C:\grldr=”install ubuntu 10.04 ” ,当然也可以直接 开始 ->运行 (c:/boot.ini) 进行编辑,不过要修改一下boot.ini文件的可写属性。
接下来将下载的 grub4dos-0.4.4-2009-06-20.zip 里面文件 解压至c盘,是整个解压至c不是解压目录至c
复制下载下来的 ubuntu-10.04-desktop-i386.iso 镜像文件至c盘。同时解压ubuntu-10.04-desktop-i386.iso 里面的 .disk文件,casper 下的initrd.lz ,vmlinuz 解压至c盘。
编辑c:/menu.lst 在最后加上这段
title Install Ubuntu 10.04
find –set-root /ubuntu-10.04-desktop-i386.iso
kernel /vmlinuz boot=casper iso-scan/filename=/ubuntu-10.04-desktop-i386.iso locale=zh_CN.UTF-8
initrd /initrd.lz
保存.

重启windows.

会出现一个windows xp 和 install ubuntu 10.04 的选项。选择 More >

lamp 是什么

LAMP是一个缩写(linux apache mysql php[perl,python]),起源于英国,它指一组通常一起使用来运行动态网站或者服务器的自由软件.
Linux,操作系统;
Apache,网页服务器;
MySQL,数据库管理系统(或者数据库服务器);
PHP 和有时 Perl 或 Python,脚本语言。
虽然这些开放源代码程序本身并不是专门设计成同另几个程序一起工作的,但由于它们的廉价和普遍,这个组合开始流行(大多数Linux发行版本捆绑了这些软件)。当一起使用的时候,它们表现的像一个具有活力的解决方案包。
LAMP包的脚本组件中包括了CGIweb接口,它在90年代初期变得流行。这个技术允许网页浏览器的用户在服务器上执行一个程序,并且和接受静态的内容一样接受动态的内容。程序员使用脚本语言来创建这些程序因为它们能很容易有效的操作文本流,甚至当这些文本流并非源自程序自身时也是。正是由于这个原因系统设计者经常称这些脚本语言为胶水语言。
Michael Kunze 在一篇为德国电脑杂志c’t(1998,第12期,230页)而写的文章中使用了缩略语 LAMP。这篇文章意在展示一系列的自由软件成为了商业包的替换物。由于IT世界众所周知的对缩写的爱好,Kunze提出LAMP这一容易被市场接受的术语来普及自由软件的使用。
O’Reilly和MySQL AB在英语人群中普及了这个术语。的确,MySQL AB 自己的市场推广在某种程度上基于LAMP包的推广。其他的项目和厂商则推行这个术语的一些变体,包括:
LAPP(以PostgreSQL 替代 MySQL).
LAMP(最后两个字母意味着 Middleware 和 PostgreSQL).
WAMP(以 Microsoft Windows 替代 Linux).
MAMP(以 Macintosh 替代 Linux).
LAMJ 意指 JSP/servlet.
BAMP 以 BSD 替代 Linux.
WIMP 指 Microsoft Windows, Microsoft IIS,MySQL, PHP.
AMP(省略了操作系统;Apple最喜欢这个词眼[来源请求]).
XAMP(xml + apache + mysql + php).
一些人借用LAMP 来描述一类可定制组成的系统,而不是制造一系列新词,并用它来表示这些系统和统一打包的页面开发环境的不同。

ubuntu windows 文件共享

文件共享在团队合作中是比较重要的。最经和同事一起协作开发就用到了,方法贴出来把。
安装samba:
sudo apt-get install samba
sudo apt-get install smbfs
下面我们来共享群组可读写文件夹,假设你要共享的文件夹为: /home/ray/share
首先创建这个文件夹
mkdir /home/ray/share
chmod 777 /home/ray/share
备份并编辑smb.conf允许网络用户访问
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf_backup
sudo gedit /etc/samba/smb.conf
搜寻这一行文字
;security = user
用下面这几行取代
security = user
username map = /etc/samba/smbusers
若要使用用户可以匿名访问到,用下面这一行取代:
security = share
将下列几行新增到文件的最后面,假设允许访问的用户为:youuser。而文件夹的共享名为 Share
[Share]
comment = Shared Folder with username and password
path = /home/ray/share
public = yes
writable = yes
valid users = youuser
create mask = 0700
directory mask = 0700
force user = nobody
force group = More >

php 配置文件 php.ini 详细介绍

View Code PHP;;;;;;;;;;;;;;;;;
;; 关于php.ini ;;
;;;;;;;;;;;;;;;;;
; 这个文件必须命名为’php.ini’并放置在httpd.conf中PHPINIDir指令指定的目录中。
; 最新版本的php.ini可以在下面两个位置查看:
; http://cvs.php.net/viewvc.cgi/php-src/php.ini-recommended?view=co
; http://cvs.php.net/viewvc.cgi/php-src/php.ini-dist?view=co
 
;;;;;;;;;;;;
;; 语法 ;;
;;;;;;;;;;;;
; 该文件的语法非常简单。空白字符和以分号开始的行被简单地忽略。
; 章节标题(例如: [php])也被简单地忽略,即使将来它们可能有某种意义。
;
; 设置指令的格式如下:
; directive = value
; 指令名(directive)是大小写敏感的!所以"foo=bar"不同于"FOO=bar"。
; 值(value)可以是:
; 1. 用引号界定的字符串(如:"foo")
; 2. 一个数字(整数或浮点数,如:0, 1, 34, -1, 33.55)
; 3. 一个PHP常量(如:E_ALL, M_PI)
; 4. 一个INI常量(On, Off, none)
; 5. 一个表达式(如:E_ALL &amp; ~E_NOTICE)
;
; INI文件中的表达式仅使用:位运算符、逻辑非、圆括号:
; | 位或
; &amp; 位与
; ~ 位非
; ! 逻辑非
;
; 布尔标志用 On 表示打开,用 Off 表示关闭。
;
; More >

windows vim 编码自动设置

简单一句话搞定

View Code TEXTset encoding=cp936 fileencodings=ucs-bom,utf-8,cp936

windows 下安装ubuntu 9.04 双系统 方法

Ubuntu 9.04已正式发布,考虑到目前使用WindowsXP + Ubuntu双系统的用户还是比较多的,特针对9.04特性整理出下文指导新手在WinXP环境下通过硬盘安装Ubuntu 9.04。
1.下载Grub4Dos(注意:如果你想尝试Ext4文件系统,一定要下载最新的支持Ext4文件系统Grub4Dos 0.4.4版本),解压至XP的C盘根下,修改menu.lst文件,在末尾添加如下内容:
(注意:其中粗体Ubuntu-9.04-desktop-i386.iso是desktop版本,如果你下载的不是desktop版,请将其替换成你下载的镜像的文件名,如果不成功可以尝试删除menu.lst再试试。)
title Install Ubuntu
root (hd0,0)
kernel (hd0,0)/vmlinuz boot=casper iso-scan/filename=/Ubuntu-9.04-desktop-i386.iso ro quiet
splash locale=zh_CN.UTF-8
initrd (hd0,0)/initrd.gz
2.修改XP的boot.ini文件(该文件为系统文件,具有只读隐藏属性),在boot.ini末尾添加:
C:\grldr=”GRUB”
3.下载Ubuntu 9.04的desktopCD的镜像文件,下载地址参考Ubuntu 9.04官方衍生版本全集,然后将下载好的镜像文件直接放在C: ,将其中的.disk文件夹加压至C: , 将casper目录下的initrd.gz和vmlinuz这两个文件也解压至C:
4.重启计算机,选择Grub,进入Grub引导程序,选择最后一项(Install Ubuntu),稍等即可进入ubuntu的liveCD模式,此时打开一个终端,在里面输入:
sudo umount -l /iosdevice
回车,然后点击桌面上的安装图标即可完成安装过程。

PHP中多服务器共享SESSION的方法

在PHP中SESSION默认是用文件来进行保存的,如session.save_path=/tmp,则是将session数据保存在/tmp目 录下,如果并发用户量很大,在这个目录下就会存在大量类似sess_xxxxxx的session文件,导致性能下降,不少朋友可能都没有注意到 php.ini里面Session设置部分中有这样一项:
; session.save_path = “N; MODE; /path”
这项设置提供给我们可以给session存放目录进行多级散列,其中“N”表示要设置的目录级数,“MODE”表示目录的权限属性,默认为600,在WINDOWS上基本是不用设置的,*NIX上也可以不用设置,后面的“/path”表示session文件存放的根目录路径,比如我们设置为下面的格式
session.save_path = “2; d:/php5/tmp”
上面的设置表示我们把d:/php5/tmp目录作为php的session文件存放根目录,在该目录下进行两级目录散列,每一级目录分别是 0-9和a-z共36个字母数字为目录名,这样存放session的目录可以达到36*36个,相信作为单台服务器来说,这是完全够用了,如果说您的系统 架构设计为多台服务器共享session数据,可以把目录级增加到3级或者更多。
需要注意的是,php自己并不会自动创建子目录,需要您自己动手去创建,网上找到这样的自动创建目录的代码,大家可以做个参考。下面的代码自动创建3级子目录,可以自己动手根据需要进行修改。
set_time_limit(0);
$string = ‘0123456789abcdefghijklmnopqrstuvwxyz’;
$length = strlen($string);
function makeDir($param)
{
if(!file_exists($param)) {
makeDir(dirname($param));
mkdir($param);
}
}
for($i = 0; $i < $length; $i++) {
for($j = 0; $j < $length; $j++) {
for($k = 0; $k < $length; $k++) {
makeDir($string[$i].’/’.$string[$j].’/’.$string[$k]);
}
}
}
?>
多服务器共享session的方法:
1.通过NFS文件共享的方式,多台WEB服务器共享保存session文件的磁盘
2.保存在数据库中,这种方式的扩展性很强,可以随意增加WEB而不受影响
3.可以将session数据保存在memcached中,memcached是基于内存存储数据的,性能很高,用户并发量很大的时候尤其合适,参考PHP实现多服务器session共享之memcache共享
4.文件方式保存session时,可以采用php的扩展eaccelerator来存储sesion,参考
eaccelerator 应用之“使用共享内存存储Session”

php 无极分类 详解

我们在用 php 制作网站时,分类是很重要的,在分类下面又再分类这第二个分类称为次分类,而现在大多数网站分类只分到第三类:
第一分类(父分类)–>第二分类(子分类)–>第三分类(孙分类)
这种亲缘分类越多,程序和数据库的控制就越加的复杂困难.在同一级的分类处理和控制是非常的简单的,因为只需要一个数据库来记载这一级的分类就行了,如:系统,新闻等分类,在这一级上处理是很简单的,但对一个网站来说一级分类是不够的,还需要再分类,如:
系统–>linux,windows
新闻–>linux 新闻,windows 新闻
这样分类就清晰些了,至少让人明白了,系统包括 linux 和 windows,而新闻包括 linux 新闻和 windows 新闻,为了让信息资料更加清晰,于是再继续分类:
linux–>系统工具,内核,编程语言,开发工具

分类到了第三级,信息资料的处理就更清晰了,也就是说为了很清晰地处理资料,分类越详细就越方便,这样即方便处理信息又方便网友目的明确地查找到需要的资料,但随着不断的细化分类,在程序和数据库的控制上就会越来越困难.
困难一:如何在数据库里处理这些互有关联的亲缘分类?
困难二:如何用 php 完成这种一目了然的关系?
这种分级多而细的分类是每个 php 程序员都必须解决的问题,因为制作一个好而出色的网站分类问题是不可避免的,而解决这个问题又是相当复杂的,其中最大的问题就是数据库的分类处理,因为如果数据库处理不当将会带来巨大的工作量甚至是不得不重新规划数据库…
这并不是夸张,因为很多人在数据库处理上就会采用一级分类建立一个数据库的做法,我当时也是采取这种方法处理分类的,因大多网站都是分到第三级,所以数据 库里只需三个分类数据库来进行处理.但是需要继续向下分类时,这种做法的弊端就显露出来了,因为越往下分,工作量,程序量将会巨增..
我要介绍的这种方法就是如何用一个分类数据库建立无限向下分级的分类方法,用过 windows 的读者都知道 windows 文件夹就可以建立无限分级的目录,可在目录下面继续建立目录,这样没完没了的分下去,Linux 的目录创建也有这种功能,我介绍的这个方法跟这种形式相同.
数据库的规划
前面谈到分类的复杂性,因此如何规划数据库便成为了实现无限分类非常重要的一步.
我曾介绍过论坛的数据库规划,不错论坛能够实现无限的跟接,无限分类便是这种形式的扩展,分类同样是这种子父的关联关系,所以分类的数据库就是如何确立明确这种子父关系,这里面有几个难点.
1)如何处理各分类的信息存储;
2)如何处理分类的亲缘关系;
3)如何处理对信息的查询;
亲缘关系的数据库处理与论坛的数据库处理类似,这里建个 type 的数据库用来处理分类:
建立字段:
id(int):用来记录各分类的自然序号
uid(int):用来记录该分类的父分类的 id 号
type(char):类别的名称
roue_id(varchar):亲缘树,以 :0:2:10:20: 的 id 连接表明亲源关系
roue_char(varchar):亲缘树,类似 :系统:linux:开发工具:gcc: (这个字段有没有都没关系,为了更方便地了解各亲缘关系当然字符表述比数字表述更直接^o^,不过最好加上这个字段)
这样一个无限分类的类别表就建立了起来,接下来就需要建立存储信息的数据库,处理查询一个表最方便所以这里建立一个表存储信息 type_message:
id(int):信息的序号;
typeid(int):所属类别的 id 号;
title(varchar):信息标题;
message(text):信息内容;
time:信息建立的时间;
这两个数据表就能够完成无限分类的这个任务了(两个表的辅助字段就没加了,读者可自行加入).
剩下的任务就全部交由 php 来处理完成.
程序控制
实现无限分类这个功能中就属这一步最为复杂辛苦,首先看看程序需要完成的步骤:
1)创建分类上传;
2)创建信息上传;
3)明确显示各分类及其之间的关系;
4)处理查询功能;
5)如何处理编辑和删除的功能;
而这五步中最为困难的就是第五个步骤,因为对分类的编辑和删除涉及到一至性的问题.
下面我就逐一描述 php 的程序控制:
1)创建分类上传
在介绍这个功能前,先介绍一下 explode( ) 这个函数,这是个字串处理函数,用来分解字串的,具体的用法,例:
分解”0:1:2:3:4″里的数字

$val=”0:1:2:3:4″;
$rid=explode(“:”,$val);

经过 explode( ) 函数处理,$val 内的所有数字都分解到 $rid 数组中了,要引用时只需打印:echo “$rid[0],$rid[1],$rid[2]…”; 就行了.explode( ) 函数在整个分类处理中起着非常重要的作用,好现在开始介绍无现分类的程序控制.
可以假设个总分类 0 ,所有的分类都是它的子孙分类,现在来建立第一个分类”系统”,来看看它在数据库的存储形式:
id | More >

Windows 2003 IIS下配置MySQL+PHP+ISAPI_Rewrite

一.准备工作

windows 2003,自己买吧…

安装IIS 6.0:
安装系统后在”控制面板”->”添加或删除程序”->”添加/删除Windows组件”->双击”应用程序服务器”->然后选中”Internet信息服务(IIS)”->确定->安装完毕…