FreeBAPP 分类中的最新日记

想找一个免费的跨平台代码编辑器,可以编写PHP代码就可以,但要支持FTP编辑,这样开发就也方便了,上班也可以,下班回家也可以。PSpad是不错,FTP编辑的功能不错,但是不能跨平台,是WIN应用的软件。其他的基本也是如此,很难实现跨平台,包括收费的。

有人介绍 PHPanywhere ,是B/S结构软件,跨平台没有问题,只要有游览器就可以了!但有致命的缺陷,就是要托管给PHPanywhere,你放心吗?我不放心,FTP的用户名和密码啊,高度危险啊!

而且,大陆客户用PHPanywhere速度超慢!速度很重要!

所以,PHPanywhere不可以做为开发工具!

onlinephpeditor_screenshot.jpg



宿主机:WinXP sp3
VirtualBox 2.2.2
FreeBSD7.1-release

在XP下安装和使用VBOX我就不多说了,中文界面,很简单,比较傻瓜。注意的是VBOX只支持固定大小不超过4GB的虚拟硬盘,所以我就用3.99GB。

把FreeBSD7.1-release的ISO文件虚拟光驱,然后安装,方法同普通安装一致,见:http://wangblog.org/2008/09/freebsd.html

安装完成后,原本3.99GB的虚拟硬盘太小,我们在VBOX里再挂载一个虚拟硬盘。/usr/ports 是比较占空间的,同时在编译期间会占用很多空间,我们把 /usr/ports 挂载到另一个虚拟硬盘。
# dmesg
# mkdir /disk1
# mount /dev/ad1s1d /disk1
# ee /etc/fatab
添加
/dev/ad1s1d /disk1 ufs rw 3 3

# mkdir /disk1/usr
# cd /disk1/usr
# mv -i /usr/ports ./
# ln -s /disk1/usr/ports /usr/ports

虚拟机安装 FreeBSD用编译方法安装软件比较耗时耗资源,我们更多的采用pkg_add的方法。因此要加速。
# ee /root/.cshrc
添加
setenv PACKAGESITE ftp://ftp.jp.freebsd.org/pub/FreeBSD/ports/i386/packages-7.1-release/Latest/
注:ftp.jp.freebsd.org比较新,比较全,速度也可以。ftp.cn.freebsd.org速度好,但是更新慢。ftp.kr.freebsd.org也可以。

# source /root/.cshrc

如果要使用桌面的话,请用xfce,更轻巧。
# pkg_add -r xfce4
# cd /usr/ports/chinese/scim-pinyin/ && make install clean
# ee ~/.cshrc
添加
setenv LANG zh_CN.eucCN
setenv LC_CTYPE zh_CN.eucCN
setenv XMODIFIERS @im=SCIM
setenv GTK_IM_MODULE scim
# source ~/.cshrc
# echo "exec /usr/local/bin/scim &" >> ~/.xinitrc
# echo "exec /usr/local/bin/startxfce4" >> ~/.xinitrc
# pkg_add -r opera
# startx

桌面的中文化可以参考:http://wangblog.org/2008/10/freebsd-1.html

虚拟机安装FreeBSD,跟宿主机连接的方法:
设置 => 网络 => 连接方式:Bridged Adapter
虚拟机安装FreeBSD,跟宿主机连接的方法

VBOX作为开源的虚拟机系统,虽然占用CPU经常100%,但也比到处找破解方法的VM好!

鄙视收费软件!

鄙视有开源的替代软件,还强迫自己用破解收费软件的...
session_set_save_handler(
"sess_open",
"sess_close",
"sess_read",
"sess_write",
"sess_destroy",
"sess_gc");

以上完成了sessions的自定义,sess_gc是处理垃圾回收的。

sess_gc在sessions中是指清理过期的session数据,影响的参数有:session.gc_maxlifetime被视为垃圾前的生存期,超过此时间没有动作,数据会被清走。

注意的是,gc不是每次启动会话都会被执行,而是由session.gc_probability 和 session.gc_divisor的比率决定的。如果session.gc_probability 和 session.gc_divisor 都设为1的话,即每次都执行!

Google的OpenID

| 评论(24) | 引用通告(2)
上次写了Windows Live ID当作OpenID使用的方法,这次写Google的OpenID的实现方法。

