分类 [ 网站 ] 下的全部文章

 

Apache solr

 

Installation & Configuration of Apache Solr

Before start with the installation of apache solr. Let's understand the working of apache solr. In this article, I am going to demonstrate the installation and integration part of solr with Magento.

Apache Solr:

  • Apache Solr is an open source application use for the search index.
  • Apache Solr is basically working as Full-text Search engine.
  • Solr provides the XML interface and JSON API with which search application can be work.
  • Solr is written on Java Platform.
  • It is very stable and reliable application when you need any application for the search index.
  • Apache Solr running on default port 8983.

Apache solr can be used or integrate with multiple platforms like Magento, drupaletc. In this article, we will see the integration of apache solr with Magento platform.

You need to install below packages on the server.

  • Apache Solr 3.6.X
  • JAVA 7.x or 8

We have using solr 3.6 version. Reason to use this version is because it is a stable solr version and compatible with Magento platform. We are tried using latest version with Magento but it will not compatible with Magento. I have personally recommended you to use Solr version 3.6 series.

I have divided this article into two parts,

  • Installation
  • Integration

Installation of Apache Solr

Step 1: Download Apache Solr

Download the below link on the server under the “/opt/ directory. Download this link using wget command.

  • cd /opt/
  • sudo wget https://archive.apache.org/dist/lucene/solr/3.6.2/apache-solr-3.6.2.zip
  • sudo unzip apache-solr-3.6.2.zip
  • sudo mv apache-solr-3.6.2 apache-solr

Step 2: Install Java

Here you need to install java version 7 or higher. Java supports to run apache solr.

Follow below simple steps to install java.

  • sudo apt-get update
  • sudo apt-get install openjdk-7-jdk
  • sudo java -version
    java version "1.7.0_101"
    
    OpenJDK Runtime Environment (IcedTea 2.6.6) (7u101-2.6.6-0ubuntu0.14.04.1)
    
    OpenJDK 64-Bit Server VM (build 24.95-b01, mixed mode)

Step 3: Run Apache Solr

Now you need to run apache solr process in the background with below java command. Go to the “/opt/apache-solr/example” and run java command onstart.jar file.

  • cd /opt/apache-solr/example
  • java -jar start.jar & [ & symbol use to run application in background]

Press “Enter” to come out of the process and open the new terminal window.
Check process is running with ps command & netstat command,

  • ps aux | grep java
root 10980 0.0 0.0 89568 4560 pts/8 S 13:36 0:0 sudo java -jar start.jar
  • netstat -tunlp | grep 8983
tcp  0  0  0.0.0.0:8983  0.0.0.0:*   LISTEN  9074/java

You can also setup init script to start,stop & restart the apache solr instead of running solr in the background. Check out below link for Apache solr Init script.

Read: Init Script to start,stop,restart apache Solr service.

Step 4: Check Solr panel

Now run the below URL to check Solr admin panel on the browser.

http://192.168.3.39:8983/solr/admin/
Apache solr

Installation part is completed. Now we move to our integration part which explains you configuration with Magento.

Integration of Apache Solr with Magento

Step 1 : Download Apache Solr module

Download the module from GitHub repo link and sync this code with your Magento code.

