$a = "cd";
$$a = "finished";
$aa = "ok";
echo $cd;

?>


输出:
0> php abc.php
finished
如何把: a1.txt b1.txt 合并为c1.txt

cat a1.txt b1.txt >c1.txt
但是如下合并呢?

来自:Linux文档
现载:Www.8s8s.coM
地址:无名

两个文件a1,b1
内容分别如下:
a1:
1
2
3

b1:
a
b
c
如何把它们合在一起内容如下的:
1 a
2 b
3 c
-----------------------------

paste -d" " a1 a2阅读全文
参看N久前写的一篇文章:http://blog.5ifd.com/post/1253/

朋友要匹配:123.html
code:


result:
Array
(
    [0] => Array
        (
            [0] => http://www.test.com/123.html
        )

    [1] => Array
        (
            [0] => 123
        )

)
取得$str_out的$str_out[1][0]即可!

第一示例:
可以用来简化Nginx的$1,$2。
rewrite "^/(\d*)/trends-list-(\w*)\.html$" /index.php?d=front&c=index&a=trends&uid=$1&page=$2&tag=list&max_age=1800 last;  


---------- 调试PHP ----------
Array
(
    [0] => 12204886/trends-list-4
    [1] => 12204886
    [2] => 4
)

第二示例:
rewrite "^/(\d*)/friend-(myfans|myfollow)-(\w*)\.html$" /index.php?d=front&c=index&a=friend&uid=$1&tag=$2&page=$3&max_age=1800 last;


---------- 调试PHP ----------
Array
(
    [0] => /30991799/friend-myfollow-5.html
    [1] => 30991799
    [2] => myfollow
    [3] => 5
)


第三示例:
rewrite "^/list-(\d*)-(\d*)-(\d*)-(.*)\.html$"  /index.php?d=site&c=list&a=index&type=$1&label=$2&period=$3&name=$4 last;


---------- 调试PHP ----------
Array
(
    [0] => /list-0-0-1-测试.html
    [1] => 0
    [2] => 0
    [3] => 1
    [4] => 测试
)
______________________________________________________________
接合Nginx的urlrewrite进行$1,$2类似配置的方法:
通过print_r打印数组是不错的调试nginx重写的适用方法:


index2.php代码如下:

http://jackxiang.com/12204886/trends-list-4.html
Array
(
    [d] => front
    [c] => index
    [a] => trends
    [uid] => 12204886
    [page] => 4
    [tag] => list
    [max_age] => 1800
)

http://jackxiang.com/30991799/friend-myfollow-5.html
Array
(
    [d] => front
    [c] => index
    [a] => friend
    [uid] => 30991799
    [tag] => myfollow
    [page] => 5
    [max_age] => 1800
)
经验一:光鲜的招聘现场背后不一定代表一个正规友善、蓬勃向上的公司。比如2007年春我经历过一个大型的超市,它很快就倒闭了,招聘现场非常热闹,招聘手法非常有现代感——但是,两个月后,这家公司倒闭了。所以判断一个公司的实力,最好还是上网查一下、到公司问一下,像这个公司的供货商或者合作伙伴打听一下,绝人不能看招聘时的场面或者招聘人员的自我宣传。
  经验二:招聘人员的高素质,不代表将来直接和你一起工作的人同样素质高;很多朋友都遇到过这样的问题,好不容易看到了一个知情达理的HR,谈得也很好。去工作了以后,才发现那个公司很乱套,除了那个HR以外的人员都非常差,甚至你会发现那个HR也很差。阅读全文
E文参看:http://www.ietf.org/rfc/rfc1867.txt
中文描述:http://blog.sina.com.cn/s/blog_4c4a58ca0100091l.html
RFC1867协议介绍

RFC1867协议主要是在HTTP协议的基础上为INPUT标签增加了file属性,同时限定了Form的method必须为POST,ENCTYPE必须为multipart/form-data。当然还增加了一些与此相关属性,但都不是很重要,我们在此不作讨论。

在一般的基于Web的程序中,我们往往使用<input type=”file”>标签,该标签在被浏览器解析后会产生一个文本框和一个浏览按钮,单击浏览按钮会出现系统的文件选择框。

