经常对提交过来的数据进行双重循环,或者如下的for循环,但是数组为空时会报错:

这里的$tstSumOptionArr是由数据库查询出来的,有可能为Null,所以PHP在foreach 一个Null时会报警,而在前面强制一个这个是数组就不会报警了。
否则,你可能会这样来处理,如下:
当一个网站项目进入运营维护阶段以后,不会再频繁地更新全部源文件到服务器,这个时间的修改大多是局部的,因此更新文件只需更新修改过的文件,其他没有修改过的文件就没有必要上载到服务器。但一个稍微上规模的网站项目,文件是很多的,而且对于团队协作开发更难知道每次修改到哪些文件,这时候SVN的作用发挥出来了。
主要优点:打开导出来的文件,文件夹层次是保留不变的,这样你可以打包上传服务器,然后解压覆盖。不用担心漏传文件,也不用担心会覆盖错文件。
阅读全文
Jack's Note:
共享内存再顺带提一下消息队列Message Queue(也是在System V IPC函数组中),消息队列似乎可以视为另一种共享内存,只是数据存储的方式有些不同。简单来说,就是每个key对应一个队列,每个队列可以保存多个数据,数据间按照先进先出的原则进行操作。
这个简单的方式,健壮性超过大多的 免费MQ server,限制是只能在Unix下用
Linux编译php时option加上--enable-sysvmsg
PHP编译Configure如下:

出现编译问题如下:

php在make过程中出现“usr bin ld cannot find lltdl”错误,详细错误如下:
/usr/bin/ld: cannot find -lltdl
collect2: ld returned 1 exit status
make: *** [libphp5.la] Error 1
在Google上搜了好久,终于找到答案,原来是在编辑php时添加的“–with-mcrypt”选项造成[上面的编译暂时去掉了–with-mcrypt就Ok了]。所以“usr bin ld cannot find lltdl”错误解决办法如下:
1、如果不需要mcrypt,那么编辑php时去掉该选项,然后再make、make install。
2、如果需要mcrypt,那么需要安装libltdl
libltdl在libmcrypt软件包中就有,具体过程:

经过测试,果然去掉“–with-mcrypt”选项编译通过。
send.php

Receive.php
yum install libevent-dev 安装libevent
yum install libevent
PHP Extention: http://pecl.php.net/package/libevent/0.0.5



再就是:自己编译 http://libevent.org/

缘起:PHP5的先进之处在于,你可以用stream_select()处理几乎所有的stream-例如你可以通过include STDIN用它接收键盘输入并保存进数组,你还可以接收通过proc_open()打开的管道中的数据。
目的:想用这个函数进行对文件句柄进行监控,其并不是想用于网络的socket句柄,为此做了如下试验:
探索:能否用PHP的stream_select的方式对CentOs下的串口进行监控呢?经过一系列的研究,发现是可以进行多串口的监控的。
研究: 发现会报错,stream_select(): cannot represent a stream of type dio as a select()
解决: 最后,见代码吧。代码下载:
如果,你想时间更短一点,E文是这样说的:
If you want to set an absolute maximum execution time for stream_select in a loop, it's important to decrement the max_time value passed to stream_select.修改了一下的情况,好像效果不明显,呵呵:

完善的第三个版本备案下载,这个实现了对多个串口的同时读写。By:jack
  其实主要是对这个超时机制的理解。见下面这段代码的超时:

插曲:dio.raw://[device]
for raw streams anddio.serial://[devicefor serials streams. 这两种stream有什么区别啊?用serial不行,而用raw就Ok了。但是会出现上面的报错:stream_select(): cannot represent a stream of type dio as a select()
php有个libevent扩展,我觉得这个扩展应该可以有更广泛的用途,比如:
(1)异步的服务器端开发框架.
(2)类似unix下的tail命令行.
(3)用php和ZeroMQ实现的一个事件驱动服务器端
http://blog.sina.com.cn/s/blog_60b9ee7f0100qdmh.html
搞录:
问题:
有没有办法在php中实现多线程呢?
假设你正在写一个基于多台服务器的php应用,理想的情况时同时向多台服务器发送请求,而不是一台接一台。
可以实现吗?
回答:
当有人想要实现并发功能时,他们通常会想到用fork或者spawn threads,但是当他们发现php不支持多线程的时候,大概会转换思路去用一些不够好的语言,比如perl。
其实的是大多数情况下,你大可不必使用fork或者线程,并且你会得到比用fork或thread更好的性能。
。。。

PHP5的先进之处在于,你可以用stream_select()处理几乎所有的stream-例如你可以通过include STDIN用它接收键盘输入并保存进数组,你还可以接收通过proc_open()打开的管道中的数据。

日常生活中:
如对多个URL进行异步访问,那个curl_multi一族函数的函数是循环,而用这个就是真正调用类似Linux下的select函数:
实践安装步骤如下:
wget http://pecl.php.net/get/libevent-0.0.4.tgz
checking for libevent support... yes, shared
checking for libevent headers in default path... not found
configure: error: Cannot find libevent headers
root@192.168.1.108:~/software/libevent-0.0.4# yum -y install libevent-devel   libevent
不安libevent-devel会在具体安php的libevent扩展时出现找不到.h文件,用指定路径也成也就是下面的:
最好还是安上吧,但要是版本低于1.4还是指定的好,可能会出现问题,这样:
在安php的libevent扩展时加上 -with-libevent=/usr/local/webserver/libevent/:
./configure  -with-libevent=/usr/local/webserver/libevent/
---
原因是如下的包没有安装
libevent-devel
把此包安装上去就好了
yum -y install libevent-devel