Don’t worry it will only sync the module files with code which need to run solarium on Magento.

  • git clone https://github.com/jeroenvermeulen/magento-solarium.git
  • rsync -avzP magento-solarium/*   yourcodedirectory/

Step 2: Copy solrconfig.xml and schema.xml

Now copy solrconfig.xml & schema.xml file from solarium to the apache-solr directory. Follow below steps to copy files in the exact location.

Follow below steps to copy files in the exact location.

sudo cp ./app/code/community/JeroenVermeulen/Solarium/docs/schema.xml   /opt/apache-solr-3.6.2/example/solr/conf/

sudo cp ./app/code/community/JeroenVermeulen/Solarium/docs/schema.xml   /opt/apache-solr-3.6.2/example/solr/conf/

Step 3: Restart Solr Server

If you do not yet install init script then you need to kill the solr process and run again in the background.

  • ps aux | grep java
  • Kill -9 PID   [stop service]
  • cd /opt/apache-solr/example
  • sudo java -jar start.jar  [start service]

Step 4 : Configuration Solr in Magento panel

Now open Magento admin panel in the browser. Go to the “System → Configuration → Catalog → Solarium”.

Once you open configuration window use same settings which show in below image. After filling all the configuration settings click on “Test Connection” & “Self Test” button.

magento-admin3

Once you get the success message on clicking Test Connection then your configuration is successfully completed.

Step 5 : Reindex the Catalog Search

Once configuration part compete you need to run catalog indexing which helps to build the solr search. After reindexing open website and search in the search box you will get the search result.

Apache solr

I hope you like the article if you find any difficulties while installing apache solr with magento then please do comment your queries or problem via the comment section, till then stay tuned to techthings.org for more such valuable articles.

SPDY 是 Google 开发的基于传输控制协议 (TCP) 的应用层协议 ,开发组正在推动 SPDY 成为正式标准(现为互联网草案)。SPDY 协议旨在通过压缩、多路复用和优先级来缩短网页的加载时间和提高安全性。(SPDY 是 Speedy 的昵音,意思是更快)

阅读全文

HTML5 + CSS3 + JavaScript是已经到来的云计算时代面向前端应用的编程三剑客,在这开始于2010年的15年云计算时代里,谁掌握了它们,谁就是王者。

HTML5、CSS3、JavaScript分别代表着第三代WEB前端的结构、样式和行为(分别对应网页的结构层、表示层和行为层),结构层解决显示什么内容的问题,表示层解决如何显示的问题,而行为层解决事件发生时做什么的问题。把这三者分别保存到不同的文件中永远是一个好主意。应尽量避免在<body>部分使用<script>标签,避免使用document.write()方法。

很长时间以来,JavaScript在我眼里都是编程语言中的二等公民。早先,它经常是很多安全问题的发源地,就像是胶水一样,它能把HTML应用与样式粘到一块,可没有人拿它来正正规规地写程序;这样的情形太普遍了。而Java、Ruby、Python,这些才是真正能用来写程序的语言。

过去几年间,我对JavaScript的态度有了彻底的改变。JavaScript已经“长大成人”了。我敢保证很多JavaScript开发人员都不会认同我前面的说法,他们会说JavaScript一直都是一个十分强大、成熟、深得人心的语言。或许他们说得没错,事实上只要是一门完整的编程语言,就能拿来写程序,也包括BASIC这种滥东西。而一门语言真正有用,必须一方面自身具备很强的表达能力,另一方面还要有众多的库和开发工具。显然,JavaScript的表达能力早就没有问题了,即便是创建对象的方式有点不好让人接受,其实问题也不大。直到最近,一些极其重要的扭转局面的技术出现了:jQuery、JSON、Node.js和HTML5。或许JavaScript以前就是一门完善的语言了,但却是这些重要的相关技术(以及其他一些没有在这里提及的),让JavaScript成为了每一个开发人员都知道的语言。如果明年你要学一门新语言的话,那一定就是JavaScript。

HTML5据说是flash的掘墓者,在网页中嵌入Flash,其消耗资源之大是最令人诟病之处,现在好了html5来了,原来需要flash搞定的东东都可以用html5+JavaScript轻松实现。注意,要想成为一个真正的前端高手,还需要掌握一种图像处理工具,比如FireWorks、Photoshop等。

潜力无限的Node.js

Node.js潜力无限的意思,就是它有可能引发Web开发的革命。Node.js是一个框架,用于构建高性能Web应用——即使是巨量的请求也能应对如流。虽然Node本身作为一个底层框架,能够用于构建任何应用,但它还是最适合构建Web服务器。它的异步事件驱动模式与传统的请求-响应模式相比,无疑更适合Web应用。

有两方面因素更让人看好Node。首先,Google在提升JavaScript性能方面掀起了一场革命。这句话的意思并不是说你随时随地都可以用上最好的JavaScript引擎(尽管这也是我们一个美好的期望)。但可以肯定的是,Google在其他竞争对手还没有上心的情况下,真的把JavaScript性能当成了一回事儿。如此一来,就把Mozilla、Apple、Microsoft、Opera,还有其他浏览器开发商逼到了性能竞赛的跑道上。结果导致我们现在使用的JavaScript引擎较之几年前快了不知道有多少倍,完全有能力运行复杂的大型Web应用。

其次,Node有着庞大的开发人员基础。不管大家在服务器端使用的是什么语言,但在客户端却鲜有不使用JavaScript的。有的人可能是“剪刀加浆糊”式的东拼西凑,有的人则可能用JavaScript做出了高超的Ajax应用,而有的人甚至实现了全功能的应用程序,像Twitter或Gmail。可不管怎么说,JavaScript开发人员的数量无疑是非常庞大的。而Doug Crockford等作者更是极力宣传所有人都应该把JavaScript当成一门严肃正经的编程语言来看待——尽管它还有不少缺点。

当时当下,编写Node应用相对还是个“粗”活儿,毕竟它只是一个底层库。想象一下单纯使用JavaScript写代码,对,就是这种感觉,Node当前还是一个beta版的格局,与Rails或Django这样成熟的Web开发框架还没法比。这种状况无疑会改变。一些轻量级的框架,比如Express,已经出现了;我坚信更多基于Node的全功能框架将继续不断涌现。

前面提到过一些几乎完全在浏览器中运行的高级Web应用。那些都已经不算什么新鲜事儿了,Gmail多大了Google Maps贵庚了?不过,用JavaScript编写在浏览器中运行的应用的客户端无疑是越来越有吸引力了。HTML5则继续推高了人们对这一趋势的期许。

HTML5就是JavaScript

我不知道已经说过多少次了,HTML5实际上并没有多少与HTML有关,它其实就是JavaScript。HTML本身有什么变化?不过一些新标签而已,况且哪个新标签都不难理解。HTML5的威力在于让你能用JavaScript来创建这些标签。假如没有后台代码通过Canvas来创建动画、游戏,或者通过它来实现一些数据的可视化,这个标签也没有大用处。从浏览器开始支持Canvas开始,我已经看到了Asteroids(行星游戏)的上百个实现,那都是开发人员为熟悉这个新特性所做的练习。有的比较粗糙一些,而有的则极其精美。这些完全都要归功于JavaScript。

由此可见,HTML5并不是以尖括号为特征的标签语言的一次大的改进,其实质是赋予了JavaScript更强大的能力。WebGL库(当前还羽翼未丰)支持在HTML5的画布中绘制实时的3D图形。HTML5的地理位置支持在浏览器中实现LBS(Location Based Service)应用——这都是手机的基本配置。而持久存储以及离线功能则为开发能与桌面应用媲美,但却在浏览器中运行的全功能应用奠定了基础。目前,就连增加多点触摸事件的实验性的库也已经出现了。凡此种种,无一不是实实在在的JavaScript特性。HTML5只是为这些高级功能的发挥提供了舞台。

退一步讲,不依赖于HTML5的浏览器端开发库也取得了长足的进步。长久以来,JavaScript一直都是在HTML中实现动态效果的不二之选。可两个问题迟迟得不到解决:一是浏览器兼容性问题,二是直接操作DOM太麻烦。jQuery让这两个问题霎那间消失得无影无踪,这个库已经成为现代基于浏览器的客户端开发的基本配置。不过,并非只有jQuery。Protovis还有D3,都可以让你直接在浏览器中创建复杂的交互性数据可视化效果,有史以来第一次让浏览器成为了展示数据的一个重要媒介。

JavaScript与数据库,编译器与语言

就连数据库里都开始广泛使用JavaScript了!当前如火如荼的NoSQL运动的三只领头羊:CouchDBMongoDBRiak,都是“文档数据库”。它们保存的不是表,而是文档。这几个数据库所谓的“文档”,其实就是JSON文档,而不是Word或Excel。(Riak除了JSON文档,还支持XML和纯文本。)JSON已经成为一种被广泛采用的数据交换格式(所有现代的编程语言几乎全都有解析JSON的库),不过请注意,JSON实际上不就是一种序列化JavaScript对象的格式嘛!因此,虽然你可以在任何语言中使用JSON,但在JavaScript开发中使用它则是再自然不过的事了。况且,JSON 这个格式成为一种跨语言的标准,而不是Python、Ruby或Java等语言的序列化格式,这个事实本身足以说明JavaScript将在更加广阔的舞台上大显身手。还不仅仅如此,上述三个数据库都内置了支持JavaScript查询的能力。未来几年,更多的人都将会惊讶地发现,JavaScript和JSON还会内置到其他应用程序中!

JavaScript时代的大幕才刚刚拉开。在今年的JSConf上,一个核心主题就是“JavaScript到JavaScript的编译器”,也被人们看成是未来的一个主要趋势。Google在“编译生成JavaScript代码”方面是首开先河者。据我所知,GWT(Google Web Toolkit)应该是通过编译(从Java代码)生成JavaScript代码的第一个框架。以前我对GWT并没有太重视,只是觉得它是一个致力于拯救那些Java程序员的框架,好让他们不必因为(学习)编写JavaScript而浪费时间。可是,GWT在编译过程中对JavaScript做了那么多的优化,简直是太神了。Closure就是一个“JavaScript到JavaScript的编译器”,能够实现同样级别的优化。Traceur,这是几个星期前才冒出来的一个框架,通过它能够试验JavaScript的新特性,换句话说,它可以把带有实验性语言特性的JavaScript代码编译成可以在所有现代平台中运行的JavaScript代码。

最后,我们也开始看到了当初Java大旗下JVM语言的蓬勃景象:很多语言都在致力于编译成JavaScript!其中有一些语言比较有意思,像CoffeescriptKaffeine,它们在风格上酷似JavaScript,但更关注弥补JavaScript的一些不够完善的地方。是不是觉得JavaScript的对象模型特有意思,可怎么看怎么有点笨笨滴,有木有?是不是一想到基于原型创建一个实际的对象都需要反反复复地定义这定义那,就望而却步了,有木有?Coffeescript对此作了明显的改进。除了完善对象模型,Coffeescript 还添加了类似列表解析(list comprehensions)的新特性,去掉了大部分花括号。就像在Python中一样,要使用缩进来区分代码块。

未来的Web服务器、取之不尽的客户端库、HTML5、数据库,乃至基于JavaScript的语言——我现在一睁眼看到的就是JavaScript!假如你曾经对JavaScript敬而远之,今年可是该学习它了。没有任何理由,真的,再不学,恐怕你就没机会跟上时代了!

附录:一些有名的javascript库ExtJS和jQuery

下面简单介绍一下如何把最新的ExtJS和jQuery集成到Eclipse中。
一)、下载如下文件:
1、ExtJS 3.4和ExtJS 4.0,下载3.4是因为要用到里面的ext.jsb2,下载4.0是用到里面的库文件;
2、spket ide 1.6.18 破解版:javascript编辑工具
3、jQuery 1.6.4
4、eclipse-java-indigo-SR1-win32.zip

二)、解压
1、把ExtJS 4.0解压到目录C:\Program Files\ext-4.0.0下,解压ExtJS 3.4中的ext.jsb2到C:\Program Files\ext-4.0.0下;
2、把jquery-1.6.4.js拷贝到C:\Program Files\ext-4.0.0下;
3、解压 eclipse-java-indigo-SR1-win32.zip到C:\Program Files\eclipse下;
4、解压 spket ide 1.6.18 破解版,把解压后的子目录下features下中全部文件拷贝到C:\Program Files\eclipse\features中,把解压后的子目录下plugins下中全部文件拷贝到C:\Program Files\eclipse\plugins中;

三)、配置
1、用记事本打开文件C:\Program Files\ext-4.0.0\resources\css\ext-all.css,把集中的11px全部替换成12px,这样显示中文时不同的浏览器效果一样。
2、鼠标右击C:\Program Files\eclipse\eclipse.exe,然后发送到桌面上(快捷方式);
3、双击桌面上的ecplise快捷方式启动eclipse;
4、在eclipse中添加ExtJS。Window->Preferences->Spket->JavaScript Profiles -> New,输入“ExtJS”点击OK;选择“ExtJS” 点击Default(设为默认),然后点击“Add Library”然后在下拉条中选取“ExtJS”;选择 “ExtJS”并点击“Add File”,然后在C:\Program Files\ext-4.0.0目录中把ext.jsb2、ext-all.js和ext-all-debug.js这三个文件选择进来;设置js默认打开方式, Window → Preferences → General→ Editors→ File…选择JS或者你想要的文件格式(比如:html、html、phtml等) 设置默认打开方式 为 Spket JavaScript Editor(default),如果没有 Spket JavaScript Editor,添加进去再设置成默认就行了;
5、在eclipse中添加jQuery。Window->Preferences->Spket->JavaScript Profiles -> New,输入“jQuery”点击OK,点击“Add Library”然后在下拉条中选取“jQuery”;选择 “jQuery”并点击“Add File”,然后在C:\Program Files\ext-4.0.0目录中把jquery-1.6.4.js选择进来。
6、

一些特效网站:

http://mugtug.com/sketchpad/
http://raphaeljs.com/
http://people.mozilla.com/~prouget/demos/DynamicContentInjection/play.xhtml
http://momomolice.com/demo/psg/html5/psg201107arkanoid.html
http://html5demos.com/
http://www.webdesignerwall.com/trends/47-amazing-css3-animation-demos/
http://robertnyman.com/css3/

Http状态码思维导图 2011年3月10日

创建网站的一般流程 2011年2月25日

1、注册域名。

现在好的域名很少了,好的域名往往是靠灵感闪现的——也就是说不要刻意去想,而且要上心,偶尔的地点和时点您可能立马想到了一个好的域名。比如我几年前打算开一个网店,域名想了快一个月,突然一天我小孩提到大家买,我突然想起这是一个好的域名,于是赶快去域名注册商网站查询www.dajiamai.com,发现没有人注册,我差一点高兴得就跳起来了,于是赶快抢注了。

不过现在国内管得严,个人不允许注册域名了。作为中国这边,可以注册的域名我认为是.com, .cn, .org, .com.cn, .net,其中.com, .org, .net是国际一级域名(顺便提一下:.com是商业域名,也是使用最为广泛的,.org是政府等组织常用的,而.net一般是非赢利性组织使用的),建议到美国的godaddy去注册。.cn域名是国内域名,只能在国内注册商注册,但是国内注册商被告知不能给个人注册域名,而且国内注册商注册的域名年租金非常昂贵,都在100元以上(想想就气:娘的,不就几个字母,一年的保管费就100多,抢钱呢,服务又烂),相反,去美国注册,个人用户没有限制,而且域名年租金要便宜多了,另外美国的一些老牌域名注册商讲信用,服务又好,速度又快,一个好的域名放在美国心里踏实。经常有人反映一个域名放在国内注册商那,不知不觉突然一天就说无效了,被人盗走了,比如我的域名www.dajiamai.com,以前放在国内金万维代理商那,我心里一直是忐忑不安啊,直到转移到了godaddy之后才放下心来。

好了,想好了域名,您就登陆国内域名注册商万网www.net.cn或者美国的www.godaddy.com去查询是否被注册了。提到万网,我就气不打一处来,娘的,这个企业无耻!建议各位去godaddy注册,这家企业为了抢中国的业务,和支付宝合作,我们可以直接支付人民币了,真他妈的方便,这下非常崇拜马云——牛人。不过要英文好,而且要有网上银行和支付宝账号,不具备条件的同仁我可以代为注册,呵呵。

不过听说最近这边政府要实行海外域名白名单制度,这是非常恐怖的事情,到时所有的需要在大陆访问的网站都要在政府备案报批,否则大陆网民根本没法解释,当然直接访问ip还是可以的,但是谁又会去记域名对应的IP呢。目前政府主要是控制电信的DNS服务器,不让解析,建议各位不要使用中国电信的DNS,采用google提供的DNS:8.8.8.8和8.8.4.4,这样你可以访问比以前多得多的网站了(如何设置电脑的DNS,请参见我的另一篇博文http://www.veryopen.org/?p=1956)

2、设计网页。

比较常用的建网工具非“建网三剑客”莫属,不过是做动态的还是静态的,要搞清楚呢,因为这涉及下面第3步“申请网站空间”,静态网页就是html或者htm类型的,里面是什么内容,浏览网站时就看到什么内容,而动态网页格式比较多,有php, asp, jsp等等,需要服务器提供动态语言解释,往往还有数据库支持。现在动态网页用得比较多。

html5/css3(第5代超文本标记语言/样式3)绝对是未来的发展趋势,采用它可以设计出非常华丽的网页界面,从而彻底解决了b/s应用界面不好看的问题,想在网页设计方面耕耘的同仁不妨好好掌握它。另外现在建站也很少从0开始的,都是采用自动建站工具——又快又效果好,如果熟练掌握一个建站工具,做一个网站1、2个小时足矣。这方面我想大家推荐的是咱们国人自己搞的开源建站工具:织梦(http://www.dedecms.com

3、申请网站空间。

静态网站空间年租金比较便宜,国内(比如万网100M空间,一年大概150元左右),国外就便宜多了,共产主义者google提供了免费的静态网站空间,不过在国内没法访问,被墙了,曾经为此我郁闷了好些天,google提供的很多好东西,在国内都被和谐了,这不是暴殄天物又是什么呢!动态网页空间由于要耗费很多的服务器资源来执行网页脚本,而且大部分还要后台数据库支持,所以年组金就贵多了。国内动辄几千,国外相对来说还是便宜,建议还是去godaddy申请。不过我是直接申请美国的虚拟服务器——一个只安装了基本操作系统软件的机器,独立IP,root账号,通过ssh远程登录安装自己需要的软件,用起来非常爽!不过money也费了我不少——一年一个月工资就这样没了。需要空间的朋友不妨联系我,我按成本价出租呢。

4、做DNS解析。

在上面第3步中申请网站空间后网站空间服务商会反馈给您服务器ip地址,拿到ip后登录到域名服务器对域名做DNS解析——增加一条www的A记录,其本质就是建立域名到ip的映射:
www.dajiamai.com -->  68.169.40.25
如果实在不知道操作,可联系域名注册商,让他们协助您操作。做了DNS解析后一般要等DNS服务器接力扩散,生效时间如果是国内注册商大概要6个小时以上,但在godaddy,一个小时即可。
注意:国内域名注册商做DNS解释时会受到很多限制,非常不爽。

5、启用网站。

把设计好的网页文件上传到网站空间即可,这一步比较简单,只要DNS生效了,上传完毕后就可以浏览您的网站了,对不了,地球上任何一个人都可以浏览——只要告诉他您的网址==域名。

6、申请免费的域名邮箱。

比如您有一个类似www.xyz.com的域名,您是不是很想要一个类似xxx@xyz.com的邮箱呢?不想才怪,尤其对于企业来说,在名片上印上自己网页网站的域名邮箱,本身就让人对您崇拜三分,我的经验,一个人给我的名片上还印着诸如xxx@163.com或者yyy@264.com,可以肯定他的公司一定是小型的——小到连自己的企业邮箱都建不起!

现在好了,只要您拥有一个域名,您就可以申请到免费的域名邮箱,这一点还得感谢google这个国际共产主义者,在它的推动下,国内也开始有公司推出免费的域名邮箱,比如网易和qq,我一开始用网易的(http://ym.163.com),后来知道了google早在8年前就推出这个业务了,于是我全部移到google了,具体的申请方法参见我的另一篇博文:谷歌google免费域名邮箱申请流程

7、网站推广。

网站做好了,接下来就是推广了——让更多的人知道您的网站。推广有很多种方法,有钱就去百度和google上最关键字搜索广告,或者委托专门的网站推广公司去搞,没钱就自己上,到博客上发软文,发邮件,到百度知道堂去自问自答等等。

出租网站空间 2011年2月17日

本人在云存储服务商那里申请了大量的网站空间,由于自己用不完,先对外出租,价格优惠,系统稳定。网站架构是Linux+Ngnix+Mysql,支持静态和动态(php、asp、jsp等)网页。欢迎需要的朋友联系商谈,谢谢。另外现在国内域名注册审核非常严,而且需要亲临现场拍照取证,更为不幸的是个人不能在国内注册域名了,我可以协助阁下注册一级国际域名,域名注册在美国,安全,可靠。有需要的朋友请参考本博客主页上的“关于”里的联系方式联系商谈。

我们都知道很容易在wordpress中添加文类目录,但是分类目录显示在博客的右下侧,不容易导航,而导航栏上的条目只是页面,那么怎么使得导航条目与分类目录关联起来呢?请看下文分解:

一、添加分类目录:

二、在刚创建的分类目录中新建文章:


三、查找新建分类目录的URL:

切换到博客主页,鼠标放在右下侧的分录目录“测试”上,这时在状态栏会出现URL:

记下“/?cat=24”。

四、添加菜单:

五、修改菜单“测试”的URL:

新加的菜单“测试”出现在最下面,这时鼠标停留在“测试”菜单上会出现十字架,按住鼠标左键可以上下移动“测试”菜单,从而调整位置。最后参考下图修改URL为“/?cat=24”:

六、切换到博客主页,这时可以看到导航栏中出现了“测试”条目:

编码原理
  PHP程序设计中中文编码问题曾经困扰很多人,导致这个问题的原因其实很简单,每个国家(或区域)都规定了计算机信息交换用的字符编码集,如美国的扩展 ASCII 码, 中国的 GB2312-80,日本的 JIS 等。作为该国家/区域内信息处理的基础,字符编码集起着统一编码的重要作用。字符编码集按长度分为 SBCS(单字节字符集),DBCS(双字节字符集)两大类。早期的软件(尤其是操作系统),为了解决本地字符信息的计算机处理,出现了各种本地化版本(L10N),为了区分,引进了 LANG, Codepage 等概念。但是由于各个本地字符集代码范围重叠,相互间信息交换困难;软件各个本地化版本独立维护成本较高。因此有必要将本地化工作中的共性抽取出来,作一致处理,将特别的本地化处理内容降低到最少。这也就是所谓的国际化(118N)。各种语言信息被进一步规范为 Locale 信息。处理的底层字符集变成了几乎包含了所有字形的 Unicode。

  现在大部分具有国际化特征的软件核心字符处理都是以Unicode为基础的,在软件运行时根据当时的Locale/Lang/Codepage设置,确定相应的本地字符编码设置,并依此处理本地字符。在处理过程中需要实现 Unicode 和本地字符集的相互转换,甚或以 Unicode 为中间的两个不同本地字符集的相互转换。这种方式在网络环境下被进一步延伸,任何网络两端的字符信息也需要根据字符集的设置转换成可接受的内容。

  数据库中的字符集编码问题

  流行的关系数据库系统都支持数据库字符集编码,也就是说在创建数据库时可以指定它自己的字符集设置,数据库的数据以指定的编码形式存储。当应用程序访问数据时,在入口和出口处都会有字符集编码的转换。对于中文数据,数据库字符编码的设置应当保证数据的完整性。GB2312、GBK、UTF-8 等都是可选的数据库字符集编码;当然我们也可以选择 ISO8859-1 (8-bit),只是我们得在应

  用程序写数据之前先将 16Bit 的一个汉字或 Unicode 拆分成两个 8-bit 的字符,读数据之后也需要将两个字节合并起来,同时还要判别其中的 SBCS 字符,因此我们并不推荐采用 ISO8859-1 作为数据库字符集编码。这样不但没有充分利用数据库自身的字符集编码支持,而且同时也增加了编程的复杂度。编程时,可以先用数据库管理系统提供的管理功能检查其中的中文数据是否正确。

  PHP 程序在查询数据库之前,首先执行 mysql_query("SET NAMES xxxx"); 其中 xxxx 是你网页的编码(charset=xxxx),如果网页中 charset=utf8,则 xxxx=utf8,如果网页中 charset=gb2312,则xxxx=gb2312,几乎所有 WEB 程序,都有一段连接数据库的公共代码,放在一个文件里,在这文件里,加入 mysql_query("SET NAMES xxxx") 就可以了。

  SET NAMES 显示客户端发送的 SQL 语句中使用什么字符集。因此,SET NAMES 'utf-8' 语句告诉服务器“将来从这个客户端传来的信息采用字符集 utf-8”。它还为服务器发送回客户端的结果指定了字符集(例如,如果你使用一个 SELECT 语句,它表示列值使用了什么字符集)。

  定位问题时常用的技巧

  定位中文编码问题通常采用最笨的也是最有效的办法―在你认为有嫌疑的程序处理后打印字符串的内码。通过打印字符串的内码,你可以发现什么时候中文字符被转换成 Unicode,什么时候Unicode 被转回中文内码,什么时候一个中文字成了两个 Unicode 字符,什么时候中文字符串被转成了一串问号,什么时候中文字符串的高位被截掉了……

  取用合适的样本字符串也有助于区分问题的类型。如:"aa啊 aa?@aa" 等中英相间,GB、GBK特征字符均有的字符串。一般来说,英文字符无论怎么转换或处理,都不会失真(如果遇到了,可以尝试着增加连续的英文字母长度)。

  解决各种应用的乱码问题

  1) 使用标签设置页面编码

  这个标签的作用是声明客户端的浏览器用什么字符集编码显示该页面,xxx 可以为 GB2312、GBK、UTF-8(和 MySQL 不同,MySQL 是 UTF8)等等。因此,大部分页面可以采用这种方式来告诉浏览器显示这个页面的时候采用什么编码,这样才不会造成编码错误而产生乱码。但是有的时候我们会发现有了这句还是不行,不管 xxx 是哪一种,浏览器采用的始终都是一种编码,这个情况我后面会谈到。

  请注意, 是属于 HTML 信息的,仅仅是一个声明,仅表明服务器已经把 HTML 信息传到了浏览器。

  2) header("content-type:text/html; charset=xxx");

  这个函数 header() 的作用是把括号里面的信息发到 http 标头。如果括号里面的内容为文中所说那样,那作用和 标签基本相同,大家对照第一个看发现字符都差不多的。但是不同的是如果有这段函数,浏览器就会永远采用你所要求的 xxx 编码,绝对不会不听话,因此这个函数是很有用的。为什么会这样呢?那就得说说 http 标头和 HTML信息的差别了:

  http 标头是服务器以 http 协议传送 HTML 信息到浏览器前所送出的字串。而 标签是属于 HTML 信息的,所以 header() 发送的内容先到达浏览器,通俗点就是 header() 的优先级高于 (不知道可不可以这样讲)。假如一个 php 页面既有header("content-type:text/html;charset=xxx"),又有,浏览器就只认前者 http 标头而不认 meta 了。当然这个函数只能在 php 页面内使用。

  同样也留有一个问题,为什么前者就绝对起作用,而后者有时候就不行呢?这就是接下来要谈的Apache 的原因了。

  3) AddDefaultCharset

  Apache 根目录的 conf 文件夹里,有整个 Apache 的配置文档 apache2.conf。  用文本编辑器打开httpd.conf,第708行(不同版本可能不同)有 AddDefaultCharset xxx,xxx为编码名称。这行代码的意思:设置整个服务器内的网页文件 http 标头里的字符集为你默认的 xxx字符集。有了这行,就相当于给每个页文件都加了一行header("content-type:text/html; charset=xxx")。这下就明白了有的人为什么在页标签里明明 设置的是utf-8,可浏览器始终采用gb2312的原因(假如AddDefaultCharset gb2312)。

  如果网页里有 header("content-type:text/html; charset=xxx"),就把默认的字符集改为你设置的字符集,所以这个函数永远有用。如果把 AddDefaultCharset xxx 前面加个"#",注释掉这句,而且页面里不含 header("content-type…"),那这个时候就轮到 meta 标签起作用了。

  如果你是web程序员,建议给你的每个页面都加个header("content-type:text/html;charset=xxx"),这样就可以保证它在任何服务器上都能正确显示,而且可移植性也比较强。

  4) php.ini 中的 default_charset 配置:

  php.ini 中的 default_charset = "gb2312" 定义了 php 的默认语言字符集。一般推荐注释掉此行,让浏览器根据网页头中的 charset 来自动选择语言而非做一个强制性的规定,这样就可以在同台服务器上提供多种语言的网页服务。

  下面列出以上的优先顺序:

    -->header("content-type:text/html; charset=xxx")  --建议采用
    -->php.ini:default_charset=xxx                    --不建议采用
   
-->Apache2.conf:AddDefaultCharset xxx             --不建议采用
    -->页标签字符集设置
                                 --不建议采用

  结束语

  其实 php 开发中的中文编码并没有想像的那么复杂,虽然定位和解决问题没有定规,各种运行环境也各不尽然,但后面的原理是一样的。了解字符集的知识是解决字符问题的基础。不过,随着中文字符集的变化,不仅仅是 php 编程,中文信息处理中的问题还是会存在一段时间的。

 

 原文地址 http://code.nb5.cn/it/sort01/sort03/info87_2.html

一、简介:
  现在我们安装Linux的时候通常考虑到安全因素(默认情况下)是不打开telnet服务的,而ssh服务是有的,ant很早就支持telnet,但要求我们在Linux下要安装telnet-server,并要启用该服务。

还好自Ant1.60开始支持了SSH 及SCP 操作了,早在Ant之前若要支持SSH、SCP、SFTP等任务就必须下载j2ssh的j2ssh-ant.jar和j2ssh-core.jar(在http://www.sourceforge.net的j2ssh下有下载)。现在可以使用Ant提供的Sshexec和scp任务,由$ANT_HOME/lib/ant-jsch.jar提供支持,但是同样你也要在http://www.jcraft.com/jsch/index.html下载一个依赖包jsch-0.1.24.jar(文件名因版本而不同),jsch同样也是http://www.sourceforge.net下的一个项目。

你需要把下载的jsch-0.1.24拷贝到$ANT_HOME/lib下,如果是Eclipse下的Ant环境必须在Window->Preferences->Ant->Runtime->Classpath中加入jsch-0.1.24。

JSch是一个SSH2的纯Java实现
JSch允许你连接到sshd server并采用端口映射, X11 映射; Scp文件传输等,你可以把集成JSch提供的功能到你自己的Java项目中,JSch 的授权方式为 BSD形式。

二、简单例子:
  下面是用JSch完成Sshexec和scp两个任务的最简单例子,如果需要更详细的内容,请参考Ant用户手册

[Sshexec任务]
<BR><target name="sshexec">
      <sshexec host="192.168.122.180" username="root"  password="123456"
         trust="true" command="cd /;ls"/>
</target>

注意上面的trust属性一般设置为true, 如果为默认值false时,那么就要求你所连接的host必须存在于你的knownhosts文件中,并且这个文件也必须是存在的,否则会出现 com.jcraft.jsch.JSchException: reject HostKey: 192.168.122.180异常。执行Linux下的命令时可以用分号";"把多个命令隔开,它们将会依次执行,而不需要写多个sshexec进行多次连接,每次连接只执行一个命令。

该任务的执行后输出结果如下:

sshexec:
  [sshexec] Connecting to 192.168.122.180:22
  [
sshexec] backup
  [
sshexec] bin
  [
sshexec] boot
  [
sshexec] dev
  [
sshexec] etc
  ...................

[scp任务]

1.拷贝单个文件到远端服务器
<scp file="c:/cmd.txt" todir="root:123456@192.168.122.180:/tmp" trust="true"/>

<scp file="c:/cmd.txt" todir="root@192.168.122.180:/tmp" password="123456" trust="true"/>

2.拷贝远端文件本地
<scp file="root:123456@192.168.122.180:/tmp/cmd.txt" todir="D:/my-app"  trust="true"/>

3.拷贝远端目录到本地,将以递归形式操作
<scp file="root:123456@192.168.122.180:/tmp/*" todir="d:/my-app" trust="true"/>

4.拷贝本地目录中的内容到远端,递归形式,但不在服务器上建立my-app目录
<scp todir="root:123456@192.168.122.180:/tmp/" trust="true">
   
<fileset dir="d:/my-app"/>
</scp>

5.拷贝一系列的文件到远端,会建立相应的层次目录,不建立my-app目录
<scp todir="root:123456@192.168.122.180:/tmp" trust="true">
   
<fileset dir="d:/my-app">
      
<include name="**/*.java" />
   