2.       执行上传及<input type=”file”>标签的一些特性阅读全文
点击在新窗口中浏览此图片
我们通常开启keep-alive,这种模式,即使apache的服务进程/线程已经和client完成了IO通信,也仍然无法处理新的请求,因为连接未被断开。event就是为了解决这种场景下的,IO空等。
思路类似于协程

apache的一个线程处理完之后,要给客户端回复10K内容,处理过程是下面哪一种情况:
1、apache线程将10K内容丢给底层,apache线程立即空闲出来可以处理下一个请求,底层将10k内容发给客户端
2、apache线程等客户端接收完10K内容后才空闲


应该是1,底层buffer也有大小限制,10k全部写到内核的buffer中,线程会再次进行系统调用select(假设工作在select模式下),获取下一个ready的文件描述符
如果按写文件来理解发送网络内容,感觉是2,文件内容写完了线程才能空闲出来

will说的写到buffer的可能性比较大

Apache的prefork模式,也就是多进程模式,是完整处理完一个用户请求后,才能处理下一个请求。
worker模式,同上,只是处理的者从进程变为线程。(线程比进程轻量,占据更少内存空间等)
event模式(比较新版本的Apache才完整支持),可以做到遇到IO等待的时,执行其新的请求。
http://hansionxu.blog.163.com/blog/static/2416981092014112933930779/

__________________________________________________
prefork和worker模式的比较
prefork模式使用多个子进程,每个子进程只有一个线程。每个进程在某个确定的时间只能维持一个连接。在大多数平台上,Prefork MPM在效率上要比Worker MPM要高,但是内存使用大得多。prefork的无线程设计在某些情况下将比worker更有优势:它可以使用那些没有处理好线程安全的第三方模块,并且对于那些线程调试困难的平台而言,它也更容易调试一些。

worker模式使用多个子进程,每个子进程有多个线程。每个线程在某个确定的时间只能维持一个连接。通常来说,在一个高流量的HTTP服务器上,Worker MPM是个比较好的选择,因为Worker MPM的内存使用比Prefork MPM要低得多。但worker MPM也由不完善的地方,如果一个线程崩溃,整个进程就会连同其所有线程一起”死掉”.由于线程共享内存空间,所以一个程序在运行时必须被系统识别为”每个线程都是安全的”。

总的来说,prefork方式速度要稍高于worker,然而它需要的cpu和memory资源也稍多于woker。

1、prefork.c模块(一个非线程型的、预派生的MPM)
    prefork MPM 使用多个子进程,每个子进程只有一个线程。每个进程在某个确定的时间只能维持一个连接。在大多数平台上,Prefork MPM在效率上要比Worker MPM要高,但是内存使用大得多。prefork的无线程设计在某些情况下将比worker更有优势:他能够使用那些没有处理好线程安全的第三方模块,并且对于那些线程调试困难的平台而言,他也更容易调试一些。阅读全文
PHP运行超时 不修改php.ini的情况下,如果没有set_time_limit(0),那么下面这段程序将很快报超时错误,加了之后可以耐心等待运行结束了

=======================================================================

在运行一个较长脚本的时候遇到超时的问题了,所以查了下,在php.ini中设置下就可以了
搜索max_execution_time = 30 ; 每个脚本的最大执行时间, 按秒计的
个人认为改成60秒已经很高了!

可用程序修改:set_time_limit (0);


=================================================

语法 : void set_time_limit (int seconds)
说明 :
    设定一个程式所允许执行的秒数,如果到达限制的时间,程式将会传回错误。它预设的限制时间是30秒,max_execution_time的值定义在结构档案中(在PHP3中叫做php3.ini,在PHP4则叫做php.ini),如果将秒数设为0,表示无时间上的限制。
    当呼叫此函式时,set_time_limit( )会从零重新开始计算最长执行的时间,也就是说,如果最长执行时间为预设的30秒,而在呼叫此函式set_time_limit(20)之前已花了25秒来执行程式,则程式最长执行的时间将会是45秒。
    注意 : 当PHP是执行在安全模式时,set_time_limit( )将不会有结果,除非是关闭安全模式或是修改结构档案中(在PHP3中叫做php3.ini,在PHP4则叫做php.ini)的时间限制。
