页面开始:
$(document).ready(function(){
...
});

class="no_update" 下所有input操作

    var obj = $('.no_update input').each(function(){
           $(this).attr("disabled","disabled")
    });
    
    select:
    
    var obj = $('.no_update select').each(function(){
        $(this).attr("disabled","disabled")
    });

解析json:
var arr_link = <?php echo json_encode($arr_link)?>;

var arr = arr_link[id];
$.each(arr,function(key,val){
     alert(key+val);
});

隐藏:
$('#product').css("display","none");

去除样式:
$('#product').removeAttr("Style");

清空:
$("#category_id").empty();

追加:
$("<option value='0'>请选择</option>").appendTo("#category_id");

下一个节点
var obj = $(change_obj).next().next();

绑定事件:
$('#text_id').change(function(){
........
});

get by name:
var name = $('input[name^="start_day"]');
    $.each (name,function (key,val){
        alert(val.value);
    });

Select option:
var subregion_id = $('#subregion_id_'+ad_id).get(0);
    subregion_id.options.length = 0;
    subregion_id.options[0] = new Option('请选择',0);
subregion_id.options[i+1] = new Option(result[i].TypeName,result[i].TypeId);

var subregion_id = $('#subregion_id_'+ad_id).val();
var subregion_text=$('#subregion_id_'+ad_id).find("option:selected").text();

ajax 返回:
$.ajax({
            url: '/ajax/i.php',
            data: 'type=get_category&type_id='+type_id,
            type: 'GET',
            dataType: 'json',
            success: function(result){
            if(result){
                for(var i=0; i< result.length; i++){
                    $("<option value='"+result[i].category_id+"'>"+result[i].category_name+"</option>").appendTo("#category_id");
                }
            }
            }
        });
        
绑定时间框:
var cal = Calendar.setup({
        onSelect: function(cal) { cal.hide() },
        showTime: false
    });
    var start_day = $('input[name^="start_day"]');
    $.each (start_day,function (key,val){
        cal.manageFields(val.id, val.id, "%Y-%m-%d");
    });

关键字自动下拉框;
$("#keyword").autocomplete("getkeyword.php?type=get_names", {
        width: 363,
        autoFill: false,
        mustMatch: false,
        selectFirst: false,
        minChars: 0
    });
    $("#keyword").result(function(event, data, formatted) {
        if (data) {
            $("#keyword_id").val(data[1]);
        }
    });
    



来源:blog.sina.com.cn/s/blog_6b7d19300100pvxf.html
它是 $(document).ready(function(){...})的简写形式,或者: $().ready(function(){...})
意思就是页面载入后执行...的代码.是jq中最重要的一句话,基本上是必须的.所有页面载入有执行的代码都要写着里面
缘起:
   发现一兄弟写的代码如下:我一查Jquery没有查到,Js没学好,哈,原来是Js的函数:



于是,探讨后他写出如下,我自己改造了下,这个call,


网上有博客说这个call,补充如下,原文URL丢失了,抱歉,粘贴如下:

阅读全文
分组信息输出有点意思:
console.group("第一组信息");console.log("%s,%d",string,int); console.groupEnd();
console.time() console.endTime()结合在一起能查看脚本执行时间
------
同时firebug也支持debugger关键字了:
firebug:  有了这个firebug的新的debugger后,就会停留在那儿,可以查看里面的参数(脚本-》监控)及函数(脚本-》堆栈)情况。
microsoft script editor: IE下的,不太用,可能用下。



------


   前言:Javascript自己有这样一个函数输出,其目的在于对变量的跟踪,而后端有FirePHP变量输出在Header头中,
见:http://jackxiang.com/post/1117/
而前端有Js的console.log()来实现输出到FireBug中,以提高快速开发和调试逻辑等错误的目的(如果对于多维数组一个一个去打印,没这个来得快),
也就是本文想要描述的话题,尽管陈旧,但还是值得借鉴和实用的价值。


在FireBug控制台中输出:

========
自己试了下果然有这个功能:

FireBug输出:


参考来源:
http://hi.baidu.com/%C4%AD%C4%AD%CF%C4a/blog/item/b5d197ae118209ecfaed501d.html
近在做项目时经常会用到jQuery,无意中获得了Dreamweaver的jQuery语法提示插件,在项目开发时带来了很多方便。下面来介绍一下。

其实该Dreamweaver CS5绿色版的jquery代码提示插件是提取于原版之中的,所以简单实用,无需安装,只需要覆盖相应的目录里即可。

点击此处下载插件,然后进行安装:
  目前最新的Jquery1.4.2:  
1、把shared、Extensions、codehints三个文件夹复制到:
WinXP:C:\Documents and Settings\Administrator\Application Data\Adobe\Dreamweaver CS5\zh_CN\Configuration
win7:C:\用户\Administrator\AppData\Roaming\Adobe\Dreamweaver CS5\zh_CN\Configuration
下即可。
注意:Administrator是你实际登录的用户的文件夹;AppData是隐藏文件夹。
我的是:C:\Documents and Settings\jackxiang\Application Data\Adobe\Dreamweaver CS5\zh_CN\Configuration
2.启动Dreamweaver CS5即可,语法提示功能如下:
盗链,去掉了。
发现一个问题:先建立的站点才行,以前建立的只能$提示,而$("#XXX"). 这儿还是老的提示,呵呵,自己再重新建立一次试试,发现已经Ok的html文件还是不行,只有自己新建立的.html才提示,得新建立,也就是得从刚开始就纳入管理才能提示,这个插件这块上处理不是很好,EOF。
Jquery一句话全选的代码,实践Ok:$("input[type='checkbox']").attr("checked","checked");


阅读全文
经常我们在开发中需要打开并修改host文件,如何更快找到呢?
host文件的路径是:


我的快捷方法是:
第一步:先同时按下 微软图标 + r ,弹出:运行框
第二步:在框中输入: drivers  ,系统会自动打开这个目录:C:\WINDOWS\system32\drivers
第三步:自己用鼠标点里面的etc目录进去即是host文件的所在。
要求:当点击+按钮时,添加一个File位置,上传控件,当想删除这个上传文件控件时,点-取消。
问题:原有DOM上的三个上传文件框可以绑定上删除一个的事件,但是,通过AddInput.click生成的就没有。
如下:


解决:使用Jquery的Live Query插件,删除新加的文件控件的JS代码改为,livequery这个加上:
<script type="text/javascript" src="/js/jquery/jquery.livequery.js"></script>

参考来源:
使用Jquery的鲜活绑定(lively-ness),解决“新添加的元素,事件不可用”的问题:
http://www.cnblogs.com/yongzhi/archive/2008/11/27/1342096.html


附录如下:
添加新上传文件Js事件:


steven jobs总算是走了,但蛮怀恋他老人家啊,尽管到目前我也买不起个苹果的本本上网什么的,但最近在同事的aire机上提前体验了下苹果的笔记本本,体验上创意上确实不错,于是也就立即逛逛他的苹果网站,发现也是用PHP+APache+Oracle做的,激发了我的兴趣,发现是用PHP连接Oracle的Apache架构实现,抓包发现服务器确实是:Apache/2.2.3 (Oracle),我不太明白ORacle这块,但同时看网上有这样的问题的提出,老大们,你们的php连oracle难道没有连接池问题吗?稍多几个人访问web那oracle可怜的百十个连接就用完了,你们是怎么解决的?沿着这个问题做了下简单的分析和查找资料,也就是如何解决这个贴纸儿的问题:http://blog.fabrichina.net/archives/250,

抓包看看再说,URL:
http://www.apple.com/global/nav/scripts/shortcuts.php?q=ja&section=global&geo=us&transport=js


于是找了网站上的两篇文章,说明为什么能用PHP连接Oracle并不用在乎它的连接数,Oracle自己采用了连接池的中间件技术:
http://martincarstenbach.wordpress.com/2010/05/11/compiling-php-5-3-2-for-oracle-11-2-and-apache-2-2-3/
http://archimedes.bitfine.com/dms/building-php-for-oracle.html

同时还发现有其它这样的server在苹果网站上得到初步证实:
获得的包返回情况如下,这个Server :Omniture DC/2.0.0,估计是:数据库驻留连接池 (DRCP) 的缩写。
标识补充:Oracle 数据库 11g 包含一个专门针对需要高可扩展性的应用程序的新特性:数据库驻留连接池 (DRCP)。通过 DRCP,我们可以在不同应用程序进程间共享数据库连接,从而更高效地使用服务器资源并全面提升吞吐量。Zend Server 随附的 PHP OCI8 扩展(目前为 V1.3.5)包含对 DRCP 的即用支持,使开发人员可以立即在其 PHP 应用程序中使用该特性。来源:http://blog.fabrichina.net/archives/250,再次查了下这方面网上关于ZendServe支持Oracle和Apache架构方面的r相关的文章,URL摘录如下:
(1)使用Zend Server 和Oracle 构建企业级PHP 应用:
http://www.zendchina.net/?action-viewnews-itemid-621
(2)11g新特性:常驻连接池DRCP(转):
http://space.itpub.net/23754390/viewspace-687268
(3)Oracle DRCP与PHP实际应用的区别:
http://database.51cto.com/art/201004/196170.htm

尝试访问苹果的URL如下,主要是证明这个Omniture Dc/2.0.0服务器的存在:
http://metrics.apple.com/b/ss/appleglobal,applestoreww,applestoreus,applestoreusconsum,applestoreamr,applestoreamrconsum/1/H.20.3/s9545065233069?AQB=1&ndh=1&t=6/9/2011%2023%3A28%3A57%204%20-480&ce=UTF-8&pageName=AOS%3A%20home%20-%20Return&g=http%3A//store.apple.com/us%3Fmco%3DNzc1MjMwNA&r=http%3A//store.apple.com/us&cc=USD&ch=AOS%3A%20home&server=a50028560&v1=AOS%3A%20TopNavigation%20%7C%20Store&h1=home&c2=AOS%3A%20US%20Consumer&v3=AOS%3A%20US%20Consumer&v4=AOS%3A%20home&c6=%3A%20AOS%3A%20home%20-%20Return&c8=AOS%3A%20home&c19=AOS%3A%20US%20Consumer%3A%20home&v19=AOS%3A%20US%20Consumer%3A%20home&c20=AOS%3A%20US%20Consumer&s=1400x1050&c=24&j=1.7&v=N&k=Y&bw=1400&bh=409&p=IE%20Tab%20Plug-in%3BAlipay%20security%20control%3BJava%20Deployment%20Toolkit%206.0.260.3%3BAliWangWang%20Plug-In%20For%20Firefox%20and%20Netscape%3BShockwave%20Flash%3BThunder%20DapCtrl%20NPAPI%20Plugin%3B&pid=AOS%3A%20home%20-%20First&pidt=1&oid=Nzc1MjMwNA&oidt=1&ot=A&oi=1&AQE=1

对该URL抓包返回头如下:


最后,只能模糊判断苹果网站的架构是基于这篇PPT来实现PHP和Oracle进行通信的,这个过程得到了学习,苹果在自己网站上采用的技术也很独特,佩服佩服啊:
jQuery

主页:http://jquery.com/
设计思想
简洁的思想:几乎所有操作都是以选择DOM元素(有强大的Selector)开始,然后是对其的操作(Chaining等特性)。

优点
小,压缩后代码只有20多k(无压缩代码94k)。
Selector和DOM操作的方便


Chaining:总是返回一个jQuery对象,可以连续操作。
文档的完整,易用性(每个API都有完整的例子,这是其它框架现在不能比的),而且网上还有很多其它的文档,书籍。
应用的广泛,包括google code也使用了jQuery。

使用jQuery的站点:http://docs.jquery.com/Sites_Using_jQuery
核心的开发团队和核心人员:John Resig等。
简洁和简短的语法,容易记。
可扩展性:有大量用户开发的插件可供使用(http://jquery.com/plugins/)
jQuery UI(http://jquery.com/plugins/,基于jQuery,但和核心的jQuery是独立的),不断发展中。
友好和活跃的社区:google groups: http://docs.jquery.com/Discussion
事件处理有很多方便的方法,如click,而不是单一的addEvent之类的。

缺点
由于设计思想是追求高效和简洁,没有面向对象的扩展。设计思路和Mootools不一样。
CSS Selector的速度稍微有些慢(但是现在速度已经大幅提高)

Ext JS
主页:http://extjs.com/

设计思想
组件化,推进RIA(Rich Internet Application)的应用。

优点
强大的UI,而且性能不错,这是其最大的优点。
速度快,管是UI还是其它模块。
100%面向对象和组件化的思想,一致的语法,全局的命名空间。
文档的完整,规范,方便。
核心的开发团队,Jack Slocum等。
活跃的社区,迅速增加的用户量。
模块化实现,可扩展性强。
所有的组件(widgets)都可直接使用,而无需进行设置(当然,用户可以选择重新配置)。

缺点
稍复杂。
为重量级的框架(包含大量UI),体积大。如果导入ext-all.js,压缩后也有近500k。

ExtJs与jQuery比较

1.EXT体积大,jQuery更专注于简化最基础的开发工作.所以使用起来,也就感觉更像是使用原始的js进行开发一样

2.EXT界面美观,jQuery一般

3.EXT代码复用性强

4.EXT兼容性还是有点小问题,jQuery兼容性良好

5.EXT不易调试,

6.Ext使页面是只留下body,搜索引擎无法收录这样,不利于SEO排名

7.jQuery的事件绑定更强

Ext简化了很多工作,让开发更简洁,更方便,但也带来了很多麻烦,给我们留下了更小的选择空间,局域网里面我们可以使用EXT,但是在互联网上请优先jQuery
打包下载:

(一)普通三角形的形状如下(它是1,3,5,7,9):

顺便对比下杨辉三角如下(它是1,2,3,4,5):


阅读全文
xdebug.max_nesting_level=30 //这个值不能太少,尤其是核心Core.php(特别指:框架核心),30较为靠谱,否则出现如下:
PHP Fatal error:  Maximum function nesting level of '10' reached, aborting! in /data/htdocs/jackxiang.com/libraries/core.php on line 315

vi +315 /data/htdocs/jackxiang.com/libraries/core.php
313     public static function autoload ($class)
314     {
315         if (class_exists($class, FALSE))


阅读全文
右键单击该项目,从中您希望PHPDoc生成和选择Generate PHP Doc 或Project | Generate PHPDoc 或按Alt+D,该PHPDoc生成对话框将打开。

以后直接这样做:右键单击该项目,按Alt+D,后面就可以选择项目进行生成PHPDoc.
---
C:\Documents and Settings\jackxiang\Zend\workspaces\DefaultWorkspace\doc
生成文档HTML位置如下:
file:///C:/Documents%20and%20Settings/jackxiang/Zend/workspaces/DefaultWorkspace/doc/index.html
通过测试和在PHP高级群里询问得知默认指向了我的一个虚拟机的网站,但是我们往往配置是这样的:

这个*.conf不知Apache去指向哪个虚拟主机了,于是,就在上面加了一个,成这样了:



经测试,直接输入IP访问时就是指向了/usr/local/apache2/htdocs 目录了,呵呵。
PHP高级群里有兄弟问:

要放在所有的VirtualHost前面吧?
答:
放后面也没关系。
一样的,我试了。

---------------------再次实践总结----------------------------
再次配置时,发现用apache的虚拟主机挂了好几个域名。  然后几天遇到的问题是如果直接用ip访问,或者用了一个未配置的域名的访问,那么刷出来的页面竟然不是apache的欢迎页,而是虚拟主机配置中的第一个域名。
原因分析并实践Ok如下:
   apache网站解释为当一个请求到达的时候,服务器会首先检查它是否使用了一个能和
NameVirtualHost相匹配的IP地址。如果能够匹配, 它就会查找每个与这个IP地址相对应的
配置段, 并尝试找出一个ServerName或ServerAlias配置项与请求的主机名相同的。如果
找到了,它就会使用这个服务器的配置。 否则,将使用符合这个IP地址的第一个列出的虚拟主机。
其实这个时候,比如用ip直接访问,IE浏览器会提示他已经超出访问范围了。。
解决这个的问题的方案是添加下面的配置到虚拟机主机配置文件中(也就是如果有虚拟机后Apache不会去默认的那个DocumentRoot "d:/wamp/www/" 里,如果用IP访问Apache而是会去找第一个虚拟机的DocumentRoot ),要想在配置虚拟域名后还能指向当前的默认的那个DocumentRoot ,则在虚拟机配置的第一个加上一个指向默认的那个DocumentRoot目录的虚拟机配置即可)。
如下配置:    


===========================================================================
apache 设置禁止IP直接访问:
刚好相反的对防止用IP访问到网站的方法,附录:
1.建一个虚拟机提示错误
apache虚拟主机默认情况下ip地址方式访问对应第一个虚拟主机,所以我们可以先建一个指向错误页面的虚拟主机,达到禁止用ip访问网页的目的。
<VirtualHost *:80>
    ServerAdmin ngnix@qq.com
    DocumentRoot "/usr/local/apache2.2.22/htdocs"
    ServerName 192.168.3.140
</VirtualHost>
echo "请不要用IP访问" >/usr/local/apache2.2.22/htdocs/index.html
2.直接限制访问
<VirtualHost *:80>
    ServerAdmin ngnix@qq.com
    DocumentRoot "/usr/local/apache2.2.22/htdocs"
    ServerName 192.168.3.140
    <Directory />
    Order deny,allow
    Deny from all
    </Directory>
</VirtualHost>
注意:在配置虚拟主机的时候,因为http.conf默认配置了默认主机,所以可以将http.conf里面配置主机的部分全部注释掉,所有主机都在http_vhost.conf里面配置。
php json_encode函数不支持BIGINT的问题
新浪微博的32位id,twitter的id过大超过BIGINT也遇到类似的问题,发现是php的json_decode函数不支持62位的BIGINT, 溢出所致.
php好像不分类型但它也依赖于CPU位数,但mysql bigint  范围 -9223372036854775808 到 9223372036854775807

在新的php(5.4版本) json_decode里倒是有一个开关”JSON_BIGINT_AS_STRING”开关,可以使json_decode默认把BITINT当成string处理.
而我们的实际情况是,更新php的版本的速度不会有那么快.而且大部分情况下,咱们也控制不了具体使用哪个php版本,只好采取一个折中
办法:
把微博API返回的json字符串预处理一下,然后再调用json_decode.
也就是把

换成string的类型:

代码片段如下,希望对和我类似情况的人有用.


截取部分实验了一把,如下:

运行如下:

Json中id这个给转成了sting,输出正常,而e这个json的键值,给当成了浮点数,输出为:

通过var_dump查其类型分别如下:


参考:http://drupal.org/node/985544
一,调试模式查看所有变量和数组

1、设置配置文件中的 debuging的值为true。即开始调试(设置完这一步,一般情况下在浏览页面的时候就可以看到一个弹窗了,里面有在这个页面里的所有smarty变量。如果没有弹出看下一步)。



2、在模版里输入{debug},就可以看到这个模版里的变量了。
如果要关闭掉调试控制台,设置变量 $debugging 为 false 就可以了。

不同的情况那个debug是不一样的,实际中特别注意要$tpl->caching = false;不能缓存时看全部DB输出的变量:


在模板中是这样:


在smarty编译后的模板里是这样的:


要想能真正报错其实践的结论是,三个都打开:
1.error_reporting(E_ALL);打开,否则有错容易报不出来:

2.$tpl->debugging = true;

3.在输出页面里加入调试变量:

二,非调试模式下查看变量和数组,也就是从弹出框中所有变量只看一部分,以方便调试。

1、Smarty下如何查看数组:
   如果你在使用smarty时,想查看某变量的内容,而又不想打开smarty debug,或smarty debug的输出不能满足你的要求,可以这样用。
如果是查看数组,应当

我自己试了下是这样:

会输出到页面里,不是弹出框。
注意:这里用@是来保证把变量当做一个整体对待,否则会遍历这个array.
查看变量:



2、Smarty下如何调试数组,无论这个:$tpl-> debugging   =   TRUE;  或者:False都可以:
比如要调试数组$array

实践如下:


调试变量就

偶的实践:


请注意:数组都有一个@,呵呵。阅读全文
直接下载后,放到Apache htdoc下就能用的示例下载,在框中输入j即可看到效果:


其插件会向后台发送Ajax,Ajax请求:
http://localhost/jquery_php_autocomplete/getindex.php?q=j
返回:
jack
jackson
jackxiang
前台通过Js对这串数据做逻辑和展现,这样一种思路。
阅读全文
   Fiddler 2对Flex开发和联调很有用,因为Flash Player的某些HTTP请求调的不是浏览器的HTTP接口,而是自己实现的,这类请求用httpwatch/firebug下是观察不到的。这类请求 就是文件上传请求(Flash Player按照RFC1867规范自行发的请求)。
    背景:在我们的开发测试中,往往是一些表单的提交,还时常带着Cookie,Session的后台验证才能提交,而我们最关心的还是提交,而不是前面的验证,在实际中往往浏览器提交一次后,再回来做二次测试时,其HTML数据控件已经没有了,得再次输入数据,这给我们带来了很大的不方便,为此,我们常常用的FireBug这样的插件也不能满足我们的需求,在这样的背景下催生出一个叫Filddler2的工具,能带给我们惊喜,也就是解决了这个问题,可以让我们自己对后台做多次调试,其模拟了Http协议的Cookie,Session表单数据提交,带来了方便,步骤如下:

(1)启动Filddler程序后,找到一个需要再做一次的URL连接, Firefox调试确保Filddler2界面左下角是:
   Capturing | All Processes | 空[这儿是可以阻塞的地方] | 通过个数是空[会显示捕获个数]。
   确保是让其在做下面模拟的URL时让其阻塞,后我们再放开,就再次模拟人为进交一次,这里带Session,Cookie等,给我们带
   来了实实在在的方便。

(2)打开Firefox后,工具>选项>网络>设置>手动配置代理勾选上>Http代理:127.0.0.1>端口:8888

(3)看步骤1中有All Processes  空[这儿是可以阻塞的地方],点可以阻塞的地方让其出现黑色T的红色背景框即可。

(4)点击Fiddler面板上某个需要再次调试的URL,右键-》Replay -》Reissue Requests,如直接点它,会自动出现一个一样的连接。
  如果按住Shift按扭再点Reissue Requests,会出现输入框让你输入要模拟多少次,这儿可以用来做简单的并发测试滴,我们就模拟一次。

(5)然后,看第4步,就是放开我们的那个阻塞的按钮,也就是然后取掉断点状态。

(6)点击软件上的“Resume All”,释放被拦截的请求,此时30多条记录就会并发向后台请求。
        新版本V4里找不到Resume All按钮了,直接在第3步里的下面命令行里输入 : g or  go  Resume all breakpointed sessions  g 也成。
(7)此时,观察我们待测试的页面,会自动弹出窗口,提示语句,SQL等等。

  可能出现的问题,如8888端口被占用会配置了代理后,Firefox访问页面出现访问不了,如何排查如下:
    如果Windows中查看Fiddler的8888端口是否开启或者被其它程序占用的简单方法。

   还不明白,可以参考:http://jackxiang.com/post/735/  如何通过端口看是哪个程序占用的方法。
   我对自己的博客修改文章做了下实验是Ok的,如下:
   1)自己先用Firefox保存一下自己写的这篇博文,并把这个保存的URL给找出来,http://jackxiang.com/admin.php,删除Fiddler的其他
的URL。

   2)用其他浏览器修改一个博文的文字和1保存时的不一样。

   3)直接跳过到上面第4步,再Replay一次,也就是不用柱塞,直接再提交一次,后返回200

   4)看DB,发现我的博文又给修改回1步骤时的文字了,模拟成功,Yeah。

   最后,还是上一张图吧,除开Firefox设置代理外,都放一块,有兴趣可以摸索摸索:阅读全文
post_max_size最大不能超过2048M:
特别注意,32位Linux当设置php.ini中的:post_max_size => 2048M 时会出现问题,最大只能是:post_max_size => 2047M!可能64位的机器没有这个问题。
为了大文件上传,将post_max_size=2048m,后来的表单提交完全没反应,通过高人指点,查看 sylog得知超过了最大值2047!
现象:没有反映,出现警告如下:
PHP Warning: Unknown: POST Content-Length of 0 bytes exceeds the limit of -1149239296 bytes in Unknown on line 0
最后查了下咨料发现:
Note: PHP allows shortcuts for bit values, including K (kilo), M (mega) and G (giga). PHP will do the conversions automatically if you use any of these. Be careful not to exceed the 32 bit signed integer limit (if you’re using 32bit versions) as it will cause your script to fail.
将POST_MAX_SIZE设为2047M,解决问题.  
阅读全文
以前查看PHP的php.ini文件的位置如下命令:
方法一:

方法二:


我今天看了下PHP的帮助命令:
php --help
发现有一项存在:
--ini            Show configuration file names
于是以后看php.ini的位置是这样的,更简单,更适用:
C++下有这一个Yaml的解析包,PHP也有一个Yaml的解析包,这样两者就能进行对文件的解析是一个规则,达到统一的目的,双方就可以通讯,这样语言之间对配置的解析一样,上层通过Socket来通信统一,进而实现大系统的搭建和和谐,呵呵。

首先要有CMake环境,需要编译一个CMake出来,然后才是在下载下来的文件目录下运行这个Cmake:
tar -zxvf cmake-2.8.4.tar.gz
首先,需要下载安装Cmake;
wget http://www.cmake.org/files/v2.8/cmake-2.8.4.tar.gz
安装cmake;

其次,下载YAML的C++解析器 yaml-cpp ,URL为:http://www.oschina.net/p/yaml-cpp
编译:


root@116.255.139.240:/home/admin/c++/yaml_4_C/yaml-cpp# cmake  -DBUILD_SHARED_LIBS=ON
-- The C compiler identification is GNU
-- The CXX compiler identification is GNU
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Performing Test FLAG_WEXTRA
-- Performing Test FLAG_WEXTRA - Success
-- Configuring done
-- Generating done
-- Build files have been written to: /home/admin/c++/yaml_4_C/yaml-cpp
root@116.255.139.240:/home/admin/c++/yaml_4_C/yaml-cpp# make
Scanning dependencies of target yaml-cpp
[  3%] Building CXX object CMakeFiles/yaml-cpp.dir/src/emitter.cpp.o
[  6%] Building CXX object CMakeFiles/yaml-cpp.dir/src/emitterstate.cpp.o
[  9%] Building CXX object CMakeFiles/yaml-cpp.dir/src/simplekey.cpp.o
[ 12%] Building CXX object CMakeFiles/yaml-cpp.dir/src/parser.cpp.o

......

[ 96%] Building CXX object test/CMakeFiles/run-tests.dir/spectests.cpp.o
Linking CXX executable run-tests
[ 96%] Built target run-tests
Scanning dependencies of target parse
[100%] Building CXX object util/CMakeFiles/parse.dir/parse.cpp.o
Linking CXX executable parse
[100%] Built target parse


然后呢: make ,后生成:
/home/admin/c++/yaml_4_C/yaml-cpp/test3
libyaml-cpp.so.0.2.6
libyaml-cpp.so.0.2 -> libyaml-cpp.so.0.2.6
libyaml-cpp.so -> libyaml-cpp.so.0.2


查看H文件位置:
root@116.255.139.240:/home/admin/c++/yaml_4_C/yaml-cpp# find . -name "yaml.h"
./include/yaml-cpp/yaml.h
最后,进行Yaml的代码解析测试:
1)建立目录:
mkdir test3
目录位置:root@116.255.139.240:/home/admin/c++/yaml_4_C/yaml-cpp/test3
2)写入C++测试代码
1.vi test.cpp
加入:

3).把yaml.h拷贝到test3的目录下来:

4)后进行编译编译:
g++ -o test test.cpp -I../include/ ../libyaml-cpp.so

5)运行测试
root@116.255.139.240:/home/admin/c++/yaml_4_C/yaml-cpp/test3# ./test
./test: error while loading shared libraries: libyaml-cpp.so.0.2: cannot open shared object file: No such file or directory
6)解决问题:
/home/admin/c++/yaml_4_C/yaml-cpp/test3
libyaml-cpp.so.0.2.6
libyaml-cpp.so.0.2 -> libyaml-cpp.so.0.2.6
libyaml-cpp.so -> libyaml-cpp.so.0.2
root@116.255.139.240:/home/admin/c++/yaml_4_C/yaml-cpp# cp libyaml-cpp.so  /usr/lib/
root@116.255.139.240:/usr/lib# ln -s libyaml-cpp.so libyaml-cpp.so.0.2
7)再次执行,得到解决:
再执行就不报错了,原来是没有把这个so给放到/usr/lib下,再就是没有给重新软链接一个,Ok了。
root@116.255.139.240:/home/admin/c++/yaml_4_C/yaml-cpp/test3# ./test
root@116.255.139.240:/home/admin/c++/yaml_4_C/yaml-cpp/test3#
8)自由发挥,放到实际的开发中去。

