資料來源:http://www.kalvin.cn/study/php-api-call-bing-translation-results.html
<?php echo bingtrans('大家好,欢迎光临我的博客!'); //return: Hello, and welcome to my blog!
function bingtrans($str = '', $in = 'zh-CHS', $to = 'en', $api = 'C2D5477B17DD7DCB1391E6B4D3222F2DB8AFAE7D') {
if (empty($str)) {
return false;
}
$url = "http://api.microsofttranslator.com/v2/Http.svc/Translate?appId=" . $api . "&text=" . urlencode($str) . "&from=" . $in . "&to=" . $to;
if (function_exists('curl_init')) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$res = curl_exec($curl);
} else {
$res = @file_get_contents($url);
}
preg_match("~<string([^><]*?)>([\s\S]*?)<\/string>~i", $res, $ostr);
if (empty($ostr[2])) {
return false;
} else {
return htmlspecialchars_decode($ostr[2]);
}
} ?>
2010-12-29
2010-10-26
NoMachine Free NXServer和neatx共存
文章來源:http://yao-blog.appspot.com/
NoMachine的FreeNxServer只支持两个同时的连接,但是支持其他的声音等等功能,neatx是Google开发的NX服务器,主要是Python和少量的c代码,不限制连接数,但是没有其他高级功能,有时不稳定。这两个服务器都可以用NoMachine的免费客户端连接。
最近我尝试在一台机器上同时安装这两个服务器,灵感来自这篇博客。不过我和他的实现手法不一样。我用的操作系统是Ubuntu10.04.1。我是先安装的neatx再安装的NoMachine nxserver,安装后一个时提示我nx用户已经存在,我后来手工把nx用户删掉再重安装的。不知道先装nx的再装neatx能不能避免这个问题。
两个都装好之后修改
/etc/passwd
文件,sudo vipw
,使用NoMachine的home作为nx的主目录,修改shell为/bin/sh
。$ sudo vipw
nx:x:116:65534::/usr/NX/home/nx:/bin/sh
修改
/usr/NX/home/nx/.ssh/authorized_keys
添加command选项。(SSH可以强制登陆后执行的命令) 修改后的选项command="/usr/NX/bin/nxserver",no-port-forwarding,no-agent-forwarding ssh-dss AAAAB3NzaC1kc....
用
ssh-keygen -t dsa
生成一个新的key给neatx使用,key保存在当前目录,neatxkey和neatxkey.pub。 把公钥加入到服务器上cat neatxkey.pub >> /usr/NX/home/nx/.ssh/authorized_keys
修改对应的公钥使用neatx的nxserver。
command="/usr/bin/nxserver",no-port-forwarding,no-agent-forwarding ssh-dss AAAAB3NzaC1kc....
确认能否正常工作
yao@yao-desktop:~$ ssh -i nxkey nx@172.28.1.109
HELLO NXSERVER - Version 3.4.0-14 - LFE
NX> 105 quit
Quit
NX> 999 Bye.
Connection to 172.28.1.109 closed.
yao@yao-desktop:~$ ssh -i neatxkey nx@172.28.1.109
HELLO NXSERVER - Version 3.3.0 - GPL
NX> 105 quit
Quit
NX> 999 Bye.
Connection to 172.28.1.109 closed.
我们可以看到启动的是两个不同的nx服务器,客户端连接的时候在Configuration里有一个Keys按钮,点开可以导入不同的key。测试用不同的key启动不同的nxserver成功。
顺便说一句,neatx有时不删除session文件,导致不能连接,最后在rc.local里加入以下内容。
rm -rf /var/lib/neatx/sessions/*
2010-09-04
2010-08-17
強迫移除 MySQL Root 密碼(Linux)
- /etc/init.d/mysql stop
- /usr/sbin/mysqld --skip-grant-tables --user=root & # 啟動 MySQL
- mysql -u root # 已經可以不用密碼進入囉~
- mysql> UPDATE mysql.user SET Password=PASSWORD('') WHERE User='root'; # 將 root 密碼清掉, 或於此設定想要的密碼.
- mysql> quit
- /etc/init.d/mysql restart # 完成.
2010-07-21
轉換西元日期/民國日期
/*
名稱: 雙向轉換西元日期 - 民國日期
用法: ch_date(來源日期(民國/西元皆可), 來源日期(年月日)分隔符號[選填], 輸出日期(年月日)分隔符號[選填]);
範例: echo ch_date(2006/12/31,'/','-'); // output: 95-12-31
備註: 直接呼叫,將輸出目前民國年份
*/
function ch_date($date="", $from="", $to="") {
if (!$date) $date = date('Ymd');
$m = substr($date,-4,2);
$d = substr($date,-2,2);
if ($from) {
if (strlen(@ereg_replace($from,'',$date))>7) {
$mode = 1;
} else $mode = 2;
} else {
if (strlen($date)>7) {
$mode = 1;
} else $mode = 2;
}
switch ($mode) {
case "1":
if ($from == '') {
$y = substr($date,0,4)-1911;
} else {
$tok = explode($from,$date);
$y = $tok[0]-1911;
$m = $tok[1];
$d = $tok[2];
}
break;
case "2":
if ($from == '') {
if (strlen($date)==7) {
$y = substr($date,0,3)+1911;
} else $y = substr($date,0,2)+1911;
} else {
$tok = explode($from,$date);
$y = $tok[0]+1911;
$m = $tok[1];
$d = $tok[2];
}
break;
}
$date = $y.$to.$m.$to.$d;
return $date;
}
名稱: 雙向轉換西元日期 - 民國日期
用法: ch_date(來源日期(民國/西元皆可), 來源日期(年月日)分隔符號[選填], 輸出日期(年月日)分隔符號[選填]);
範例: echo ch_date(2006/12/31,'/','-'); // output: 95-12-31
備註: 直接呼叫,將輸出目前民國年份
*/
function ch_date($date="", $from="", $to="") {
if (!$date) $date = date('Ymd');
$m = substr($date,-4,2);
$d = substr($date,-2,2);
if ($from) {
if (strlen(@ereg_replace($from,'',$date))>7) {
$mode = 1;
} else $mode = 2;
} else {
if (strlen($date)>7) {
$mode = 1;
} else $mode = 2;
}
switch ($mode) {
case "1":
if ($from == '') {
$y = substr($date,0,4)-1911;
} else {
$tok = explode($from,$date);
$y = $tok[0]-1911;
$m = $tok[1];
$d = $tok[2];
}
break;
case "2":
if ($from == '') {
if (strlen($date)==7) {
$y = substr($date,0,3)+1911;
} else $y = substr($date,0,2)+1911;
} else {
$tok = explode($from,$date);
$y = $tok[0]+1911;
$m = $tok[1];
$d = $tok[2];
}
break;
}
$date = $y.$to.$m.$to.$d;
return $date;
}
2010-06-22
2010-06-11
2010-06-10
2010-06-09
PHP function: 壓縮 CSS file
<?php
/**
* Converts a CSS-file contents into one string
* Source Code: http://snippets.dzone.com/posts/show/4137
* @Author: Dmitry-Sh http://snippets.dzone.com/user/Dmitry-Sh
*
* @param string $t Text data
* @param int $is_debug Skip convertion
* @return string Optimized string
*
/
/**
* Converts a CSS-file contents into one string
* Source Code: http://snippets.dzone.com/posts/show/4137
* @Author: Dmitry-Sh http://snippets.dzone.com/user/Dmitry-Sh
*
* @param string $t Text data
* @param int $is_debug Skip convertion
* @return string Optimized string
*
/
2010-06-03
MySQL: UNION和UNION ALL
在資料庫中,UNION和UNION ALL關鍵字都是將兩個結果集合並為一個,但這兩者從使用和效率上來說都有所不同。
MySQL中的UNION
UNION在進行錶鏈接後會篩選掉重複的記錄,所以在錶鏈接後會對所產生的結果集進行排序運算,刪除重複的記錄再返回結果。實際大部分應用中是不會產生重複的記錄,最常見的是過程表與歷史表UNION。如:
UNION在進行錶鏈接後會篩選掉重複的記錄,所以在錶鏈接後會對所產生的結果集進行排序運算,刪除重複的記錄再返回結果。實際大部分應用中是不會產生重複的記錄,最常見的是過程表與歷史表UNION。如:
select * from users1 union select * from user2
這個SQL在運行時先取出兩個表的結果,再用排序空間進行排序刪除重複的記錄,最後返回結果集,如果表資料量大的話可能會導致用磁片進行排序。
MySQL 中的UNION ALL
而UNION ALL只是簡單的將兩個結果合併後就返回。這樣,如果返回的兩個結果集中有重複的資料,那麼返回的結果集就會包含重複的資料了。
從效率上說,UNION ALL 要比UNION快很多,所以,如果可以確認合併的兩個結果集中不包含重複的資料的話,那麼就使用UNION ALL,如下:
而UNION ALL只是簡單的將兩個結果合併後就返回。這樣,如果返回的兩個結果集中有重複的資料,那麼返回的結果集就會包含重複的資料了。
從效率上說,UNION ALL 要比UNION快很多,所以,如果可以確認合併的兩個結果集中不包含重複的資料的話,那麼就使用UNION ALL,如下:
select * from user1 union all select * from user2
2010-04-09
2010-02-01
MySQL -- 找出重複資料
SELECT a.ad13_area_code, a.ad13_city_name
FROM ad13 a, ad13 b
WHERE a.ad13_area_code = b.ad13_area_code
GROUP BY 1 , 2
HAVING count( a.ad13_area_code ) >1
FROM ad13 a, ad13 b
WHERE a.ad13_area_code = b.ad13_area_code
GROUP BY 1 , 2
HAVING count( a.ad13_area_code ) >1
2010-01-08
如何在php中修補XSS漏洞
在PHP中修补XSS漏洞,我们可以使用三个PHP函数。
这些函数主要用于清除HTML标志,这样就没办法注入代码了。使用更多的函数是htmlspecialchars() ,它可以将所有的"<"与">"符号转换成"<" 与">;"。其它可供选择的函数还有htmlentities(), 它可以用相应的字符实体(entities)替换掉所有想要替换掉的特征码(characters)。
PHP Code:
这些函数主要用于清除HTML标志,这样就没办法注入代码了。使用更多的函数是htmlspecialchars() ,它可以将所有的"<"与">"符号转换成"<" 与">;"。其它可供选择的函数还有htmlentities(), 它可以用相应的字符实体(entities)替换掉所有想要替换掉的特征码(characters)。
PHP Code: