终于找到一款FreeBSD下的wordpress编辑工具:Drivel
终于找到一款FreeBSD下的PHP编辑器NetBeans,并且安装成功。
用itouch发篇文章试试…
PHP 5.1 发布时附带一个全新的数据库连接层PDO(PHP Data Objects)。它与ADODB和Pear DB等数据库抽象层不同,它提供的是如何存取数据库和处理查询结果,效率也更高,还可以通过预处理语句来防止sql注入。
目前支持的数据库:
• DBLIB: FreeTDS / Microsoft SQL Server / Sybase
• Firebird (http://firebird.sourceforge.net/): Firebird/Interbase 6
• MYSQL (http://www.mysql.com/): MySQL 3.x/4.x
• OCI (http://www.oracle.com): Oracle Call Interface
• ODBC: ODBC v3 (IBM DB2 and unixODBC)
• PGSQL (http://www.postgresql.org/): PostgreSQL
• SQLITE (http://www.postgresql.org/): SQLite 3 and SQLite 2
1. 连接数据库
PDO提供了统一的接口:PDO对象。
$db=new PDO(
“driver_name:dbname=db_name;host=hostname/IP;[charset=char_type]“, //(1)连接字符串
“db_username”, //(2)db用户名
“db_password” //(3)db密码
);
说明,PDO有三个参数
(1)连接字符串:
driver_name是使用的PDO驱动,可以为:mysql, mssql, sybase, dblib, firebird, oci, odbc, pgsql, sqlite, sqlite2;
db_name是数据库名称;
hostname/IP是指要连接到哪里,如果是本地则为localhost。
[charset=char_type]是可选的,用来设置字符类型。
(2)db用户名
(3)db密码
example:
$db = new PDO(
“pgsql:dbname=pdo;host=localhost;charset=utf-8″,
“postgres8″,
“postgres8″
);
echo “Successfully created a PDO object”;
?>
连接之前,应先确认已经加载了PDO模块。如果试图处理一个无效的连接字符串:
$db = new PDO(
“this_is_not_a_pdo_module:dbname=pdo;host=localhost”,
“foo”,
“bar”
);
echo “Successfully created a PDO object”;
?>
PHP将会返回以下错误:
Fatal error: Uncaught exception ‘PDOException’ with message ‘could not find driver’
所以,我们可以用一种优雅的方式来处理,即抛出PDO异常来处理错误(但并不是所有情况都是)。
try
{
$db = new PDO(
“this_is_not_a_pdo_modul:dbname=pdo;host=localhost”,
“postgres8″,
“postgres8″
);
}
catch( PDOException $e )
{
die( $e->getMessage() );
}
echo “Successfully created a PDO object”;
?>
我们会得到
could not find driver
或
SQLSTATE[HY000] [7] FATAL: database “pdo2″ does not exist
如果数据库不存在(不同的错误会返回不同的提示信息)。
2. 设置属性
1) PDO有三种错误处理方式:
• PDO::ERRMODE_SILENT不显示错误信息,只设置错误码
• PDO::ERRMODE_WARNING显示警告错
• PDO::ERRMODE_EXCEPTION抛出异常
可通过以下语句来设置错误处理方式为抛出异常
$db->setAttribute(PDO::ATTR_ERRMODE, );
example:
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
当设置为PDO::ERRMODE_SILENT时可以通过调用errorCode() 或errorInfo()来获得错误信息,当然其他情
况下也可以。
2) 因为不同数据库对返回的字段名称大小写处理不同,所以PDO提供了PDO::ATTR_CASE设置项(包括
PDO::CASE_LOWER,PDO::CASE_NATURAL,PDO::CASE_UPPER),来确定返回的字段名称的大小写。
3) 通过设置PDO::ATTR_ORACLE_NULLS类型(包括PDO::NULL_NATURAL,PDO::NULL_EMPTY_STRING,
PDO::NULL_TO_STRING)来指定数据库返回的NULL值在php中对应的数值。
3. 查询
为了说明清楚,我们这里定义了一个RSS feeds表
id integer
name character varying(100)
url varharacter varying(255)
feed character varying(255)
不使用预处理语句的方式:
$stmt=$db->query(“select * from feeds”);
while($f=$stmt->fetch()){
echo $f["id"].” “;
echo $f["name"].” “;
echo $f["url"].” “;
echo $f["feed"].”
“;
};
/*使用foreach 获取数据
foreach( $db->query( “SELECT * FROM feeds” ) as $row )
{
print_r( $row );
}
*/
?>
得到以下结果:
Array
(
[id] => 1
[0] => 1
[name] => Planet-PHP
[1] => Planet-PHP
[url] => http://www.planet-php.net
[2] => http://www.planet-php.net
[feed] => http://www.planet-php.net/rdf/
[3] => http://www.planet-php.net/rdf/
)
(只显示已行为了节省空间)
使用预处理语句的方式:
$stmt = $db->prepare( “SELECT * FROM feeds” );
$stmt->execute();
print_r( $stmt->fetch() );
?>
这里,$stmt是一个PDOStatement对象,预处理之后会得到这样一个对象,必须execute后才起作用。
fetch函数只提取了一行数据,如果需要读取全部数据,可换成fetchAll函数。
绑定数据
$stmt = $db->prepare( “SELECT * FROM feeds WHERE url = :url” );
$url = “http://www.planet-php.net”;
$stmt->bindParam( “:url”, $url );
$stmt->execute();
while( $row = $stmt->fetch() )
{
print_r( $row );
}
?>
这里,bindParam将$url变量绑定到了:url域,执行时会自动将改变量载入。
插入数据
$stmt = $db->prepare(
“INSERT INTO feeds
( name, url, feed )
VALUES
( :name, :url, :feed )”
);
$stmt->execute(
array(
“:name” => “Planeti Apache”,
“:url” => “http://www.planetapache.org”,
“:feed” => “http://www.planetapache.org/rss10.xml”
)
);
?>
实现插入数据也可以像绑定数据一样来quote数据,这里给出通过在execute中给定输入参数来自动quote
的方法。
事务处理
$dbh->beginTransaction();
try {
$dbh->query(“UPDATE …”);
$dbh->query(“UPDATE …”);
$dbh->commit();
} catch (Exception $e) {
$dbh->rollBack();
}
如果数据库支持事务处理,调用beginTransaction的同时将数据库设置为非自动提交,commit或rollBack
返回自动提交状态。
4. 存储过程
$stmt = $dbh->prepare(“CALL sp_set_string(?)”);
$stmt->bindParam(1, $str);
$str = ‘foo’;
$stmt->execute();
于先前的例子差不多,只是这里使用了“?”数据绑定方法,sp_set_string是存储过程名称。
带有输出参数的存储过程
$stmt = $dbh->prepare(“CALL sp_get_string(?)”);
$stmt->bindParam(1, $ret,PDO:ARAM_STR, 4000);
if ($stmt->execute()) {
echo “Got $retn”;
}
绑定列输出
$stmt = $dbh->prepare(“SELECT extension, name from CREDITS”);
if ($stmt->execute()) {
$stmt->bindColumn(‘extension’, $extension);
$stmt->bindColumn(‘name’, $name);
while ($stmt->fetch(PDO::FETCH_BOUND)) {
echo “Extension: $extensionn”;
echo “Author: $namen”;
}
}
php5提供了一种新的连接mysql的方式:mysqli。
但在网上搜索很久,没找到几个关于这个函数的中文解说,目前流行的php程序也还都是使用的mysql函数,只好自己摸索了。
先写个简单的Class,能够简单实现连接、查询,以后再慢慢完善它。
class class_mysql {
private $dbhost = ‘localhost’;
private $dbuser = ‘root’;
private $dbpasswd = ’123456′;
private $dbname = ‘testdb’;
private $link;
function __construct() {
$this->connect ();
}
function __destruct() {
$this->close ();
}
function connect(){
$this->link = new mysqli($this->dbhost, $this->dbuser, $this->dbpasswd, $this->dbname);
if (mysqli_connect_errno()) {
echo “Can’t connect to MySQL Server. Errorcode: “.mysqli_connect_error();
}
}
function query($query){
if($this->link !== false){
$mylink = $this->link;
if($result = $mylink->query($query)){
$query_result = true;
}
else {
$query_result = false;
}
}
else {
$query_result = false;
}
return $query_result;
}
function num_rows($query){
if($this->link !== false){
$mylink = $this->link;
if($result = $mylink->query($query)){
$query_result = $result->num_rows;
}
else {
$query_result = false;
}
}
else {
$query_result = false;
}
return $query_result;
}
function fetch_rows($query,&$row_num){
if($this->link !== false){
$mylink = $this->link;
if($result = $mylink->query($query)){
$row_num = $result->num_rows;
for ($i = 1; $i <= $row_num; $i++){
$query_result[$i] = $result->fetch_array(MYSQLI_ASSOC);
}
}
else {
$query_result = false;
}
}
else {
$query_result = false;
}
return $query_result;
}
function close(){
$this->link->close();
}
}
一,安装FreeBSD系统
安装系统并升级到8.0 release
编译内核,以便获得显卡,声卡,无线网卡等支持
我的电脑是IBM R52,编辑内核文件:
# ATI drives
device drm
device radeondrm
# Sound drives
device sound
device snd_ich
# Intel Wireless
device iwi
编译内核,重启电脑
二、无线网卡设置
vi /boot/loader.conf
legal.intel_iwi.license_ack=1
vi /etc/rc.conf
wlans_iwi0=wlan0
ifconfig_wlan0=”ssid linksys wepmode on weptxkey 1 wepkey 1:0xFFFFFFFFFF DHCP”
三、升级ports
cp /usr/share/examples/cvsup/ports-supfile /root/.
csup -L 2 -h cvsup.cn.freebsd.org /root/ports-supfile
四、安装xorg
vi /etc/make.conf
MASTER_SITE_OVERRIDE=ftp://ftp.FreeBSDChina.org/pub/FreeBSD/distfiles/${DIST_SUBDIR}/
USE_LINUX_BASE_PORT=f10
USE_LINUX_NONBASE_PORTS=f10
OVERRIDE_LINUX_BASE_PORT=f10
OVERRIDE_LINUX_NONBASE_PORTS=f10
cd /usr/ports/x11/xorg
make install clean
五、安装gnome2
cd /usr/ports/x11/gnome2
make install clean
六、安装输入法
1,安装SCIM输入法主程序
cd /usr/ports/textproc/scim
make install clean
2,安装五笔插件
cd /usr/ports/chinese/scim-tables
make install clean
3,安装拼音插件
cd /usr/ports/chinese/scim-pinyin
make install clean
七、配置汉化Gnome
Xong -configure
cp /root/xong.conf.new /etc/X11/xong.conf
mkdir /usr/X11R6/lib/X11/fonts/TypeFonts
把WINDOWS系统字体文件复制到/usr/X11R6/lib/X11/fonts/TypeFonts
包括mingliu.ttf
simhei.ttf
simsun.ttf(simsun.ttc重命名即可)
tahoma.ttf
tahomabd.ttf
执行命令:
fc-cache -v
vi /etc/profile
LANG=zh_CN.UTF-8
LC_ALL=zh_CN.UTF-8
export LANG LC_ALL
exec scim -d &
vi /etc/rc.conf
hald_enable=”YES”
dbus_enable=”YES”
# 开机自动启动gnome
gdm_enable=”YES”
vi /etc/fstab
proc /proc procfs rw 0 0
八、其它常用软件安装
1,QQ
vi /boot/loader.conf
linux_load=”YES”
vi /etc/rc.conf
linux_enable=”YES”
vi /etc/sysctl.conf
compat.linux.osrelease=2.6.16
cd /usr/ports/emulators/linux_base-f10
make install clean
cd /usr/ports/net-im/qq
make install clean
如果不能中文输入,执行:
/compat/linux/usr/bin/localedef -i zh_CN -f UTF-8 zh_CN
2,Firefox
cd /usr/ports/www/firefox35
make install clean
3,firefox flashplayer插件
cd /usr/ports/www/nspluginwrapper
make install clean
cd /usr/ports/www/linux-f10-flashplugin10
make install clean
ln -s /usr/local/lib/npapi/linux-f10-flashplugin/libflashplayer.so /usr/local/lib/browser_plugins/
安装插件
nspluginwrapper -v -a -i
vi /etc/fstab
linproc /usr/compat/linux/proc linprocfs rw 0 0
FreeBSD 8.0装了Linux版QQ,感觉还不错…
ATI没有freebsd的驱动。
需要在内核配置文件中加入下面两行
device drm # DRM core module required by DRM drivers
device i915drm # Intel i830 through i915
device mach64drm # ATI Rage Pro, Rage Mobility P/M, Rage XL
device mgadrm # AGP Matrox G200, G400, G450, G550
device r128drm # ATI Rage 128
device radeondrm # ATI Radeon
device savagedrm # S3 Savage3D, Savage4
device sisdrm # SiS 300/305, 540, 630
device tdfxdrm # 3dfx Voodoo 3/4/5 and Banshee
然后重新编译内核。
十二月 15th, 2009
FreeBSD7.2下Lighttpd+PHP+Mysql安装配置笔记
1 Comment, FreeBSD, MySQL, PHP, by garey, 10,832 views.1,安装mysql
cd /usr/ports/database/mysql51-server
make install clean
2,安装lighttpd
cd /usr/ports/www/lighttpd
make install clean
(默认选项)
3,安装php5
cd /usr/ports/lang/php5
make install clean
(默认选项)
4,安装php5-extensions
cd /usr/ports/lang/php5-extensions
make install clean
增加GD,MBSTRING,MCRYPT,MYSQL,MYSQLI
5,配置lighttpd
vi /usr/local/etc/lighttpd.conf
取消需要用到模块的注释,mod_rewrite,mod_access,mod_fastcgi,
mod_simple_vhost,mod_cgi,mod_compress,mod_accesslog
取消fastcgi.server的注释
fastcgi.server = ( “.php” =>
( “localhost” =>
(
“socket” => “/var/run/lighttpd/php-fastcgi.socket”,
“bin-path” => “/usr/local/bin/php-cgi”
)
)
)
另:
touch /var/log/lighttpd.access.log
touch /var/log/lighttpd.error.log
mkdir /var/run/lighttpd
chown -R www:www /var/run/lighttpd
chown www:www /var/log/lighttpd.access.log
chown www:www /var/log/lighttpd.error.log
6,启动lighttpd和mysql
vi /etc/rc.conf
增加
mysql_enable=”YES”
lighttpd_enable=”YES”
执行
/usr/local/etc/rc.d/lighttpd start
/usr/local/etc/rc.d/mysql start