Yaml实际解析测试:

component.yaml这个Yaml文件的内容:

编译:

测试Yaml解析是否成功:

解析成功!!!



最后,当然还有纯C语言的,来解析 YAML 1.1 数据,其编译估计差不多,下载URl:
http://www.oschina.net/p/libyaml

建议用eclipse来开发C++,还有PHP,因为eclipse 有PHP的插件,也有C++的插件,我是用的Zend for eclipse,现在eclipse还有一个Yaml的编辑插件,相关介绍情况如下:
安装YEdit
  YEdit是一个在Eclipse上编辑YAML文件的插件。当我们我们使用Python进行App Engine的开发,会涉及编辑一些YAML文件,这个插件提供了较好的支持。
    这个还是通过Eclipse的更新管理器来完成安装,在对话框中的在Work with中输入http://dadacoalition.org/yedit,然后勾选该插件,然后不断下一步,稍等片刻,安装成功。
eclipse 下的PHP插件参考:http://chenling1018.blog.163.com/blog/static/1480254201012234015728/
在PHP的高级编程群里有位兄弟问这个问题,于是我就写一个如下:
在/tmp/a.txt后面每行追加jackxiang.com,PHP代码如下:


注意:
1. file_put_contents的第一次写和第N次写的参数不同。
2.注意file读取出来的数组中有换行符号的,需要通过str_replace去掉。
3.Linux下Win下不同的回车
最后,直接全部读取出来进行替换也可以的。
其实,这个去换行符号也是在网上找的,有两种:
第一种:
$content=str_replace("\n","",$content);
echo $content;


第二种:
$content=preg_replace("/\s/","",$content);
echo $content;

呵呵。
分页: 16/18 第一页 上页 6 7 8 9 10 11 12 13 14 15 16 17 18 下页 最后页 [ 显示模式: 摘要 | 列表 ]