if(empty($_REQUEST['openid_mode'])){
$openid_server = getXrdsUri('https://www.google.com/accounts/o8/id');
$data['openid.ns'] = 'http://specs.openid.net/auth/2.0';
$data['openid.mode'] = 'associate';
$data['openid.assoc_type'] = 'HMAC-SHA1';
$data['openid.session_type'] = 'no-encryption';
$AssocHandle = getAssociationHandle($openid_server.'?'.http_build_query($data));
setcookie('cookieAssocHandle', $AssocHandle);
unset($data);

$data['openid.ns'] = 'http://specs.openid.net/auth/2.0';
$data['openid.claimed_id'] = 'http://specs.openid.net/auth/2.0/identifier_select';
$data['openid.identity'] = 'http://specs.openid.net/auth/2.0/identifier_select';
$data['openid.return_to'] = $AuthUrl;
$data['openid.realm'] = $RealmUrl;
$data['openid.assoc_handle'] = $AssocHandle;
$data['openid.mode'] = 'checkid_setup';
$data['openid.ns.ext1'] = 'http://openid.net/srv/ax/1.0';
$data['openid.ext1.mode'] = 'fetch_request';
$data['openid.ext1.type.email'] = 'http://axschema.org/contact/email';
$data['openid.ext1.required'] = 'email';

$LocationUrl = $openid_server.'?'.http_build_query($data);
}else{
if('id_res' == $_REQUEST['openid_mode']
&& $AssocHandle == $_REQUEST['openid_assoc_handle']){
$openid = !empty($_REQUEST['openid_ext1_value_email']) ? $_REQUEST['openid_ext1_value_email'] : formUrl($_REQUEST['openid_claimed_id']);
$email = $_REQUEST['openid_ext1_value_email'];
}
echo('<pre>');
echo("<a href=$LoginUrl>BACK</a>\n\n");
print_r($_REQUEST);
echo('</pre>');
}

function getAssociationHandle($url){
$c = curl_init($url);

curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
curl_setopt($c, CURLOPT_HEADER, false);
curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false);

$contents = curl_exec($c);
//print_r($contents);
//exit;

curl_close($c);

$assoc_handle = time();

$lines = explode("\n", $contents);

foreach($lines as $line){
if(substr($line, 0, 13) == "assoc_handle:"){
$assoc_handle = substr($line, 13);
break;
}
}

return $assoc_handle;
}

function getXrdsUri($url){
$c = curl_init($url);

curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
curl_setopt($c, CURLOPT_HEADER, false);
curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false);

$request_contents = curl_exec($c);

curl_close($c);

$domdoc = new DOMDocument();
$domdoc->loadXML($request_contents);

$uri = $domdoc->getElementsByTagName("URI");
$uri = $uri->item(0)->nodeValue;

return $uri;
}

if(empty($openid))
LocationHtml($LocationUrl);

LocationHtml函数见Windows Live ID当作OpenID使用的方法

注意:Google的OpenID的openid.claimed_id(即OpenID)的值,随不同网站变化,网站不同值也不同,所以不是真正的OpenID,Google真正的OpenID是他的Email。但是Email也不是每次都可以取得到的,如果你在Google的授权页面上点选了"允许 XXX 记住我",再次登录时将略过授权页面,同时也将得不到Email的值。只有Google帐号的所有者在个人设置里更改获授权网站,将你的网站撤销访问权,才能再次得到Email的值。

Google的OpenID是个被阉割的OpenID,除了提供Email的值之外,其他一概不提供!

参考:http://code.google.com/intl/zh-CN/apis/accounts/docs/OpenID.html
# mkdir -m 700 /usr/local/etc/apache22/ssl.crt
# mkdir -m 700 /usr/local/etc/apache22/ssl.csr
# mkdir -m 700 /usr/local/etc/apache22/ssl.key
# cd ~
# openssl req -new -x509 -nodes -out server.crt -keyout server.key
当要求输入主机名时,输入正确的域名。(Common Name put the hostname (fully qualified domain name) of your computer.)

# cp server.crt /usr/local/etc/apache22/ssl.crt/server.crt
# cp server.key /usr/local/etc/apache22/ssl.key/server.key
# chmod 400 /usr/local/etc/apache22/ssl.crt/server.crt
# chmod 400 /usr/local/etc/apache22/ssl.key/server.key

# ee /usr/local/etc/apache22/httpd.conf
把#Include etc/apache22/extra/httpd-ssl.conf前面的#去掉。

# ee /usr/local/etc/apache22/extra/httpd-ssl.conf
设置正确的SLCertificateFile,SSLCertificateKeyFile

# apachectl configtest
# apachectl restart

https://域名/

注意:自签名的SSL证书会有认证提示的,购买的就没有提示了!

参考:http://lamp.linux.gov.cn/Apache/ApacheMenu/ssl/ssl_faq.html#aboutcerts
Mr Wang

王炜,现在福建泉州从事 B2C 电子商务。爱好编程,业余时间在 FreeBSD / Apache / PHP / PostgerSQL 平台开发 B/S 架构的免费软件。

订阅Feed 订阅 王炜's Blog

Follow Google Buzz Twitter Facebook LinkedIn Sina

收藏王炜's Blog

关于此归档

这里是分类FreeBAPP中的最新日记。

上一个分类Finance

下一个分类FreeBSD

首页归档页可以看到最新的日记和所有日记。