最近在弄PHPRPC,才发现原来的mysql数据类不能用,在Q群上,群主建议我用单例模式实现db类,网上找来这个试试.
使用方法
$db=DbMySql::get_instance(‘localhost’,'linji’,'root’,'12345678′,’utf8′);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 | <?php class DbMySql { private $db; private $dbName; static $instance; private function __construct($dbHost, $dbName, $dbUser, $dbPwd, $charset = 'utf8') { $this -> db = mysql_connect($dbHost, $dbUser, $dbPwd) or die('Could not connect: ' . mysql_error()); $this -> select_db($dbName); $this -> query("SET NAMES $charset"); } private function __clone(){ } public static function get_instance($dbHost, $dbName, $dbUser, $dbPwd, $charset) { if(!(self :: $instance instanceof self)) { self :: $instance = new self($dbHost, $dbName, $dbUser, $dbPwd, $charset); } return self :: $instance; } /** * 查询表 * 返回一个一维数组 */ public function get_one($sql) { $query = $this -> query($sql); $rs = $this -> fetch_array($query); $this -> free_result($query); return $rs ; } /** * 查询表 * 返回一个二维数组 */ public function select($sql, $keyfield = '') { $array = array(); $result = $this -> query($sql); while($r = $this -> fetch_array($result)) { if($keyfield) { $key = $r[$keyfield]; $array[$key] = $r; } else { $array[] = $r; } } $this -> free_result($result); return $array; } /** * 修改数据 * * @param tableName $ 操作的表 * @param array $ 信息数组 * @param where $ 条件 */ function update($tableName, $array, $where = '') { if($where) { $sql = ''; foreach($array as $k => $v) { $sql .= ", `$k`='$v'"; } $sql = substr($sql, 1); $sql = "UPDATE $tablename SET $sql WHERE $where"; } else { $sql = "REPLACE INTO $tablename(`" . implode('`,`', array_keys($array)) . "`) VALUES('" . implode("','", $array) . "')"; } return $this -> query($sql); } /** * 添加数据 * * @param tableName $ 操作的表 * @param array $ 信息数组 * return int 信息id */ function insert($tableName, $array) { $this -> query("INSERT INTO $tableName(`" . implode('`,`', array_keys($array)) . "`) VALUES('" . implode("','", $array) . "')"); return $this -> insert_id(); } public function query($sql) { return mysql_query($sql, $this -> db); } public function fetch_array($query, $result_type = MYSQL_ASSOC) { return mysql_fetch_array($query, $result_type); } public function select_db($dbName) { mysql_select_db($dbName , $this -> db) or die('Could not select database'); $this -> dbName = $dbName; } public function close() { return mysql_close($this -> db); } public function free_result(& $query) { return mysql_free_result($query); } public function insert_id() { return mysql_insert_id($this -> db); } public function fetch_row($query) { return mysql_fetch_row($query); } public function affected_rows() { return mysql_affected_rows($this -> db); } public function num_rows($query) { return mysql_num_rows($query); } } ?> |
相关日志
最近在弄一个项目的API部分,想法很简单就是把数组什么序列化之后传输.今天搜索”php序列化”因为要考虑到以后其他客户端程序调用API的问题.无意中发现了这个PHPRPC.靠!这不就是我想要的东西么?还浪费了我一周,写好了大概的API接口,简单是简单了点,而且只能支持PHP自建调用.还是用成熟的东西好,再研究研究这个PHPRPC吧.
PHPRPC官方网站:http://www.phprpc.org/zh_CN/
下面是PHPRPC官方介绍:
PHPRPC 是一个轻型的、安全的、跨网际的、跨语言的、跨平台的、跨环境的、跨域的、支持复杂对象传输的、支持引用参数传递的、支持内容输出重定向的、支持分级错误处理的、支持会话的、面向服务的高性能远程过程调用协议。
目前该协议的最新版本为 3.0。该版本目前已有以下几种语言的实现:
- ASP:提供 JScript 和 VBScript 两种语言的支持。
- ActionScript:提供 ActionScript 2.0 和 ActionScript 3.0 两个版本的支持。
- Delphi/C++Builder/Kylix:提供 Delphi/C++Builder 6.0-2009 和 Kylix 客户端的支持,不但可以支持 Win32 原生程序开发,而且还支持 Linux 程序开发。
- Java:支持 JDK 1.2 以上的所有版本,它还支持 Google Android 开发包。另外,它还有单独的 J2ME 版本,支持 CLDC-1.1 和 MIDP-1.0。
- JavaScript:提供两个版本的实现,一个使用纯 Javascript 实现,另一个需要调用一个 swf 文件,两个版本都支持跨域的远程过程调用,但是使用 swf 的版本不限制参数长度,并且有更好的安全控制机制。这两个版本已经通过完整测试的浏览器包括 IE 5+,Netscape 7+,Firefox,Mozilla,Opera,Safari,Epiphany,Camino 与 Konqueror。并且纯 JavaScript 版本还通过了 Pocket IE、Opera Mini、Opera Mobile、iPhone、Android 等手持设备浏览器的测试。
- .NET:支持 .NET 框架下所有的语言(如 C#、VB.NET、VC.NET、Delphi.NET 等),并且支持目前所有版本的 .NET Framework 和 .NET Compact Framework,当然它也支持 Mono。最新版本增加了对 SilverLight 2.0 的支持。
- PHP:支持 PHP4 与 PHP5,同样支持正处于开发阶段的 PHP6。
- Python:支持 Python 2.4、2.5、2.6,而且支持在 Google App Engine 上应用。
- Ruby:该版本支持 Ruby 1.8.5 及其更高版本。服务器除了支持以 cgi、fcgi、scgi、lsapi 方式运行外,还支持以独立服务器 ( mongrel、thin、ebb 或 webrick ) 方式运行。
- Perl:目前该版本尚不成熟,有待完善。
- Lazarus(Free Pascal):移植自 Delphi 版本, 需要 Indy for Lazarus 支持。
其中 ASP、.NET、Java、Ruby、Python 和 PHP 版本除了提供客户端实现外,还提供了服务器端实现。
附:
PHP 序列化与 .NET 中其它方式序列化的效率对比
http://edu.codepub.com/2009/0101/809.php
相关日志
我们曾介绍过 10 个基于 JavaScript 的 WYSIWYG(所见即所得) 编辑器,这些 Web 编辑器可以在线编辑和处理富 Web 内容,包括格式文本,表格,图片,媒体,链接等等,非常适合集成到 CMS 网站内容管理系统中使用。本文又搜集了 22 个 Web 在线编辑器,它们基本代表了当前 Web 编辑器的现状。

1. TinyMCE

免费,开源,轻量,基于 JavaScript,高度可定制,跨平台。
2. FCKEditor

免费,开源,用户量庞大,有良好的社区支持。
3. YUI Editor

属于 Yahoo! YUI 的一部分,能输出纯净 XHTML 代码。
4. NicEdit

简单,易用,轻量,外观漂亮。
5. Kupu

开源,支持 Ajax 保存,跨平台,易于集成,由 OSCOM 推出。
非常容易部署,输出 XHTML 代码,功能丰富。
7. WebWiz RichTextEditor

这是一个商业产品,并不免费,但功能非常丰富,基于 ASP,JavaScript 和 DHTML。
8. XStandard

故名思意,这个编辑器会生成符合标准的纯净 XHTML 代码。
9. Damn Small Rich Text Editor

基于 jQuery 和 PHP 后台,非常小巧(~18K),但功能丰富。
10. WidgEditor

简单,易用,开源,即使浏览器不支持 JavaScript,仍能很好地工作。
11. Kevin Roth’s Cross Browser Rich Text Editor

一个不错的编辑器,支持皮肤,符合 XHTML 标准,跨浏览器兼容,分免费版和收费版两个版本。
12. OpenWYSIWYG

拥有许多出色的功能,容易部署,速度极快。
13. CodePlex Rich Text Editor

基于 ASP.NET,目前只支持 IE 和 Firefox。
14. FreeTextBox

集成了相册,拼写检查等功能,尤其适合 ASP.NET 项目。
15. Silverlight Rich Text Editor

适合与微软的 Silverlight 一起使用,功能丰富,不过,似乎原作者已经不再更新这个项目了。
16. BXE (Bitflux Editor)

从 2002 年以来一直开源,拥有一批非常忠实的用户和社区,据称是目前最好的 WYSIWYG 编辑器之一。
17. MarkItUp!

基于 jQuery,轻量,支持键盘快捷键,支持多种代码,包括 HTML, Textile, Wiki Syntax, Markdown, BBcode。
18. Dijit Editor for Dojo

基于 Dojo JavaScript 框架,输出干净 HTML 代码,支持插件,拥有清新的按钮。
19. EditArea

易于集成,干净代码,实时语法加亮,自动缩进,多语种支持,多实例支持,全屏模式等功能。
20. WYMeditor

输出干净的 XHTML + SCTRICT 代码,注重结构与语义,在输出结构化 XHTML 代码方面是最佳方案。
21. Whizzywig

多浏览器支持,Web 安全色选择器,支持表格,图片,Word 代码清洁,拼写检查等功能。
22. Xinha

基于BSD协议,易于部署与扩展,拥有很好的社区支持。
本文来源:http://sixrevisions.com/user-interface/rich-text-editors-for-2010-and-beyond/
相关日志
1. PHP可阅读随机字符串
此代码将创建一个可阅读的字符串,使其更接近词典中的单词,实用且具有密码验证功能。
/**************
*@length - length of random string (must be a multiple of 2)
**************/
function readable_random_string($length = 6){
$conso=array("b","c","d","f","g","h","j","k","l",
"m","n","p","r","s","t","v","w","x","y","z");
$vocal=array("a","e","i","o","u");
$password="";
srand ((double)microtime()*1000000);
$max = $length/2;
for($i=1; $i<=$max; $i++)
{
$password.=$conso[rand(0,19)];
$password.=$vocal[rand(0,4)];
}
return $password;
}
2. PHP生成一个随机字符串
如果不需要可阅读的字符串,使用此函数替代,即可创建一个随机字符串,作为用户的随机密码等。
/*************
*@l - length of random string
*/
function generate_rand($l){
$c= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
srand((double)microtime()*1000000);
for($i=0; $i<$l; $i++) {
$rand.= $c[rand()%strlen($c)];
}
return $rand;
}
3. PHP编码电子邮件地址
使用此代码,可以将任何电子邮件地址编码为 html 字符实体,以防止被垃圾邮件程序收集。
function encode_email($email='info@domain.com', $linkText='Contact Us', $attrs ='class="emailencoder"' )
{
// remplazar aroba y puntos
$email = str_replace('@', '@', $email);
$email = str_replace('.', '.', $email);
$email = str_split($email, 5);
$linkText = str_replace('@', '@', $linkText);
$linkText = str_replace('.', '.', $linkText);
$linkText = str_split($linkText, 5);
$part1 = '<a href="ma';
$part2 = 'ilto:';
$part3 = '" '. $attrs .' >';
$part4 = '</a>';
$encoded = '<script type="text/javascript">';
$encoded .= "document.write('$part1');";
$encoded .= "document.write('$part2');";
foreach($email as $e)
{
$encoded .= "document.write('$e');";
}
$encoded .= "document.write('$part3');";
foreach($linkText as $l)
{
$encoded .= "document.write('$l');";
}
$encoded .= "document.write('$part4');";
$encoded .= '</script>';
return $encoded;
}
4. PHP验证邮件地址
电子邮件验证也许是中最常用的网页表单验证,此代码除了验证电子邮件地址,也可以选择检查邮件域所属 DNS 中的 MX 记录,使邮件验证功能更加强大。
function is_valid_email($email, $test_mx = false)
{
if(eregi("^([_a-z0-9-]+)(\.[_a-z0-9-]+)*@([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a-z]{2,4})$", $email))
if($test_mx)
{
list($username, $domain) = split("@", $email);
return getmxrr($domain, $mxrecords);
}
else
return true;
else
return false;
}
5. PHP列出目录内容
function list_files($dir)
{
if(is_dir($dir))
{
if($handle = opendir($dir))
{
while(($file = readdir($handle)) !== false)
{
if($file != "." && $file != ".." && $file != "Thumbs.db")
{
echo '<a target="_blank" href="'.$dir.$file.'">'.$file.'</a><br>'."\n";
}
}
closedir($handle);
}
}
}
6. PHP销毁目录
删除一个目录,包括它的内容。
/*****
*@dir - Directory to destroy
*@virtual[optional]- whether a virtual directory
*/
function destroyDir($dir, $virtual = false)
{
$ds = DIRECTORY_SEPARATOR;
$dir = $virtual ? realpath($dir) : $dir;
$dir = substr($dir, -1) == $ds ? substr($dir, 0, -1) : $dir;
if (is_dir($dir) && $handle = opendir($dir))
{
while ($file = readdir($handle))
{
if ($file == '.' || $file == '..')
{
continue;
}
elseif (is_dir($dir.$ds.$file))
{
destroyDir($dir.$ds.$file);
}
else
{
unlink($dir.$ds.$file);
}
}
closedir($handle);
rmdir($dir);
return true;
}
else
{
return false;
}
}
7. PHP解析 JSON 数据
与大多数流行的 Web 服务如 twitter 通过开放 API 来提供数据一样,它总是能够知道如何解析 API 数据的各种传送格式,包括 JSON,XML 等等。
$json_string='{"id":1,"name":"foo","email":"foo@foobar.com","interest":["wordpress","php"]} ';
$obj=json_decode($json_string);
echo $obj->name; //prints foo
echo $obj->interest[1]; //prints php
8. PHP解析 XML 数据
//xml string
$xml_string="<?xml version='1.0'?>
<users>
<user id='398'>
<name>Foo</name>
<email>foo@bar.com</name>
</user>
<user id='867'>
<name>Foobar</name>
<email>foobar@foo.com</name>
</user>
</users>";
//load the xml string using simplexml
$xml = simplexml_load_string($xml_string);
//loop through the each node of user
foreach ($xml->user as $user)
{
//access attribute
echo $user['id'], ' ';
//subnodes are accessed by -> operator
echo $user->name, ' ';
echo $user->email, '<br />';
}
9. PHP创建日志缩略名
创建用户友好的日志缩略名。
function create_slug($string){
$slug=preg_replace('/[^A-Za-z0-9-]+/', '-', $string);
return $slug;
}
10. PHP获取客户端真实 IP 地址
该函数将获取用户的真实 IP 地址,即便他使用代理服务器。
function getRealIpAddr()
{
if (!emptyempty($_SERVER['HTTP_CLIENT_IP']))
{
$ip=$_SERVER['HTTP_CLIENT_IP'];
}
elseif (!emptyempty($_SERVER['HTTP_X_FORWARDED_FOR']))
//to check ip is pass from proxy
{
$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
}
else
{
$ip=$_SERVER['REMOTE_ADDR'];
}
return $ip;
}
11. PHP强制性文件下载
为用户提供强制性的文件下载功能。
/********************
*@file - path to file
*/
function force_download($file)
{
if ((isset($file))&&(file_exists($file))) {
header("Content-length: ".filesize($file));
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . $file . '"');
readfile("$file");
} else {
echo "No file selected";
}
}
12. PHP创建标签云
function getCloud( $data = array(), $minFontSize = 12, $maxFontSize = 30 )
{
$minimumCount = min( array_values( $data ) );
$maximumCount = max( array_values( $data ) );
$spread = $maximumCount - $minimumCount;
$cloudHTML = '';
$cloudTags = array();
$spread == 0 && $spread = 1;
foreach( $data as $tag => $count )
{
$size = $minFontSize + ( $count - $minimumCount )
* ( $maxFontSize - $minFontSize ) / $spread;
$cloudTags[] = '<a style="font-size: ' . floor( $size ) . 'px'
. '" href="#" title="\'' . $tag .
'\' returned a count of ' . $count . '">'
. htmlspecialchars( stripslashes( $tag ) ) . '</a>';
}
return join( "\n", $cloudTags ) . "\n";
}
/**************************
**** Sample usage ***/
$arr = Array('Actionscript' => 35, 'Adobe' => 22, 'Array' => 44, 'Background' => 43,
'Blur' => 18, 'Canvas' => 33, 'Class' => 15, 'Color Palette' => 11, 'Crop' => 42,
'Delimiter' => 13, 'Depth' => 34, 'Design' => 8, 'Encode' => 12, 'Encryption' => 30,
'Extract' => 28, 'Filters' => 42);
echo getCloud($arr, 12, 36);
13. PHP寻找两个字符串的相似性
PHP 提供了一个极少使用的 similar_text 函数,但此函数非常有用,用于比较两个字符串并返回相似程度的百分比。
similar_text($string1, $string2, $percent);
//$percent will have the percentage of similarity
14. PHP在应用程序中使用 Gravatar 通用头像
随着 WordPress 越来越普及,Gravatar 也随之流行。由于 Gravatar 提供了易于使用的 API,将其纳入应用程序也变得十分方便。
/******************
*@email - Email address to show gravatar for
*@size - size of gravatar
*@default - URL of default gravatar to use
*@rating - rating of Gravatar(G, PG, R, X)
*/
function show_gravatar($email, $size, $default, $rating)
{
echo '<img src="http://www.gravatar.com/avatar.php?gravatar_id='.md5($email).
'&default='.$default.'&size='.$size.'&rating='.$rating.'" width="'.$size.'px"
height="'.$size.'px" />';
}
15. PHP在字符断点处截断文字
所谓断字 (word break),即一个单词可在转行时断开的地方。这一函数将在断字处截断字符串。
// Original PHP code by Chirp Internet: www.chirp.com.au
// Please acknowledge use of this code by including this header.
function myTruncate($string, $limit, $break=".", $pad="...") {
// return with no change if string is shorter than $limit
if(strlen($string) <= $limit)
return $string;
// is $break present between $limit and the end of the string?
if(false !== ($breakpoint = strpos($string, $break, $limit))) {
if($breakpoint < strlen($string) - 1) {
$string = substr($string, 0, $breakpoint) . $pad;
}
}
return $string;
}
/***** Example ****/
$short_string=myTruncate($long_string, 100, ' ');
16. PHP文件 Zip 压缩
/* creates a compressed zip file */
function create_zip($files = array(),$destination = '',$overwrite = false) {
//if the zip file already exists and overwrite is false, return false
if(file_exists($destination) && !$overwrite) { return false; }
//vars
$valid_files = array();
//if files were passed in...
if(is_array($files)) {
//cycle through each file
foreach($files as $file) {
//make sure the file exists
if(file_exists($file)) {
$valid_files[] = $file;
}
}
}
//if we have good files...
if(count($valid_files)) {
//create the archive
$zip = new ZipArchive();
if($zip->open($destination,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) {
return false;
}
//add the files
foreach($valid_files as $file) {
$zip->addFile($file,$file);
}
//debug
//echo 'The zip archive contains ',$zip->numFiles,' files with a status of ',$zip->status;
//close the zip -- done!
$zip->close();
//check to make sure the file exists
return file_exists($destination);
}
else
{
return false;
}
}
/***** Example Usage ***/
$files=array('file1.jpg', 'file2.jpg', 'file3.gif');
create_zip($files, 'myzipfile.zip', true);
17. PHP解压缩 Zip 文件
/**********************
*@file - path to zip file
*@destination - destination directory for unzipped files
*/
function unzip_file($file, $destination){
// create object
$zip = new ZipArchive() ;
// open archive
if ($zip->open($file) !== TRUE) {
die (’Could not open archive’);
}
// extract contents to destination directory
$zip->extractTo($destination);
// close archive
$zip->close();
echo 'Archive extracted to directory';
}
18. PHP为 URL 地址预设 http 字符串
有时需要接受一些表单中的网址输入,但用户很少添加 http:// 字段,此代码将为网址添加该字段。
if (!preg_match("/^(http|ftp):/", $_POST['url'])) {
$_POST['url'] = 'http://'.$_POST['url'];
}
19. PHP将网址字符串转换成超级链接
该函数将 URL 和 E-mail 地址字符串转换为可点击的超级链接。
function makeClickableLinks($text) {
$text = eregi_replace('(((f|ht){1}tp://)[-a-zA-Z0-9@:%_+.~#?&//=]+)',
'<a href="\1">\1</a>', $text);
$text = eregi_replace('([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_+.~#?&//=]+)',
'\1<a href="http://\2">\2</a>', $text);
$text = eregi_replace('([_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,3})',
'<a href="mailto:\1">\1</a>', $text);
return $text;
}
20. PHP调整图像尺寸
创建图像缩略图需要许多时间,此代码将有助于了解缩略图的逻辑。
/**********************
*@filename - path to the image
*@tmpname - temporary path to thumbnail
*@xmax - max width
*@ymax - max height
*/
function resize_image($filename, $tmpname, $xmax, $ymax)
{
$ext = explode(".", $filename);
$ext = $ext[count($ext)-1];
if($ext == "jpg" || $ext == "jpeg")
$im = imagecreatefromjpeg($tmpname);
elseif($ext == "png")
$im = imagecreatefrompng($tmpname);
elseif($ext == "gif")
$im = imagecreatefromgif($tmpname);
$x = imagesx($im);
$y = imagesy($im);
if($x <= $xmax && $y <= $ymax)
return $im;
if($x >= $y) {
$newx = $xmax;
$newy = $newx * $y / $x;
}
else {
$newy = $ymax;
$newx = $x / $y * $newy;
}
$im2 = imagecreatetruecolor($newx, $newy);
imagecopyresized($im2, $im, 0, 0, 0, 0, floor($newx), floor($newy), $x, $y);
return $im2;
}
21. PHP检测 ajax 请求
大多数的 JavaScript 框架如 jquery,Mootools 等,在发出 Ajax 请求时,都会发送额外的 HTTP_X_REQUESTED_WITH 头部信息,头当他们一个ajax请求,因此你可以在服务器端侦测到 Ajax 请求。
if(!emptyempty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'){
//If AJAX Request Then
}else{
//something else
}
相关日志
原文:http://hi.baidu.com/joeyao/blog/item/73f9644aee366b2a08f7ef13.html
【2010年1月15日更新:喜欢3D的朋友可以去china3-d.com看看】
【寒假过年的时候,我会给大家放出一个立体游戏的下载链接……】
【感谢来自完全实况11论坛网友对我的支持,谢谢】
首先,因为立体效果无法用言语表达,所以下面的一张红蓝立体测试图片必须用红蓝立体眼镜才可观察出立体效果。红蓝立体眼镜网上可以很轻松的买到,纸质的几块钱一副,而且去iZ3d网站可以免费索要。树脂的淘宝上卖十几块,还有那种挂夹的树脂镜,可以夹在近视眼镜上。
其次呢,跟立体电影一样,这个方法玩游戏也是利用的红蓝互补原理,需要红蓝分色眼镜就可以,对显示器也没有特殊要求,普通彩色显示器均可,但是如果眼镜颜色不正,效果会大打折扣。注:如果显示器有图片模式,请选择图片模式,这个模式里显示器力求色彩准确,立体效果好,不能开启动态对比功能,否则颜色会有偏差。明基显示器大都有图片模式。如果是树脂镜片,镜片颜色比较浅,需要把显示器亮度调低一些。
最后,我想说,如果你的机器配置不太高,请跳过这篇文章。因为使用立体显示对显卡有30%-50%的额外计算量。我的显卡是ATi HD3850,需要超频才能顺畅玩孤岛危机(立体显示开启,分辨率1680*1050)。不过我这个配置立体玩WOW肯定没有问题。
好了,废话不多说,开始安装
———————————————————————
我们首先要下载IZ3D
IZ3D官方网站
IZ3D1.09驱动程序:点我下载
IZ3D最新的1.10:点我下载
【2010年2月1日更新注:1.10这个版本不提示安装系统补丁“.NET FRAMEWORK 3.51”,建议手动升级 】
下载完毕后双击安装,安装过程中会出现一个报错信息,如图:

这个报错信息是告诉你你还没接上IZ3D生产的立体显示器,大家可以忽视这条信息。
注:iZ3D专业立体显示器要一万多块,谁买?好在iZ3D大发慈悲,红蓝立体显示是免费的。
安装完以后需要重新启动机器一次,重新启动之后,我们打开IZ3D程序,会看到以下界面

我们选择enable stereo by hotkey(通过快捷键开启立体模式)
stereo Output(立体输出模式)选择选择Anaglyph和Red/cyan(红青模式)
然后点apply(应用),接着就可以关掉,进入游戏了。
注:不玩游戏时时务必禁用3D(OpenGL,最好是Dx也禁用),否则会导致某些程序失效。
(不禁用的话会让显卡超频功能失效,游戏前先超频再启用iZ3D。不禁用的话会导致系统休眠、切换用户(Vista)功能失效)。
———————————————————————
进入游戏以后,小键盘*键是 开启\关闭 立体模式的开关,这个时候你会看到画面出现了和红青两色的偏移重影后,那么说明成功了。注:如果你没有看到,试试按着小键盘的“+”不动,如果出现红蓝画面分裂,则成功。
小键盘/为自动调节景深(推荐开启);小键盘+ – 为增加\减少 立体强度;SHIFT加小键盘+ -为增加\减少 景深(也就是红蓝重影的距离)。这个软件的设置就这么简单了。这个软件还预置了一些游戏的配置文件,在Profile里可以选择预置游戏配置。
另外影响观看的设置还有游戏本身的亮度调节、显示器的亮度调节。通过亮度调节你会发现颜色改善很明显。
到这里,软件设置就完成了。带上分色眼镜,你应该可以看到很强烈,很明显的立体效果。但是遗憾的是,因为分色眼镜质量参差不齐,所以颜色可能会有偏差。因此,我们必须根据分色眼镜自身的缺点进行调色。
现在我们来进行调色。在桌面上点鼠标右键,选择属性,可以打开显示面板。在那里找到color选项,右边的具体选项中要看清楚“set color correction for”。现在你要注意你用的眼镜了。实际上这个iz3d驱动支持的是红/青 3D模式。红/青 3D模式可以兼容红/蓝,红/绿两种3D眼镜。因此要根据你购买到的眼镜进行具体的调色。当然,我们要根绝3原色的基础来进行调色,本人不是学美术的,如果有错误,请大家不吝赐教。你带的是红/蓝眼睛的画,在“set color correction for”中选择Green选项。你现在可以戴上眼镜了,在Gamma选项中进行调解,右调绿色加深,左调绿色变浅(由于你戴上红蓝眼镜后,绿色被大大削弱,因此你需要把绿色加强,进行色彩的平衡)。把颜色往右调,直到你戴上红蓝分色眼镜后在游戏中的颜色看起来正常为止,这个时候你就可以点控制面板下的确定,然后关闭控制面板了。打完游戏后,如果你要把颜色改为正常色彩,请点右边的reset钮。
如果你戴的是红/绿眼镜,那么同理,你需要把选择蓝色,把蓝色调深。
如果你是红/青眼镜,那么你要适当的多尝试下了。
经过调试后,颜色正常了。你可以戴上眼镜享受正常的3D立体游戏。
———————————————————————
最后说下我昨天体验的情况
1。效果确实很刺激,在《使命召唤》里瞄准后,明显感觉到瞄具到准星到目标三点一线的立体感和距离感。特别是开启虚化背景效果后,有非常强烈的代入感。在《天堂2》里表现也非常好,站在QY的教堂门口往里看大神官,有明显的深度和距离感。你的人物属性,快截,聊天窗口都在画面的最前端。立体感非常强。但是,iZ3D虽然理论上支持所有DX8、DX9、DX10游戏,实际效果还是因游戏而异。
2。买个完美的眼镜很难。我买的3副眼镜为了节约运费都是一家买的。红色好像太厚,蓝色又有点浅。所以带上以后偏色。虽然效果看的到。但是偏色总归是不爽。眼镜还得慢慢再淘。
3。装了这个以后,在我的机器上只能单开,开第二个客户端开不了。可能是软件本身的缺点吧。因为这个软件的用途一般是全屏的3D游戏,不太支持窗口化以后多开3D游戏。
4。机器配置要好,因为要多计算每一帧的第三维,所以对FPS降低时很明显的。我的配置是AMD双核3.0G + 6G内存(2G物理内存4G用作虚拟内存和临时文件)+ 蓝宝的HD4830,应该说勉强算流畅。
5。这个软件,我不推荐只玩天2一种游戏的朋友使用。除非你平常只全屏玩天堂2并且不多开。如果你喜欢玩各种3D游戏,特别是代入感很强的,比如第一人称射击,飞车,或者模拟人生,我强烈推荐使用,投入非常低,软件是免费的,眼镜可以在文具店买色纸自己DIY,淘宝上买也只是十几块钱。
最后,温馨提示,连续使用红蓝滤光眼镜半小时 请做适当的休息 以及户外运动,要爱护眼睛
参考了http://bbs.17173.com/topics/382/200906/10/12687779,1.html,感谢17173平民的原始教程。
相关日志
当然不是很多人有自己的SSH服务器,如果你有自己的国外LINUX服务器,或者带SSH的空间(DreamHost 空间就带SSH的),可以试试这个代理方法.建立自己的SSH代理.
- 到这里地址 http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html 下载Plink,或者直接点这里下载。
- 打开记事本粘贴如下代码:plink user@demo.dreamhost.com -pw password -N -D 127.0.0.1:7070,另存为以.bat为后缀的批处理文件,例如ssh.bat,保存时保存类型选所有文件,将文件放在Pink.exe所在的相同文件夹下。其中将user改为SSH账号的用户名,demo.dreamhost.com 改为SSH服务器地址,password为SSH账号的密码,7070为端口号。
- 运行.bat批处理文件,如果用户名和密码都正确的话,命令行窗口会显示Using username “****”. 这时SSH服务器已经连接,可以在浏览器中设置sock5代理上网了,代理服务器设置为127.0.0.1,端口为7070。使用代理过程中不要关闭命令行窗口。
至于怎样用SOCK5这里就不多说了..
相关日志
其实一句话就可以了
nohup command > myout.file 2>&1 &
nohup 命令详细
用途:不挂断地运行命令。
语法:nohup Command [ Arg ... ] [ & ]
描述:nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 & ( 表示”and”的符号)到命令的尾部。
无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。
退出状态:该命令返回下列出口值:
126 可以查找但不能调用 Command 参数指定的命令。
127 nohup 命令发生错误或不能查找由 Command 参数指定的命令。
否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。
nohup命令及其输出文件
nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思( n ohang up)。
该命令的一般形式为:nohup command &
使用nohup命令提交作业
如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件:
nohup command > myout.file 2>&1 &
在上面的例子中,输出被重定向到myout.file文件中。
使用 jobs 查看任务。
使用 fg %n 关闭。
另外有两个常用的ftp工具ncftpget和ncftpput,可以实现后台的ftp上传和下载,这样就可以利用这些命令在后台上传和下载文件了。
相关日志
wget是一个从网络上自动下载文件的自由工具。它支持HTTP,HTTPS和FTP协议,可以使用HTTP代理.
所谓的自动下载是指,wget可以在用户退出系统的之后在后台执行。这意味这你可以登录系统,启动一个wget下载任务,然后退出系统,wget将在后台执行直到任务完成,相对于其它大部分浏览器在下载大量数据时需要用户一直的参与,这省去了极大的麻烦。
wget可以跟踪HTML页面上的链接依次下载来创建远程服务器的本地版本,完全重建原始站点的目录结构。这又常被称作”递归下载”。在递归下载的时候,wget遵循Robot Exclusion标准(/robots.txt). wget可以在下载的同时,将链接转换成指向本地文件,以方便离线浏览。
wget非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性.如果是由于网络的原因下载失败,wget会不断的尝试,直到整个文件下载完毕。如果是服务器打断下载过程,它会再次联到服务器上从停止的地方继续下载。这对从那些限定了链接时间的服务器上下载大文件非常有用。
wget的常见用法
wget的使用格式
Usage: wget [OPTION]… [URL]…
用wget做站点镜像:
wget -r -p -np -k http://dsec.pku.edu.cn/~usr_name/
# 或者
wget -m http://www.tldp.org/LDP/abs/html/
在不稳定的网络上下载一个部分下载的文件,以及在空闲时段下载
wget -t 0 -w 31 -c http://dsec.pku.edu.cn/BBC.avi -o down.log &
# 或者从filelist读入要下载的文件列表
wget -t 0 -w 31 -c -B ftp://dsec.pku.edu.cn/linuxsoft -i filelist.txt -o down.log &
上面的代码还可以用来在网络比较空闲的时段进行下载。我的用法是:在mozilla中将不方便当时下载的URL链接拷贝到内存中然后粘贴到文件filelist.txt中,在晚上要出去系统前执行上面代码的第二条。
使用代理下载
wget -Y on -p -k https://sourceforge.net/projects/wvware/
代理可以在环境变量或wgetrc文件中设定
# 在环境变量中设定代理
export PROXY=http://211.90.168.94:8080/
# 在~/.wgetrc中设定代理
http_proxy = http://proxy.yoyodyne.com:18023/
ftp_proxy = http://proxy.yoyodyne.com:18023/
wget各种选项分类列表
启动
-V, –version 显示wget的版本后退出
-h, –help 打印语法帮助
-b, –background 启动后转入后台执行
-e, –execute=COMMAND 执行`.wgetrc’格式的命令,wgetrc格式参见/etc/wgetrc或~/.wgetrc
记录和输入文件
-o, –output-file=FILE 把记录写到FILE文件中
-a, –append-output=FILE 把记录追加到FILE文件中
-d, –debug 打印调试输出
-q, –quiet 安静模式(没有输出)
-v, –verbose 冗长模式(这是缺省设置)
-nv, –non-verbose 关掉冗长模式,但不是安静模式
-i, –input-file=FILE 下载在FILE文件中出现的URLs
-F, –force-html 把输入文件当作HTML格式文件对待
-B, –base=URL 将URL作为在-F -i参数指定的文件中出现的相对链接的前缀
–sslcertfile=FILE 可选客户端证书
–sslcertkey=KEYFILE 可选客户端证书的KEYFILE
–egd-file=FILE 指定EGD socket的文件名
下载
–bind-address=ADDRESS 指定本地使用地址(主机名或IP,当本地有多个IP或名字时使用)
-t, –tries=NUMBER 设定最大尝试链接次数(0 表示无限制).
-O –output-document=FILE 把文档写到FILE文件中
-nc, –no-clobber 不要覆盖存在的文件或使用.#前缀
-c, –continue 接着下载没下载完的文件
–progress=TYPE 设定进程条标记
-N, –timestamping 不要重新下载文件除非比本地文件新
-S, –server-response 打印服务器的回应
–spider 不下载任何东西
-T, –timeout=SECONDS 设定响应超时的秒数
-w, –wait=SECONDS 两次尝试之间间隔SECONDS秒
–waitretry=SECONDS 在重新链接之间等待1…SECONDS秒
–random-wait 在下载之间等待0…2*WAIT秒
-Y, –proxy=on/off 打开或关闭代理
-Q, –quota=NUMBER 设置下载的容量限制
–limit-rate=RATE 限定下载输率
目录
-nd –no-directories 不创建目录
-x, –force-directories 强制创建目录
-nH, –no-host-directories 不创建主机目录
-P, –directory-prefix=PREFIX 将文件保存到目录 PREFIX/…
–cut-dirs=NUMBER 忽略 NUMBER层远程目录
HTTP 选项
–http-user=USER 设定HTTP用户名为 USER.
–http-passwd=PASS 设定http密码为 PASS.
-C, –cache=on/off 允许/不允许服务器端的数据缓存 (一般情况下允许).
-E, –html-extension 将所有text/html文档以.html扩展名保存
–ignore-length 忽略 `Content-Length’头域
–header=STRING 在headers中插入字符串 STRING
–proxy-user=USER 设定代理的用户名为 USER
–proxy-passwd=PASS 设定代理的密码为 PASS
–referer=URL 在HTTP请求中包含 `Referer: URL’头
-s, –save-headers 保存HTTP头到文件
-U, –user-agent=AGENT 设定代理的名称为 AGENT而不是 Wget/VERSION.
–no-http-keep-alive 关闭 HTTP活动链接 (永远链接).
–cookies=off 不使用 cookies.
–load-cookies=FILE 在开始会话前从文件 FILE中加载cookie
–save-cookies=FILE 在会话结束后将 cookies保存到 FILE文件中
FTP 选项
-nr, –dont-remove-listing 不移走 `.listing’文件
-g, –glob=on/off 打开或关闭文件名的 globbing机制
–passive-ftp 使用被动传输模式 (缺省值).
–active-ftp 使用主动传输模式
–retr-symlinks 在递归的时候,将链接指向文件(而不是目录)
递归下载
-r, –recursive 递归下载--慎用!
-l, –level=NUMBER 最大递归深度 (inf 或 0 代表无穷).
–delete-after 在现在完毕后局部删除文件
-k, –convert-links 转换非相对链接为相对链接
-K, –backup-converted 在转换文件X之前,将之备份为 X.orig
-m, –mirror 等价于 -r -N -l inf -nr.
-p, –page-requisites 下载显示HTML文件的所有图片
递归下载中的包含和不包含(accept/reject)
-A, –accept=LIST 分号分隔的被接受扩展名的列表
-R, –reject=LIST 分号分隔的不被接受的扩展名的列表
-D, –domains=LIST 分号分隔的被接受域的列表
–exclude-domains=LIST 分号分隔的不被接受的域的列表
–follow-ftp 跟踪HTML文档中的FTP链接
–follow-tags=LIST 分号分隔的被跟踪的HTML标签的列表
-G, –ignore-tags=LIST 分号分隔的被忽略的HTML标签的列表
-H, –span-hosts 当递归时转到外部主机
-L, –relative 仅仅跟踪相对链接
-I, –include-directories=LIST 允许目录的列表
-X, –exclude-directories=LIST 不被包含目录的列表
-np, –no-parent 不要追溯到父目录
问题
在递归下载的时候,遇到目录中有中文的时候,wget创建的本地目录名会用URL编码规则处理。如”天网防火墙”会被存为”%CC%EC%CD%F8%B7%C0%BB%F0%C7%BD”,这造成阅读上的极大不方便
相关日志
今天用到一个函数call_user_func_array,发现不太清楚怎样在类内调用函数.查了一下,居然用数组作为第一个参数调用,转载call_user_func和call_user_func_array详解如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | //call_user_func函数类似于一种特别的调用函数的方法,使用方法如下: function a($b,$c) { echo $b; echo $c; } call_user_func('a', "111","222"); call_user_func('a', "333","444"); //显示 111 222 333 444 //调用类内部的方法比较奇怪,居然用的是array,不知道开发者是如何考虑的,当然省去了new,也是满有新意的: class a { function b($c) { echo $c; } } //call_user_func(array("a", "b"),"111"); //显示 111 //call_user_func_array函数和call_user_func很相似,只不过是换了一种方式传递了参数,让参数的结构更清晰: function a($b, $c) { echo $b; echo $c; } call_user_func_array('a', array("111", "222")); //显示 111 222 //call_user_func_array函数也可以调用类内部的方法的 Class ClassA { function bc($b, $c) { $bc = $b + $c; echo $bc; } } call_user_func_array(array('ClassA','bc'), array("111", "222")); //显示 333 //call_user_func函数和call_user_func_array函数都支持引用,这让他们和普通的函数调用更趋于功能一致: function a(&$b) { $b++; } $c = 0; call_user_func('a', &$c); echo $c;//显示 1 call_user_func_array('a', array(&$c)); echo $c;//显示 2 |
原文:http://www.5iphp.com/zh-hans/content/348.html
相关日志
又是是jQuery,怎么老是jQuery,没办法最近做的项目跟他有关…jQuery 1.4.1作者关注到.live(“hover”)了,今天才在想,怎么没有.live(“hover”)呢…
jQuery is a fast and concise JavaScript Library that simplifies HTML document traversing, event handling, animating, and Ajax interactions for rapid web development. jQuery is designed to change the way that you write JavaScript.
Download jQuery 1.4.1?
* jQuery Minified (23kb)
* jQuery Regular (157kb)
New Features?
* – .live(“focus”) and .live(“blur”) now work – mapping to .live(“focusin”) and .live(“focusout”).
* – .live(“hover”) now exists, mapping to .live(“mouseenter mouseleave”).
* – It’s now possible to bind multiple event types with live.
* – Calling .die() (with no arguments) removes all bound live event handlers.
* – .height( function ) and .width( function ) now exist.
* – jQuery.parseJSON has been exposed, allowing you to parse JSON strings into JavaScript objects.
* – jQuery.error has been exposed, to be used by plugin developers to provide informative user feedback.
Read More jQuery On jQuery Project