root@116.255.139.240:~/software# rpm -qa|grep libevent
libevent-1.4.13-1
root@116.255.139.240:~/software# rpm -ql libevent-1.4.13-1
/usr/lib/libevent-1.4.so.2
/usr/lib/libevent-1.4.so.2.1.3
/usr/lib/libevent_core-1.4.so.2
/usr/lib/libevent_core-1.4.so.2.1.3
/usr/lib/libevent_extra-1.4.so.2
/usr/lib/libevent_extra-1.4.so.2.1.3
/usr/share/doc/libevent-1.4.13
/usr/share/doc/libevent-1.4.13/README

libevent的官网:http://libevent.org/
wget https://github.com/downloads/libevent/libevent/libevent-2.0.16-stable.tar.gz

yum -y install libevent-devel  主要是防止编译PHP扩展Configure时出现找不到.h文件,有了它就不用指明:-with-libevent=/usr/local/webserver/libevent/
./configure prefix=/usr/local/webserver/libevent/

扩展安装:http://pecl.php.net/package/libevent
wget http://pecl.php.net/get/libevent-0.0.4.tgz
/usr/local/webserver/php/bin/phpize
./configure  -with-libevent=/usr/local/webserver/libevent/
自己安或者yum,注意:yum安可能会出现问题:由於 PHP libevent 需要搭配C 的 libevent 1.4 以上版本 , 所以並非每個 Linux 套件都有 , 例如我的 CentOS 的 libevent 版本就比較舊 , 因此要自行編譯 , 以下就說明 CentOS 5.4 下成功編譯 PHP libevent 的步驟,PHP Warning:  stream_select(): supplied argument is not a valid stream resource .
root@192.168.1.108:~/software/libevent-0.0.4# ./configure  -with-libevent=/usr/local/webserver/libevent/
root@192.168.1.108:~/software/libevent-0.0.4# make;make install
......
........
Build complete.
Don't forget to run 'make test'.
Installing shared extensions:     /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090626/

安装完毕,如下:
/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20090626/libevent.so
DownLoad 测试源码,来自网上:


代码示例,来自网上,注释部分代码,测试读部分是ok的,如下:






网上其他的步骤,主要是注意不有yum默认的安装方法【由於 PHP libevent 需要搭配C 的 libevent 1.4 以上版本 , 所以並非每個 Linux 套件都有 , 例如我的 CentOS 的 libevent 版本就比較舊 , 因此要自行編譯 , 以下就說明 CentOS 5.4 下成功編譯 PHP libevent 的步驟】:

1. 編譯 libevent

解開 libevent source code , 進入 source code 目錄

執行 ./configure –prefix=/usr/local

執行 make

執行 make install

2. 編譯 PHP libevent

解開 PHP libevent source code , 進入 source code 目錄

執行 phpize

執行 ./configure –with-libevent=/usr/local

執行 make

執行 make install

這樣會把 libevent.so 安裝到 /usr/lib/php/modoules 或 /usr/lib64/php/modules , 看 os 是 32bit 或 64bit

同时呢,也可以参考下这个URL:http://www.ooso.net/archives/607

附录,关于curl_multi一族函数的问题:
阅读全文
1.模拟Linux下的82端口:[Linux自带的nc (netcat) ]
Suse: netcat -l -p 82
Centos: nc -l localhost 82

参考:http://linux.vbird.org/linux_server/0140networkcommand.php
2.查看某个特定进程的CPU,内存等信息:
top只能看前几位,但是这样就可能看到任意,top -p 进程号,如:


3.tcpdump之监听某个端口:


4.gdb 之调试某个启动后的进程(注意该进程必须编译时加 -g):
通过ps 知道进程号为:16418,这样:

有某个文件的106行停止。

5.尽量在调试C++服务程序时不要用到 -O2,也就是不要用优化,这样更方便GDB调试。

6.善于用ipcs -m查看共享内存:

Eof。
Write -By:jack


实践情况:
端口收到实践:
netcat -l -p 82
gooddaygooddaygooddaygooddaygooddaygooddaygooddaygooddaygooddaygooddaygooddaygooddaygooddaygoodday
root@116.255.139.240:~#  nc -l localhost 82
goodday
端口监听情况:
tcpdump -n -ilo port 82  
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 96 bytes
14:04:10.344635 IP 127.0.0.1.38541 > 127.0.0.1.82: S 3710369840:3710369840(0) win 32767 <mss 16396,sackOK,timestamp 1126784740 0,nop,wscale 2>
14:04:10.344859 IP 127.0.0.1.82 > 127.0.0.1.38541: S 3702073690:3702073690(0) ack 3710369841 win 32767 <mss 16396,sackOK,timestamp 1126784740 1126784740,nop,wscale 2>
页面开始:
$(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对这串数据做逻辑和展现,这样一种思路。
阅读全文
分页: 16/18 第一页 上页 6 7 8 9 10 11 12 13 14 15 16 17 18 下页 最后页 [ 显示模式: 摘要 | 列表 ]