</fileset>
</scp>

<scp todir="root:123456@192.168.122.180:/tmp" trust="true">
   
<fileset dir="d:/my-app" excludes="**/*.java"/>
</scp>

最后一个任务的执行输出结果如下(其他略):

scp:
      [scp]Connecting to 192.168.122.180:22
      [
scp] Sending: cmd.txt : 0
      [
scp] File transfer time: 0.0 Average Rate: ? B/s
      [
scp] Sending: pom.xml : 852
      [
scp] File transfer time: 0.0 Average Rate: ∞ B/s
      [
scp] Sending: application.properties : 142
      [
scp] File transfer time: 0.0 Average Rate: ∞ B/s
      [
scp] Sending: application.properties : 45
      [
scp] File transfer time: 0.0 Average Rate: ∞ B/s
      [
scp] Sending: test.properties : 0
      [
scp] File transfer time: 0.02 Average Rate: 0.0 B/s
      [
scp] Sending: application.properties : 153
      [
scp] File transfer time: 0.0 Average Rate: ∞ B/s
      [
scp] Sending: application.properties : 45
      [
scp] File transfer time: 0.0 Average Rate: ∞ B/s
      [
scp] done.

三、其他例子:

例子1:
<?xml   version= "1.0 "?>
<project   name= "buildssh "   default= "DEFAULT "   basedir= ". ">
<target   name= "init ">
<!--   set   properties,   mkdir,   etc.   -->
<property   file= "build.properties "   />
<property   name= "this.project "   value= "buildssh "   />
<echo   message= "init   in   ${this.project} "   />
<tstamp   />
</target><target   name= "DEFAULT "   depends= "init ">
<echo   message= "connecting   to   ${build.server} "   />
<sshexec   host= "Linux   server   IP   address "   username= "Linux   server     username "   password= "Linux   server   password "   trust= "true "   command= "Command   you   want   to   run   on   the   server "   />
</target>
</project>

例子2:
import   com.jcraft.jsch.Channel;      
import   com.jcraft.jsch.ChannelSftp;      
import   com.jcraft.jsch.JSch;      
import   com.jcraft.jsch.Session;      
import   com.jcraft.jsch.UserInfo;      
   
public   class   ExecSCP   {      
        public   static   final   UserInfo   defaultUserInfo   =   new   UserInfo(){      
                public   String   getPassphrase()   {      
                        return   null;      
                }      
   
                public   String   getPassword()   {      
                        return   null;      
                }      
   
                public   boolean   promptPassword(String   arg0)   {      
                        return   false;      
                }      
   
                public   boolean   promptPassphrase(String   arg0)   {      
                        return   false;      
                }      
   
                public   boolean   promptYesNo(String   arg0)   {      
                        return   true;      
                }      
   
                public   void   showMessage(String   arg0)   {      
                }      
        };      
   
        /**    
          *   @param   args    
          */    
public   static   void   main(String[]   args)   throws   Exception{
String   hostname   =   "www.mozat.com ";
String   username   =   "wiimii ";
String   password   =   "jtev000 ";
String   remoteFile   =   "Setup.ini ";
String   localFile   =   "C:\\ ";

                JSch   jsch=new   JSch();

                Session   session=jsch.getSession(username,   hostname,   990);
                session.setPassword(password);
                session.setUserInfo(defaultUserInfo);
                session.connect();

                Channel   channel=session.openChannel( "sftp ");      
                channel.connect();      
                ChannelSftp   c=(ChannelSftp)channel;      
                     
                c.get(remoteFile,   localFile);  
               
                session.disconnect();
              }
}

 

 

 原文地址 http://www.blogjava.net/Unmi/archive/2006/01/03/124033.html
在一台安装了Ubuntu 8.04 server的电脑上安装cvs,然后通过配置ecplise 3.2 实现源代码的检入和检出,从而达到同队共享开发代码的目的。

一、安装和配置cvsd:

1、apt-get install cvsd cvs;  --安装软件包,会提出输入工程代码库的根目录,以“/”开头,注意是相对于/var/lib/cvsd的而言的,比如这里如果输入/erpv719,那么绝对路径就是/var/lib/cvsd/erpv719。
2、cvs -d /var/lib/cvsd/erpv719 init; 注意这里的绝对目录要与上面定义的一样。
3、cvsd-passwd /var/lib/cvsd/erpv719 erpv719; 创建cvs账号erpv719,也可以取其他的名字,这个账号只能操作(检入和检出)erpv719工程代码库。
4、chown -R cvsd:cvsd /var/lib/cvsd
5、vim /var/lib/cvsd/erpv719/CVSROOT/config
SystemAuth=no
PamAuth=no
6、/etc/init.d/cvsd restart;  重启cvsd服务,这时端口应该出去被监听状态。
7、netstat -tnlp; 查看全部被监听的TCP端口,下面的红色部分表明2401已经处于被监听状态。
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      5331/apache2
tcp        0      0 127.0.0.1:5432          0.0.0.0:*               LISTEN      5203/postgres
tcp6       0      0 :::2401                 :::*                    LISTEN      5227/cvsd
tcp6       0      0 :::8009                 :::*                    LISTEN      5266/jsvc
8、cvs -d:pserver:erpv719@localhost:/erpv719 login;  测试能否登陆,输入密码后没有任何报错信息表明正常。
9、cd /tmp; cvs -d:pserver:erpv719@localhost:/erpv719 checkout .; 测试检出操作,如果正常那么在/tmp下出现一个目录CVSROOT。

二、配置ecplise 3.2:

1、启动ecplise 3.2-->Window-->Show View-->Other-->展开CVS-->CVS Repositories-->OK,这样就显示了CVS Repositories窗口。点击此窗口上方的“Add CVS Repository”图标,跳出一个新窗口,在这里输入以下参数:
Host: www.moodisk.com                ---指定cvs服务器域名或者IP地址。
Repository Path: /erpv719            ---指定工程代码库目录,在配置cvs服务时定义的。
User: erpv719                        ---cvs账号,在配置cvs服务时定义的。
Password: *********                  ---cvs账号的密码,在配置cvs服务时定义的。
Connect Type: pserver
勾选“Validate connect on finish”和“Save Password”,最后点击“finish”按钮保存并测试是否能与cvs建立连接,一般会失败。这是会创建一个cvs链接“:pserver:erpv719@localhost:/erpv719”。
再配置:
-->window-->Preferences...-->展开"Team"-->展开"CVS"-->Ext Connection Method: 勾选“Use another connection method type to connect”,Connection Type选择pserver
2、检入一个项目:
鼠标右击一个项目-->Team-->Share project...-->选择cvs链接“:pserver:erpv719@localhost:/erpv719”-->next-->next。如果网络正常,那么这时会把整个项目代码检入cvs服务器中。
3、检出一个项目:
打开CVS Repositories窗口(Window-->Show View-->Other-->展开CVS-->CVS Repositories-->OK),右击erpv719项目,然后点击"Check Out As..."
4、当修改了工程代码后提交新代码:
鼠标右击工程-->Team-->Commit...

三、配置ssh通道(可选):

有时CVSD服务器放在公网上面,端口2401往往被封,那么如果开启了22号端口就可以配置ssh隧道,从而翻越防火墙。
1、在cvsd服务器上创建用户cvs:
useradd -m cvs; passwd cvs
2、所有的客户端下载安装软件plink.exe并放到c:\windows\system32目录下,然后在执行如下命令:
plink -N cvs@www.moodisk.com -pw erp654321 -L localhost:2401:192.168.1.22:2401
---注意:192.168.1.22是cvsd服务器的本地网卡地址。