例 :
set_time_limit(1000)
      create TABLE myIndex ( i_testID INT NOT NULL AUTO_INCREMENT, vc_Name VARCHAR(50) NOT NULL, vc_City VARCHAR(50) NOT NULL, i_Age INT NOT NULL, i_SchoolID INT NOT NULL, PRIMARY KEY (i_testID) );

    在这10000条记录里面7上8下地分布了5条vc_Name="erquan"的记录,只不过city,age,school的组合各不相同。
  来看这条T-SQL:
    select i_testID FROM myIndex where vc_Name='erquan' AND vc_City='郑州' AND i_Age=25;

    首先考虑建单列索引:
     在vc_Name列上建立了索引。执行T-SQL时,MYSQL很快将目标锁定在了vc_Name=erquan的5条记录上,取出来放到一中间结果集。在这个结果集里,先排除掉vc_City不等于"郑州"的记录,再排除i_Age不等于25的记录,最后筛选出唯一的符合条件的记录。

    虽然在vc_Name上建立了索引,查询时MYSQL不用扫描整张表,效率有所提高,但离我们的要求还有一定的距离。同样的,在vc_City和i_Age分别建立的单列索引的效率相似。
    为了进一步榨取MySQL的效率,就要考虑建立组合索引。就是将vc_Name,vc_City,i_Age建到一个索引里:
    alter TABLE myIndex ADD INDEX name_city_age (vc_Name(10),vc_City,i_Age);--注意了,建表时,vc_Name长度为50,这里为什么用10呢?因为一般情况下名字的长度不会超过10,这样会加速索引查询速度,还会减少索引文件的大小,提高insert的更新速度。

    执行T-SQL时,MySQL无须扫描任何记录就到找到唯一的记录!!

     肯定有人要问了,如果分别在vc_Name,vc_City,i_Age上建立单列索引,让该表有3个单列索引,查询时和上述的组合索引效率一样吧?嘿嘿,大不一样,远远低于我们的组合索引~~虽然此时有了三个索引,但MySQL只能用到其中的那个它认为似乎是最有效率的单列索引。

    建立这样的组合索引,其实是相当于分别建立了
        vc_Name,vc_City,i_Age
        vc_Name,vc_City
        vc_Name
    这样的三个组合索引!为什么没有vc_City,i_Age等这样的组合索引呢?这是因为mysql组合索引"最左前缀"的结果。简单的理解就是只从最左面的开始组合。并不是只要包含这三列的查询都会用到该组合索引,下面的几个T-SQL会用到:
    select * FROM myIndex WHREE vc_Name="erquan" AND vc_City="郑州"
    select * FROM myIndex WHREE vc_Name="erquan"
而下面几个则不会用到:
    select * FROM myIndex WHREE i_Age=20 AND vc_City="郑州"
    select * FROM myIndex WHREE vc_City="郑州"
 一个剑客要想修炼成为可御剑飞升的剑仙,就要提高自身素质和用剑的本领,开发人员也是一样,我们的\"剑\"就是技术。那么要在哪些方面下功夫呢?
阅读全文
走过的路,回忆起来是那么曲折,把自己的一些心得体会分享给程序员兄弟姐妹们,虽然时代在变化,但是很可能你也会走我已经做过的10年的路程,有些心得体会你可以借鉴一下,觉得说得有道理的你就接纳,觉得说得没道理的,你就抛弃,以下是我发自内心的,给大家的忠告,特别是针对那些小弟弟妹妹们。阅读全文
看老外在做PHP的comet的时候往往在做推送数据的时候呢,往往就是进入while(1)里面循环发送,然后sleep(1)一下,往往不能再和外面的程序推送数据给它而后很难实现客户端的访问给予提交相关的数据进而推出需要返回的数据,由于是长连接,这个php.ext一直不能退出,我刚刚突然想到了通过共享内存来实现,php.exe永不退出,而php2.exe去修改php.exe的共享内存内容,进而在php.exe里面还没有退出就得到了新的内容不断吐数据给浏览器端,这样就扩展了php的应用范围,可以实现真正的推送数据了,呵呵!        
这仅仅是我自己的一个想法。【向东】其实socket也是可以写在while(1) 里面从别的程序拿到数据的,PHP4好像对socket的支持不是很好,PHP5不知如何??。
参考:PHP下利用共享内存处理session的代码                         http://blog.jackxiang.com/post/1853/
                             PHP进程间通讯之共享内存:                 http://blog.jackxiang.com/post/1852/
参考:http://www.zeitoun.net/articles/comet_and_php/start
一、基于AJAX轮询方式与传统AJAX方式的区别:

    1. 服务器端会阻塞请求直到有数据传递或超时才返回。
    2. 客户端 JavaScript 响应处理函数会在处理完服务器返回的信息后,再次发出请求,重新建立连接。
    3. 当客户端处理接收的数据、重新建立连接时,服务器端可能有新的数据到达;这些信息会被服务器端保存直到客户端重新建立连接,客户端会一次把当前服务器端所有的信息取回。

    采用这种方式实现的技术有meboo和pushlet chat。

二、基于iframe及htmlfile流的方式

    这个方式和AJAX方式原理相同,只是浏览器一直会显示正在连接状态,gtalk采用htmlfile技术解决了此问题。Zeitoun 网站提供的 comet-iframe.tar.gz,封装了一个基于 iframe 和 htmlfile 的 JavaScript comet 对象,支持 IE、Mozilla Firefox 浏览器,可以作为参考:http://www.zeitoun.net/articles/comet_and_php/start

三、Http长连接的编程原则

    1、不要在同一个客户端开启超过两个的http长连接,这个是受http协议限制的。
    2、控制信息和数据信息使用不同的http连接。
    3、在客户端和服务器端保持“心跳”信息。

四、Pushlet框架学习

    Pushlet框架是用后台采用java实现,前台技术有AJAX和Iframe两种。设计思想采用观察者模式。


点击在新窗口中浏览此图片
所谓Push Mail,全称应该是Server Push Email。顾名思义,即邮件到达服务器后,由服务器主动将邮件推送到用户的接收终端上(比如手机)。而像我们使用的Outlook等邮件客户端的收取邮件行为,是典型的Client Pull Mail模式,即客户端主动收取邮件,这实际上是需要用户干预操作的。如此一来,Push Mail的优势就不言而喻了——它不需要用户进行任何干涉,可以由服务器自动将邮件推送到用户手机,简单来说就是方便。
和一以前毕业实习的公司现在在雅虎的同事聊天:
回忆未来  11:29:11
你们做的啥,给个链接让我瞧瞧。
扬东  11:29:14
好好干,
回忆未来  11:29:28
给个链接让我瞧瞧
扬东  11:29:34
http://bbs.koubei.com/
http://ask.koubei.com/
扬东  11:29:43
这两个现在都我一个人。
回忆未来  11:30:13
上司是个大色狼我该怎么办? 呵呵,就搞这些玩意,唉,不过我喜欢。
回忆未来  11:30:29
很厉害喔你,呵呵呵
回忆未来  11:33:30
雅虎没你不行了喔,呵呵。
扬东  11:33:46
呵呵,
回忆未来  11:33:57
我没事来瞅瞅,给你加人气哈。
扬东  11:34:14
好,
回忆未来  11:34:15
里面的东西还真吸引我,以前咋就没有注意呢?哈哈
扬东  11:34:22
呵呵,

Atmel公司的AVR系列单片机是一种性能优良, 耗电很小的微控制器, 他的主要特点是:
1). 单时钟周期指令;
2). 很高的C语言编码效率;
3). 支持在系统编程(ISP)技术.
AVR单片机是我目前在Linux下看到的开发工具最全的微控制器, 它的开发非常方便, 从此我们在Linux下也可以开发单片机了.
开发AVR的编译器是gcc, 实际上就是给gcc加上适合于AVR的库, 该库的名字叫avr-libc, 目前支持的开发语言是c和c++, c++的支持还在开发中. 下面就介绍AVR-GCC的安装方法并简单介绍一下通用编程器uisp的安装方法.
当前avr-libc仍在不断的进行中, 该项目的主页是 http://www.nongnu.org/avr-libc , 该页面上面还有很多AVR在Linux下开发的辅助工具, 本文就不介绍了. avr-gcc的下载地址是: http://savannah.nongnu.org/download/avr-libc/snapshots/src , 请下载binutils-030428.tar.bz2 , gcc-core-20030428.tar.bz2 , gcc-g++-20030428.tar.bz2 , avr-libc-20030422cvs.tar.gz. 以root用户登录, 将它们拷贝到安装目录中(我的习惯是/usr/local/src), 解压缩软件包:
bunzip2 *.bz2
tar xvf *.tar
tar zxvf *.tar.gz
之后会在安装目录中生成`三个子目录, binutils-030438/ , gcc-20030428/ , avr-libc-20030422cvs/ . 下面分别安装之.
安装binutils:
cd binutils-030428/
./configure --target=avr --prefix=/usr/local/atmel (/usr/local/atmel是安装目录)
make
make install
然后在/etc/ld.so.conf中加入/usr/local/atmel/lib一行, 并运行/sbin/ldconfig更新.
在~/.bashrc文件中加入export PATH=/usr/local/atmel/bin:${PATH}, 并且在命令行下也输入该语句.
安装gcc:
cd gcc-20030428/
./configure --target=avr --prefix=/usr/local/atmel --disable-nls --enable-language=c,c++
make
make install
安装avr-libc:
先设置一些环境变量:
export CC=avr-gcc; export AS=avr-as; export AR=avr-ar; export RANLIB=avr-ranlib
export PATH=/usr/local/atmel/bin:${PATH}; export PREFIX=/usr/local/atmel
./reconf
./doconf
./domake
cd build
make install
如果一切顺利的话, AVR-GCC就安装完成了.
下面介绍通用编程器uisp的安装
uisp是一个通用的编程器, 用来在Linux下控制各种各样的编程器, 该项目正在不断的完善中, 项目的主页是:
http://savannah.nongnu.org/projects/uisp
从上面下载uisp-20021201.tar.gz
解压缩:
tar zxvf uisp-20021201.tar.gz
开始安装:
cd uisp-20021201/
./configure
make
make install
这样uisp也装好了. 运行之前我们还要作些准备工作. 运行lsmod命令, 看列表中有没有parport, parport_pc, ppdev 三个模块, 有的话就跳过下面一段.
编译内核, 确信选中parallel port support -> parallel support 和 parallel port support -> pc-style hardware 及 Character devices -> Support for user-space parallel port device drivers 三项. 编译好内核后, 进入/lib/modules/<内核版本号>/kernel/drivers/parport/ , 运行 insmod parport.o ; insmod parport_pc.o ; cd .. ; cd char/ ; insmod ppdev.o , 可以将加载模块的命令加入rc.sysinit, 这样就不用以后再手工输入了.
下面简单讲讲avr-gcc和uisp的使用方法, 详细的handbook我会以后翻译. 假定mcu为at90s8515, 源程序为avr.c .
1). 编译C源程序
生成.o文件: avr-gcc -mmcu=at90s8515 -Os avr.c
生成.out文件: avr-gcc -mmcu=at90s8515 -o -Wl,-Map,avr.map avr.o avr.out
生成.hex文件: avr-objcopy -R .eeprom -O ihex avr.out avr.hex
2). 在线下载
刷新: uisp -dlpt=/dev/parport0 --erase -dprog=dapa
编程: uisp -dlpt=/dev/parport0 --upload if=avr.hex -dprog=dapa -dno-poll -v=3 --hash=32
3). 下载线
PC 并口 AVR
Init (Pin 16) -> Reset
D0 (Pin 2) -> MOSI
Busy(Pin 11) -> MISO
Strobe(Pin 1) -> SCK
GND(Pin 18) -> GND
注意:
引线要串1K的电阻, AVR的Reset端接10K的上拉, 要给单片机3-5V的外部供电.
最后祝大家都能顺利的使用Linux开发AVR.
有问题与我联系 (cuijianw@etang.com)


问:
答:软件包?首先你用什么linux?一般性的ubuntu之类的,都可以直接用avr-gcc来搞~avr-gcc,如果是debian或者ubuntu可以直接apt-get
阅读全文
分页: 197/258 第一页 上页 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 下页 最后页 [ 显示模式: 摘要 | 列表 ]