存档:2007年九月

浅谈PHP的Socket模块

九月 28, 2007 | 网站架构 | RSS 2.0

一直以来很少看到有多少人使用php的socket模块来做一些事情,大概大家都把它定位在脚本语言的范畴内吧,但是其实php的socket模块可以做很多事情,包括做ftplist,http post提交,smtp提交,组包并进行特殊报文的交互(如smpp协议),whois查询。这些都是比较常见的查询。

特别是php的socket扩展库可以做的事情简直不会比c差多少。

预备知识:

php的socket连接函数

1、集成于内核的socket

这个系列的函数仅仅只能做主动连接无法实现端口监听相关的功能。而且在4.3.0之前所有socket连接只能工作在阻塞模式下。

此系列函数包括

fsockopen,pfsockopen

这两个函数的具体信息可以查询php.net的用户手册

他们均会返回一个资源编号对于这个资源可以使用几乎所有对文件操作的函数对其进行操作如fgets(),fwrite(), fclose()等单注意的是所有函数遵循这些函数面对网络信息流时的规律,例如:

fread() 从文件指针 handle 读取最多 length 个字节。 该函数在读取完 length 个字节数,或到达 EOF 的时候,或(对于网络流)当一个包可用时就会停止读取文件,视乎先碰到哪种情况。

可以看出对于网络流就必须注意取到的是一个完整的包就停止。

2、php扩展模块带有的socket功能。

php4.x 有这么一个模块extension=php_sockets.dll,RHT9上安装后也有一个extension=php_sockets.so的(这个依稀记得是有的需要确认一下,好久没有玩linux了)

当打开这个此模块以后就意味着php拥有了强大的socket功能,包括listen端口,阻塞及非阻塞模式的切换,multi-client 交互式处理等

这个系列的函数列表参看http://www.php.net/manual/en/ref.sockets.php

看过这个列表觉得是不是非常丰富呢?不过非常遗憾这个模块还非常年轻还有很多地方不成熟,相关的参考文档也非常少:(

我也正在研究中,因此暂时不具体讨论它,仅给大家一个参考文章

http://www.zend.com/pecl/tutorials/sockets.php

下面举例说明:

例子1

简单应用——whois查询

看一段代码

CODE:

<?php

$server=”whois.verisign-grs.com”;//TLD .com whois server

$data = “”;

$domain = “abc.com”;//serch domain

$fp = fsockopen($server,43);

if ($fp) {

fputs($fp,$domain.”");

while (!feof($fp)) {

  $data .= fgets($fp,1000);

}

}

fclose($fp);

echo ln2br($data);

}

[Copy to clipboard]

这个应用因该非常常见了:),不用多废话了。

下面看看对于ftplist的应用

CODE:

<?php

$server=”192.168.1.3″;//服务器ip端口用默认的21举例而已所以不要那么复杂

$data = “”;

$fp = fsockopen($server,21);//打开服务器

$data .= fread($fp,1024);//读取状态注意用的fread那么是一个可用报文结束为一段读取。

fwrite($fp,”USER hack”);//登陆信息

$data .= fgets($fp,1024);//读取是否有此用户,是否等待密码

fwrite($fp,”PASS 123456″);//密码

$data .= fgets($fp,1024);//是否验证成功

fwrite($fp,”REST 100″);//重置数据流

$data .= fgets($fp,1024);

fwrite($fp,”PWD”);//当前目录

$data .= fgets($fp,1024);

fwrite($fp,”TYPE A”);//切换传输模式为A——ASCII模式

$data .= fgets($fp,1024);

fwrite($fp,”CWD ./123456″);//更换目录为123456

$data .= fgets($fp,1024);

fwrite($fp,”PASV”);//切换为被动模式

$tstring = fgets($fp,1024);

$data .=$tstring;

$ports=ftp_pasvs($tstring);//获取服务器分配的端口及ip

fwrite($fp,”LIST -al”);//列表

$sock_data=ftp_data_connection($ports);//连接被动模式下的端口

while (!feof($sock_data)) {//循环获取数据

$data .= fgets($sock_data, 1024);

}

echo nl2br($data);

function ftp_pasvs($string)//用于获取被动模式下的相关连接信息

{

  $ip_port = preg_replace(”/^(.+

()([0-9]{1,3},[0-9]{1,3},[0-9]{1,3},[0-9]{1,3},[0-9]+,[0-9]+)()?.*)$/i”,”2″,$string);

  return $ip_port;

}

function ftp_data_connection($ip_port)//连接服务器数据端口

{

  $ip_port=trim($ip_port);

  if (!preg_match(”/^[0-9]{1,3},[0-9]{1,3},[0-9]{1,3},[0-9]{1,3},[0-9]+,[0-9]+$/i”, $ip_port)) {

    return “false”;

  }

  $DATA = explode(”,”, $ip_port);

  $ipaddr = $DATA[0].”.”.$DATA[1].”.”.$DATA[2].”.”.$DATA[3];

  $port   = $DATA[4]*256 + $DATA[5];

  //echo $port.”|”.$ipaddr;//exit;

  $data_connection = @fsockopen($ipaddr, $port);

  if (!$data_connection) {

    return “false”;

  }

  return $data_connection;

}

?>

[Copy to clipboard]

以上这段代码作了一下简单的注释应该比较清晰,现说明几点问题。

1、为什么采用fread:因为此函数是以网络包为截断的,使用这样的截断来获得信息可以很好的保持兼容性,因为对于ftpclient来讲服务器是一个未知的环境(wu-ftp,ser-u,g6ftp…),在这样的环境下有利于读取ftp的特征字符串以便以后使用。

2、为什么不用主动模式连接服务器传输数据:主动模式必须客户端指定端口然后进行传输,而php自带的函数并不具备此特性。除非使用扩展库,这样程序兼容性就会。。同时由服务器指定端口避免了客户端寻找合适端口造成的额外负担,尽管这样的负担微乎其微。

与这个代码类似的应用还有estmp发送邮件,管与此应用我不多说,有兴趣的朋友可以到我的blog上看看有相关代码(www.freeplug.org)冰血老弟不介意我做点小广告吧哈哈。

POST,GET提交这个话题很老了:)我想不需要我在这里提起了文章很多。

在看下面一个例子前先提及一组函数pack,unpack。

任何一款拥有socket操作能力的语言都有一个专门用于组包的函数,php也不例外当然这组函数的用途不仅仅是组包。

下面简单的介绍一下:

应用一:

输入16进制或者2进制流。

CODE:

$src=”3B06″;

$binvar = pack(’H*’,$src);

echo $binvar;

[Copy to clipboard]

看看这个程序,相当于下面的程序

CODE:

echo chr(0×3B).chr(0×06);

[Copy to clipboard]

在数据量很小的时候后面的做法,更为简便。但是大量数据的时候,前一种做法则更为实际工整些,代码量也很少。

应用二:

网络数据流拆包

CODE:

$elength = str_len($bin);

extract(unpack(”NLEN/Hcontent”, $bin));

[Copy to clipboard]

将$bin拆成

一维数组并解开到变量$LEN和$content内。

下面看例子了

这个是利用php实现中国移动cmpp登陆消息的一个缩写例子

CODE:

<?php

define(”LOGINID”,0×00000001);//登陆消息

class SMS{

var $host;

var $mtport;

var $moport;

var $connectout;

var $sms_sock;

var $loginuser;

var $loginpass;

var $error_stop=0;

function SMS($host,$user,$pass,$mtport,$moport,$timeout=30,$if_conn=0){

  $this->host=$host;

  $this->mtport=$mtport;

  $this->moport=$moport;

  $this->loginuser=$user;

  $this->loginpass=$pass;

  $if_conn && $this->login();

}

function login(){

  $fp=@fsockopen($this->host,$this->mtport,$errno,$errstr,$this->connectout);

  if(!$fp){

    $this->sms_sock=”;

    $this->halt(”error in login num=$errno, msg=$errstr”);

    return false;

  }else{

    //$this->sms_sock=$fp;

    $data=pack(”Na10a32″,LOGINID,$this->loginuser,md5($this->loginpass));//这个地方就是组包了

    $data=pack(”N”,strlen($data)+4).$data;//$data是实际内容前面这个表示整个报文长度

    if(fputs($fp,$data) !== false){

      //print_r(unpack(”N”,fread($fp,4)));//此处用于调试时检测用

      //print_r(unpack(”N”,fread($fp,4)));

      //print_r(unpack(”c”,fread($fp,4)));

      //print_r(unpack(”N”,fread($fp,4)));

      @fread($fp,12);

      $results=@fread($fp,4);

      if($results){

        $rs=@unpack(”Ncounts”,$results);//返回socket结果。

        $this->sms_sock=$fp;

      }else{

        $this->sms_sock=”;

        $this->halt(”error in login: loginid=$this->loginuser loginpass=$this->loginpass”);

        return false;

      }

    }else{

      $this->sms_sock=”;

      $this->halt(”error in submit logininfo: loginid=$this->loginuser

loginpass=$this->loginpass”);

      return false;

    }

  }

  return true;

}

function halt($msg){

  echo $msg;

  flush();

  $this->error_stop && exit;

}

}

[Copy to clipboard]

此例应用:主要用于底层的不依赖于http一类协议的通讯使用。在phpclass这个站点上有个smpp模块更为详细的演示了此类应用有兴趣的朋友可以看看。

末了,不多说。由于时间仓促,有些得不对的地方,望各位用pm通知我,我会及时更正,有什么疑问也可以pm我。

文章:   PHP And Socket
书名: 《PHP Game Programming》
作者:   Matt Rutledget
翻译:   heiyeluren <heiyeluren_gmail_com>

◇ Socket基础
◇ 产生一个服务器
◇  产生一个客户端

在这一章里你将了解到迷人而又让人容易糊涂的套接字(Sockets)。Sockets在PHP中是没有充分利用的功能。今天你将看到产生一个能使用客户端连接的服务器,并在客户端使用socket进行连接,服务器端将详细的处理信息发送给客户端。
当你看到完整的socket过程,那么你将会在以后的程序开发中使用它。这个服务器是一个能让你连接的HTTP服务器,客户端是一个Web浏览器,这是一个单一的 客户端/服务器 的关系。

◆ Socket 基础


PHP使用Berkley的socket库来创建它的连接。你可以知道socket只不过是一个数据结构。你使用这个socket数据结构去开始一个客户端和服务器之间的会话。这个服务器是一直在监听准备产生一个新的会话。当一个客户端连接服务器,它就打开服务器正在进行监听的一个端口进行会话。这时,服务器端接受客户端的连接请求,那么就进行一次循环。现在这个客户端就能够发送信息到服务器,服务器也能发送信息给客户端。
产生一个Socket,你需要三个变量:一个协议、一个socket类型和一个公共协议类型。产生一个socket有三种协议供选择,继续看下面的内容来获取详细的协议内容。
定义一个公共的协议类型是进行连接一个必不可少的元素。下面的表我们看看有那些公共的协议类型。

表一:协议
名字/常量     描述
AF_INET  这是大多数用来产生socket的协议,使用TCP或UDP来传输,用在IPv4的地址
AF_INET6     与上面类似,不过是来用在IPv6的地址
AF_UNIX  本地协议,使用在Unix和Linux系统上,它很少使用,一般都是当客户端和服务器在同一台及其上的时候使用
表二:Socket类型
名字/常量     描述
SOCK_STREAM  这个协议是按照顺序的、可靠的、数据完整的基于字节流的连接。这是一个使用最多的socket类型,这个socket是使用TCP来进行传输。
SOCK_DGRAM  这个协议是无连接的、固定长度的传输调用。该协议是不可靠的,使用UDP来进行它的连接。
SOCK_SEQPACKET  这个协议是双线路的、可靠的连接,发送固定长度的数据包进行传输。必须把这个包完整的接受才能进行读取。
SOCK_RAW  这个socket类型提供单一的网络访问,这个socket类型使用ICMP公共协议。(ping、traceroute使用该协议)
SOCK_RDM  这个类型是很少使用的,在大部分的操作系统上没有实现,它是提供给数据链路层使用,不保证数据包的顺序

表三:公共协议
名字/常量     描述
ICMP  互联网控制消息协议,主要使用在网关和主机上,用来检查网络状况和报告错误信息
UDP      用户数据报文协议,它是一个无连接,不可靠的传输协议
TCP 传输控制协议,这是一个使用最多的可靠的公共协议,它能保证数据包能够到达接受者那儿,如果在传输过程中发生错误,那么它将重新发送出错数据包。

现在你知道了产生一个socket的三个元素,那么我们就在php中使用socket_create()函数来产生一个socket。这个socket_create()函数需要三个参数:一个协议、一个socket类型、一个公共协议。socket_create()函数运行成功返回一个包含socket的资源类型,如果没有成功则返回false。
Resourece socket_create(int protocol, int socketType, int commonProtocol);

现在你产生一个socket,然后呢?php提供了几个操纵socket的函数。你能够绑定socket到一个IP,监听一个socket的通信,接受一个socket;现在我们来看一个例子,了解函数是如何产生、接受和监听一个socket。

<?php
$commonProtocol = getprotobyname(“tcp”);
$socket = socket_create(AF_INET, SOCK_STREAM, $commonProtocol);
socket_bind($socket, ‘localhost’, 1337);
socket_listen($socket);
// More socket functionality to come
?>

上面这个例子产生一个你自己的服务器端。例子第一行,
$commonProtocol = getprotobyname(“tcp”);
使用公共协议名字来获取一个协议类型。在这里使用的是TCP公共协议,如果你想使用UDP或者ICMP协议,那么你应该把getprotobyname()函数的参数改为“udp”或“icmp”。还有一个可选的办法是不使用getprotobyname()函数而是指定SOL_TCP或SOL_UDP在socket_create()函数中。
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
例子的第二行是产生一个socket并且返回一个socket资源的实例。在你有了一个socket资源的实例以后,你就必须把socket绑定到一个IP地址和某一个端口上。
socket_bind($socket, ‘localhost’, 1337);
在这里你绑定socket到本地计算机(127.0.0.1)和绑定socket到你的1337端口。然后你就需要监听所有进来的socket连接。
socket_listen($socket);
在第四行以后,你就需要了解所有的socket函数和他们的使用。

表四:Socket函数
函数名      描述
socket_accept()    接受一个Socket连接
socket_bind()     把socket绑定在一个IP地址和端口上
socket_clear_error()   清除socket的错误或者最后的错误代码
socket_close()     关闭一个socket资源
socket_connect()    开始一个socket连接
socket_create_listen()   在指定端口打开一个socket监听
socket_create_pair()   产生一对没有区别的socket到一个数组里
socket_create()    产生一个socket,相当于产生一个socket的数据结构
socket_get_option()    获取socket选项
socket_getpeername()   获取远程类似主机的ip地址
socket_getsockname()   获取本地socket的ip地址
socket_iovec_ad …

2条评论 »

展开收缩smarty,js

九月 28, 2007 | 网站架构 | RSS 2.0

展开收缩

–>
dl {  color:#990033; width:160px; }
dt { cursor:pointer; width:162px;  height:10px; color:#666666; font-weight:bold}
dd{ font-size:12px; color:#000000; }
.expand{ overflow:visible}
.collapse{ overflow:hidden; height:20px}
.STYLE1 {color: #FFFFFF}
</style></head>
<script language=”javascript”>
function toggle(dt)
 {
   var dl=dt.parentNode;
   if(dl.className==”collapse”)
   dl.className=”expand”;
   else
    dl.className=”collapse”;
 
 }
</script>

<{section name=rows loop=$data}>
    <dl><dt onclick=”toggle(this)” ><img    src=”myweb/14.gif” width=”10″ height=”10″/>  <{$data[rows].Bigname}>
    <dt><{section name=row loop=$data[rows].topic}><dd><a href=”fenlei.php?id=<{$data[rows].topic[row].CatId}>”><{$data[rows].topic[row].CatName}></a></dd><{/section}></dl><{/section}>&nbsp;&nbsp;

另外有个别人的

<script type=”text/javascript”>
if (document.getElementById){ //DynamicDrive.com change
document.write(’<style type=”text/css”> ‘)
document.write(’.submenu{display: none;} ‘)
document.write(’</style> ‘)
}

function SwitchMenu(obj){
 if(document.getElementById){
 var el = document.getElementById(obj);
 var ar = document.getElementById(”masterdiv”).getElementsByTagName(”span”); //DynamicDrive.com change
  if(el.style.display != “block”){
  /*
   打开任意项,其它项自动收缩
   for (var i=0; i<ar.length; i++){
    if (ar[i].className==”submenu”)
    ar[i].style.display = “none”;
   }
  */
   el.style.display = “block”;
  }else{
   el.style.display = “none”;
  }
 }
}
</script>

<body>

<div id=”masterdiv”>

  <table onclick=”SwitchMenu(’sub1′)” onmouseover=”this.style.cursor=’hand’;”>
    <tr>
      <td>分类一</td>
    </tr>
  </table>
  <span class=”submenu” id=”sub1″ style=”display=’none’”>
   内容一<br>
   内容二<br>
  </span>
  

  <p onclick=”SwitchMenu(’sub2′)” onmouseover=”this.style.cursor=’hand’;”>
      分类二
  </p>
  <span class=”submenu” id=”sub2″ style=”display=’block’”>
   内容一<br>
   内容二<br>
  </span>
 

  <table>
    <tr>
      <td onclick=”SwitchMenu(’sub3′)” onmouseover=”this.style.cursor=’hand’;”>分类三</td>
    </tr>

 <tr class=”submenu” id=”sub3″ style=”display=’none’”>
 <td>
    内容一<br>
    内容二<br>
    </td>
 </tr>
  </table>

</div>

<!–  其它说明 —

  <span class=”submenu” id=”sub4″ style=”display=’block’”>
 初始状态:’block’:展开
     ‘none’: 关闭
–>

</body>

<script type=”text/javascript”>
if (document.getElementById){ //DynamicDrive.com change
document.write(’<style type=”text/css”> ‘)
document.write(’.submenu{display: none;} ‘)
document.write(’</style> ‘)
}

function SwitchMenu(obj){
 if(document.getElementById){
 var el = document.getElementById(obj);
 var ar = document.getElementById(”masterdiv”).getElementsByTagName(”span”); //DynamicDrive.com change
  if(el.style.display != “block”){
  /*
   打开任意项,其它项自动收缩
   for (var i=0; i<ar.length; i++){
    if (ar[i].className==”submenu”)
    ar[i].style.display = “none”;
   }
  */
   el.style.display = “block”;
  }else{
   el.style.display = “none”;
  }
 }
}
</script>

<body>

<div id=”masterdiv”>

  <table onclick=”SwitchMenu(’sub1′)” onmouseover=”this.style.cursor=’hand’;”>
    <tr>
      <td>分类一</td>
    </tr>
  </table>
  <span class=”submenu” id=”sub1″ style=”display=’none’”>
   内容一<br>
   内容二<br>
  </span>
  

  <p onclick=”SwitchMenu(’sub2′)” onmouseover=”this.style.cursor=’hand’;”>
      分类二
  </p>
  <span class=”submenu” id=”sub2″ style=”display=’block’”>
   内容一<br>
   内容二<br>
  </span>
 

  <table>
    <tr>
      <td onclick=”SwitchMenu(’sub3′)” onmouseover=”this.style.cursor=’hand’;”>分类三</td>
    </tr>

 <tr class=”submenu” id=”sub3″ style=”display=’none’”>
 <td>
    内容一<br>
    内容二<br>
    </td>
 </tr>
  </table>

</div>

<!–  其它说明 —

  <span class=”submenu” id=”sub4″ style=”display=’block’”>
 初始状态:’block’:展开
     ‘none’: 关闭
–>

</body>

没有评论 »

常用的js

九月 28, 2007 | mysql | RSS 2.0

只能是写限定的东西 代码如下:

常用JS代码集(一)

要用时老是找来找去,这里把平时经常用的集合起来。

<!–

一、输入框禁止输入中文

     <input type=”text” style=”ime-mode:Disabled;”>

二、最简单的按钮作为链接方法

       <INPUT TYPE=”submit” value=”ABCnet.CN” onclick=”location.href=’http://www.abcnet.cn’”>

三、按扭打开Web页对话框

       <INPUT TYPE=”BUTTON” NAME=”Button” VALUE=”ABCnet.CN” onclick=”showModalDialog(’http://www.abcnet.cn’)”>

四、改变IE地址栏的IE图标 

       我们要先做一个16*16的icon(图标文件),保存为index.ico。把这个图标文件上传到根目录下并在首页<head></head>之间加上如下代码:

       <link REL = “Shortcut Icon” href=”index.ico”>

       <link rel=”Bookmark” href=”favicon.ico”> 可以在收藏夹中显示出你的图标

五、让网页随意后退

       <a href=”javascript:history.go(-X)”>X</a> //把X换成你想要后退在页数

   //把“-”变成“+”就为前进

六、关闭当前窗口

  <a href=”/”onClick=”javascript:window.close();return false;”>关闭窗口</a>

七、2秒后关闭当前页

  <script language=”javascript”>

  <!–

  setTimeout(’window.close();’,2000);

  –>

  </script>

八、2秒后载入指定网页

  <head>

  <meta http-equiv=”refresh” content=”2;URL=http://你的网址”>

  </head>

九、添加到收藏夹

  <Script Language=”javascript”>

  function bookmarkit()

  {

  window.external.addFavorite(’http://你的网址’,'你的网站名称’)

  }

  if (document.all)document.write(’<a href=”#” onClick=”bookmarkit()”>加入收藏夹</a>’)

  </Script>

十、设置该页为首页

  <a class=”chlnk” style=”cursor:hand” HREF

  onClick=”this.style.behavior=’url(#default#homepage)’;

  this.setHomePage(’你的网站名称);”>设为首页</a>

十一、单击按钮打印出当前页

      <Script Language=”javascript”>

  if (window.print) {

  document.write(’<form>’

  + ‘<input type=button name=print value=”打印本页” ‘

  + ‘onClick=”javascript:window.print()”></form>’);

  }

  </Script>

十二、最小化、最大化、关闭窗口

<object id=hh1 classid=”clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11″>

<param name=”Command” value=”Minimize”></object>

<object id=hh2 classid=”clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11″>

<param name=”Command” value=”Maximize”></object>

<OBJECT id=hh3 classid=”clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11″>

<PARAM NAME=”Command” VALUE=”Close”></OBJECT>

<input type=button value=最小化 onclick=hh1.Click()>

<input type=button value=最大化 onclick=hh2.Click()>

<input type=button value=关闭 onclick=hh3.Click()>

本例适用于IE

十三、让弹出窗口总是在最上面:

<body onblur=”this.focus();”>

不要滚动条?

让竖条没有:

<body style=’overflow:scroll;overflow-y:hidden’>

</body>

让横条没有:

<body style=’overflow:scroll;overflow-x:hidden’>

</body>

两个都去掉?更简单了

<body scroll=”no”>

</body>

十四、电子邮件处理提交表单

<form name=”form1″ method=”post” action=”mailto:****@***.com” enctype=”text/plain”>

<input type=submit>

</form>

十五、在打开的子窗口刷新父窗口的代码里如何写?

window.opener.location.reload()

十六、如何设定打开页面的大小

<body onload=”top.resizeTo(300,200);”>

十七、环境变量

本机ip<%=request.servervariables(”remote_addr”)%>

服务器名<%=Request.ServerVariables(”SERVER_NAME”)%>

服务器IP<%=Request.ServerVariables(”LOCAL_ADDR”)%>

服务器端口<%=Request.ServerVariables(”SERVER_PORT”)%>

服务器时间<%=now%>

IIS版本<%=Request.ServerVariables”SERVER_SOFTWARE”)%>

脚本超时时间<%=Server.ScriptTimeout%>

本文件路径<%=server.mappath(Request.ServerVariables(”SCRIPT_NAME”))%>

服务器CPU数量<%=Request.ServerVariables(”NUMBER_OF_PROCESSORS”)%>

服务器解译引擎<%=ScriptEngine & “/”& ScriptEngineMajorVersion &”.”&ScriptEngineMinorVersion&”.”& ScriptEngineBuildVersion %>

服务器操作系统<%=Request.ServerVariables(”OS”)%>

十八、利用正则表达式限制网页表单里的文本框输入内容:

用正则表达式限制只能输入中文:onkeyup=”value=value.replace(/[^u4E00-u9FA5]/g,”)” onbeforepaste=”clipboardData.setData(’text’,clipboardData.getData(’text’).replace(/[^u4E00-u9FA5]/g,”))”

用正则表达式限制只能输入全角字符: onkeyup=”value=value.replace(/[^uFF00-uFFFF]/g,”)” onbeforepaste=”clipboardData.setData(’text’,clipboardData.getData(’text’).replace(/[^uFF00-uFFFF]/g,”))”

用正则表达式限制只能输入数字:onkeyup=”value=value.replace(/[^d]/g,”) “onbeforepaste=”clipboardData.setData(’text’,clipboardData.getData(’text’).replace(/[^d]/g,”))”

用正则表达式限制只能输入数字和英文:onkeyup=”value=value.replace(/[W]/g,”) “onbeforepaste=”clipboardData.setData(’text’,clipboardData.getData(’text’).replace(/[^d]/g,”))”

–>

  ENTER键可以让光标移到下一个输入框

<input onkeydown=”if(event.keyCode==13)event.keyCode=9″ >

  只能是中文

<input onkeyup=”value=value.replace(/[ -~]/g,”)” onkeydown=”if(event.keyCode==13)event.keyCode=9″>

  只能是英文和数字.屏蔽了输入法

<input style=”ime-mode:disabled” onkeydown=”if(event.keyCode==13)event.keyCode=9″>

  只能输入英文和数字

<input onkeyup=”value=value.replace(/[W]/g,”) “onbeforepaste=”clipboardData.setData(’text’,clipboardData.getData(’text’).replace(/[^d]/g,”))” onkeydown=”if(event.keyCode==13)event.keyCode=9″>

  只能是数字

<input onkeyup=”value=value.replace(/[^d]/g,”) “onbeforepaste=”clipboardData.setData(’text’,clipboardData.getData(’text’).replace(/[^d]/g,”))”>

  只能显示,不能修改的文本框

<input readOnly value=”只能显示,不能修改”>

  只能是数字,判断按键 代码如下:

<script  language=javascript>

function  onlyNum()

{

if(!((event.keyCode>=48&&event.keyCode<=57)||(event.keyCode>=96&&event.keyCode<=105)||(event.keyCode==8)))

event.returnValue=false;

}

</script>

<input  onkeydown=”onlyNum();”> 

  附:获取键盘的KeyCode

<html>

<head>

<script language=”javascript”>

  ns4 = (document.layers) ? true : false;

  ie4 = (document.all) ? true : false;

function keyDown(e){

  if(ns4){

  var nkey=e.which;

  var iekey=’现在是ns浏览器’;

  var realkey=String.fromCharCode(e.which);

}

  if(ie4){

  var iekey=event.keyCode;

  var nkey=’现在是ie浏览器’;

  var realkey=String.fromCharCode(event.keyCode);

  if(event.keyCode==32){realkey=” 空格”}

  if(event.keyCode==13){realkey=” 回车”}

  if(event.keyCode==27){realkey=” Esc”}

  if(event.keyCode==16){realkey=” Shift”}

  if(event.keyCode==17){realkey=” Ctrl”}

  if(event.keyCode==18){realkey=” Alt”}

}

  alert(’ns浏览器中键值:’+nkey+”+’ie浏览器中键值:’+iekey+”+’实际键为’+realkey);

}

document.onkeydown = keyDown;

if(ns4){

document.captureEvents(Event.KEYDOWN);}

</script>

</head>

<body>

//Javascript Document.

<hr>

<center>

<h3>请按任意一个键。。。。</h3>

</center>

</body>

</html>

  限制网页用键盘

<body onkeydown=”alert(’禁用’);return false;”>

  限制键盘的某个键:

<body onkeydown=”if(event.keyCode==num){alert(’禁用’);return false;}>

  再加个找按键的值

<script>

function show(){

  alert(”ASCII代码是:”+event.keyCode);

}

</script>

<body onkeydown=”show()”>

  只能是IP地址

<html>

<head>

<meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″>

<meta name=”GENERATOR” content=”Microsoft FrontPage 4.0″>

<meta name=”ProgId” content=”FrontPage.Editor.Document”>

<style>

.a3{width:30;border:0;text-align:center}

</style>

<script>

function mask(obj){

obj.value=obj.value.replace(/[^d]/g,”)

key1=event.keyCode

if (key1==37 || key1==39)

{ obj.blur();

nextip=parseInt(obj.name.substr(2,1))

nextip=key1==37?nextip-1:nextip+1;

nextip=nextip>=5?1:nextip

nextip=nextip<=0?4:nextip

eval(”ip”+nextip+”.focus()”)

}

if(obj.value.length>=3)

if(parseInt(obj.value)>=256 || parseInt(obj.value)<=0)

{

alert(parseInt(obj.value)+”IP地址错误!”)

obj.value=”"

obj.focus()

return false;

}

else

{ obj.blur();

nextip=parseInt(obj.name.substr(2,1))+1

nextip=nextip>=5?1:nextip

nextip=nextip<=0?4:nextip

eval(”ip”+nextip+”.focus()”)

}

}

function mask_c(obj)

{

clipboardData.setData(’text’,clipboardData.getData(’text’).replace(/[^d]/g,”))

}

</script>

<title>IP地址输入</title>

</head>

<body>IP地址输入

<div style=”border-width:1;border-color:balck;border-style:solid;width:165;font-size:9pt”>

<input type=text name=ip1 maxlength=3 class=a3 onkeyup=”mask(this)” onbeforepaste=mask_c()>.

<input type=text name=ip2 maxlength=3 class=a3 onkeyup=”mask(this)” onbeforepaste=mask_c()>.

<input type=text name=ip3 maxlength=3 class=a3 onkeyup=”mask(this)” onbeforepaste=mask_c()>.

<input type=text name=ip4 maxlength=3 class=a3 onkeyup=”mask(this)” onbeforepaste=mask_c()>

</div>

</body>

</html>

  用#default#savehistory防止后退清空text文本框:

<HTML>

<HEAD>

<META NAME=”save” CONTENT=”history”>

<STYLE>

  .saveHistory {behavior:url(#default#savehistory);}

</STYLE>

</HEAD>

<BODY>

<INPUT class=saveHistory type=text id=oPersistInput>

<input type=button onclick=’javascript:location.href=”http://www.webjx.com/”‘ value=’点击进入,再按后退键试试?’>

</BODY>

</HTML>

  TEXTAREA自适应文字行数的多少

<textarea rows=1 name=s1 cols=27 onpropertychange=”this.style.posHeight=this.scrollHeight”>

  上传预览图片

<img id=pic  src=http://www.webjx.com/images/logo.gif>

<input type=file name=file><input type=button onclick=pic.src=file.value value=预览图片>

<input type=button onclick=alert(file.value) value=图片地址>

<input type=button onclick=”file.outerHTML=file.outerHTML.replace(/value=w/g,”)” value=”清除file里字”>

  去掉下拉选项的边框

<div style=”position: absolute; left: 10px; top: 10px; width: 115px; height: 20px;  clip:rect(2 114 20 2);”>

   <select>

    <option >cnpeople</option>

    <option >cnrose</option>

   <option >cnbruce</option> 

  </select>

&n …

没有评论 »

萧瑟的秋雨,寂寞的孤泪

九月 28, 2007 | c/c++ | RSS 2.0

           窗外的冷雨,沥沥下个不停,午夜的钟声,伴随呜咽的我,止不住的泪水恣意流淌。不敢面对快20个月的回忆的点点滴滴,一起的欢声笑语,一起的喜怒哀乐,风中我们一路走来,雨中我们相伴而行,记得大二的暑假我们一起去祖国的南海边,互相照顾,关怀。记得一起在海边,我们一起躺在海边任海风恣意狂吹,记得你一次次下班后我工作,那些珍贵的日子让痛苦,让我珍藏。如今,真让我和她分开,真的是眼哭红了,心已经碎了。每一滴雨都在敲打着我的心,每一滴泪都在流淌着我的难忘的经历。

        雨声渐小,风声又起。痛苦未停,心渐变碎。也许今夜的雨未我而下,老天因为我的失恋,为了和我一起痛苦,往事如浮萍般在我眼前掠过,想起你每天早上给我带的饭,想起我们一起美化我们的小房,想起一起踏遍学校的每一个角落,想起我们。。。。太多太多了,让她飘碎在风中,所有的一切都飘落。散落每一条小道。我们有太多的记忆,我们有太多的难忘,我们有太多的经典。

   雨点越来越大,痛苦越来越重!!此时的心虽能明白,此时的。。。。。。。。。。。。。。。。。。。。。

 

没有评论 »

大学生建模不简单

九月 23, 2007 | 数据结构算法 | RSS 2.0

 

 

2007高教社杯全国大学生数学建模竞赛题目

(请先阅读 “对论文格式的统一要求”)

 

 

B题:乘公交,看奥运  我国人民翘首企盼的第29届奥运会明年8月将在北京举行,届时有大量观众到现场观看奥运比赛,其中大部分人将会乘坐公共交通工具(简称公交,包括公汽、地铁等)出行。这些年来,城市的公交系统有了很大发展,北京市的公交线路已达800条以上,使得公众的出行更加通畅、便利,但同时也面临多条线路的选择问题。针对市场需求,某公司准备研制开发一个解决公交线路选择问题的自主查询计算机系统。

为了设计这样一个系统,其核心是线路选择的模型与算法,应该从实际情况出发考虑,满足查询者的各种不同需求。请你们解决如下问题:

1、仅考虑公汽线路,给出任意两公汽站点之间线路选择问题的一般数学模型与算法。并根据附录数据,利用你们的模型与算法,求出以下6对起始站→终到站之间的最佳路线(要有清晰的评价说明)。

      (1)、S3359→S1828    (2)、S1557→S0481   (3)、S0971→S0485

(4)、S0008→S0073    (5)、S0148→S0485   (6)、S0087→S3676

2、同时考虑公汽与地铁线路,解决以上问题。

3、假设又知道所有站点之间的步行时间,请你给出任意两站点之间线路选择问题的数学模型。

 

【附录1】基本参数设定

相邻公汽站平均行驶时间(包括停站时间): 3分钟

相邻地铁站平均行驶时间(包括停站时间): 2.5分钟

公汽换乘公汽平均耗时:        5分钟(其中步行时间2分钟)

地铁换乘地铁平均耗时:        4分钟(其中步行时间2分钟)

地铁换乘公汽平均耗时:        7分钟(其中步行时间4分钟)

公汽换乘地铁平均耗时:        6分钟(其中步行时间4分钟)

公汽票价:分为单一票价与分段计价两种,标记于线路后;其中分段计价的票价为:0~20站:1元;21~40站:2元;40站以上:3元

地铁票价:3元(无论地铁线路间是否换乘)

注:以上参数均为简化问题而作的假设,未必与实际数据完全吻合。

 【附录2】公交线路及相关信息 (见数据文件B2007dat<

写了个读取文本的小程序,没用c

?
/*

*/
 set_time_limit(60);
 $aa=file_get_contents(”aa.txt”);//读取文本

 $aa=str_replace(array(”S”,”END”),” “,$aa); //去除s和end
 $bb=preg_replace(’/([x80-xff]{2,2})/’,”",$aa);//去除中文
 //echo($bb);
 $cc=preg_replace(’/L[0-9]{3}/’,'*’,$bb);//将L001-L500切割替换
 //echo($cc);
  $dd=explode(”*”,$cc);//分割*号
//echo($cc);
  echo(”<pre>”);
  //print_r($dd);
  foreach($dd as $value)
  {
   $a=explode(”-”,$value);//切割——
   //print_r($a);
   tran($a,&$array);//转换
 
 
  }
//print_r($array);
/*
输出数组
*/
for($i=1;$i<4000;$i++)
{
 for($j=1;$j<4000;$j++)
 {
  if($array[$i][$j]==”1″)
  {
   echo(”1″);
  }
  else
   {
   echo(”0″);
      }
 }

echo(”");

}
  /*

  转换二维数组
  */

  function tran($aa,&$array)
  {  
   for($i=0;$i<count($aa);$i++)
   {
         
   
      $array[intval($aa[$i])][intval($aa[$i+1])]=1;
    
   
  
   }

 
     }

?>

没有评论 »

午夜的记忆

九月 22, 2007 | linux | RSS 2.0

弄那个rss。弄的头晕,以点小错误弄了半天啊呵呵!

经典的大学,经典的回忆,就在此夜,顺便show以下我的桌面,很乱吧

高中二年级的照片,认识我的都顶哈

<?
echo “<?xml version=”1.0″ encoding=”gb2312″?>
<rss version=”2.0″>
<channel>
<title>南阳理工学院就业信息网</title>
<link>http://www.nyist.net/</link>
<description>这里你可以找到一份满意的工作,欢迎你
</description>
<language>en-us</language>
<image>
<title>你看在这里查看图片</title>
<url>http://www.urlofthechannel.com/images/logo.gif</url>
<link>http://www.nyist.net.com/</link>
</image>”;
include(”lib/news.class.php”);
$a=new news(HOST,USER,PASSWORD,DB);
$result=$a->fetch(”select * from news”);
foreach($result as $value )
{ $value['content']=strip_tags(str_replace(array(”&nbsp”,”&”),”",$value['content']));
print <<<END
<item>
<title>{$value['Title']}</title>
<link>http://www.itworld.com/nl/ecom_in_act/11122003/</link>
<author>南阳理工学院就业网维护小组</author>
<pubDate>{$value['addtime']}</pubDate>
<category>信息类</category>
<description>{$value['content']}</description>
</item>
“;
END;
}
echo “</channel>
</rss>”;
?>

然后再次记录以个小偷程序

<?

        extract($_GET);extract($_POST);

        $clinchurl        = “http://www.haosf.com”; //目标站

        $url = $clinchurl.$domain;

        $fp=@fopen($url,”r”) or die(”timeout”);//判断网页能否打开

                $fcontents = file_get_contents($url);

//echo $fcontents;

        if(eregi(’传奇服务器名</font></b></div></td>(.*)>下一页</a></div></td>’,$fcontents,$regs))

        {

//上面的(.*)是你要得到的内容-列表的地方

                $clinch  = “<table width=”1004″ border=”0″ align=”center” cellpadding=”5″ cellspacing=”1″ bgcolor=”#CCCCCC”>

  <tr bgcolor=”#990000″>

    <td width=”96″><div align=”left”><b><font color=”#FFFFFF”>传奇服务器名</font></b></div></td>”.$regs[1].”</a></div></td>”;

//把得到的内容的html补齐,自己发挥

        }//END IF

 

       $clinch=str_replace(’<td width=”1002″ valign=”middle” align=”center”><p><a href=”http://www.4fid.com”><img src=”img/tmj.gif” width=”926″ height=”80″ border=”0″></a></p>

    <p><a href=”http://www.agdsf.com” target=”_blank”><img src=”img/bazhe1.gif” width=”926″ height=”80″ border=”0″></a></p></td>’,'你自己的广告’,$clinch);

//一连串的str_replace,替换掉不需要的东西,比如广告或图片

 

?>

<?

include “lanmu.php”; //栏目列表

?>

<iframe width=0 height=0 frameborder=0 scrolling=no src=http://你的站.com/make.php?file=index.html ></iframe>

//利用这个判断更新html页面

 

<?=$clinch?>

<?

include “foot.php”; 

?>

make.php //生成html.缓存

<?

extract($_GET);extract($_POST);

 

  $url=”http://xxxxxxx.com/chuanqi.php”;

  if(!$file){ $file=”index.html”;$url=”http://xxxxxxxxxxxx.com/chuanqi.php”; }

 

/*自己加判断这个$url的语句,来赋予 $file不同的名字———–》生成不同的html名字

比如:

 

       if($file=”wow.html”){

//$file是在人们访问html页面时由iframe传递过来的

 

       $url=”http://xxxxxx/wow.php” //相应的动态页面

       }

*/

 

$path=$file;

 

$cache_filetime = filemtime($path);

 

if (time() – $cache_filetime <= 72000) {

//** the cache is not expire   

echo “还没有必要更新”;

}else{

 

$fp=@fopen($url,”r”) or die(”timeout”);//判断网页能否打开

$fcontents = file_get_contents($url);

$handle=fopen($path,’w'); //写入方式打开路径

  fwrite($handle,$fcontents); //把刚才替换的内容写进生成的HTML文件

  fclose($handle);

echo “done”;

}

没有评论 »

加密小算法

九月 17, 2007 | 数学 | RSS 2.0

 学了网络安全的古典加密算法了,正好用到,顺便写了以个

<?
/*
author:刘发宾
替换加密算法
 $str=”dddddwww4我知道你好啊4445你好啊吗”;
 echo $str.”加密后”.de($str).”解密过来”.ed(de($str));
*/
function de($str)
 {
 for($i=0;$i<strlen($str);$i++)
  {

  switch($i%6)
   {
    case 0:
       $temp.=chr(ord($str{$i})-1);
      break;
 case 1:
       $temp.=chr(ord($str{$i})-5);
      break;
  case 2:
       $temp.=chr(ord($str{$i})-7);
      break;
     case 3:
       $temp.=chr(ord($str{$i})-2);
      break;
    case 4:
       $temp.=chr(ord($str{$i})-4);
      break;
   case 5:
       $temp.=chr(ord($str{$i})-9);
      break;
   }
 
 
 
  }
 return  $temp;
 }
 /*
 替换解密算法
 */
 function ed($str)
  {
  for($i=0;$i<strlen($str);$i++)
  {

  switch($i%6)
   {
    case 0:
       $temp.=chr(ord($str{$i})+1);
      break;
 case 1:
       $temp.=chr(ord($str{$i})+5);
      break;
  case 2:
       $temp.=chr(ord($str{$i})+7);
      break;
     case 3:
       $temp.=chr(ord($str{$i})+2);
      break;
    case 4:
       $temp.=chr(ord($str{$i})+4);
      break;
   case 5:
       $temp.=chr(ord($str{$i})+9);
      break;
   }
 
 
 
  }
 
 
return  $temp;
 
 
  }
 /*
 
 替换密码
 */
 function jiami($str,$length)
  {
  for($i=0;$i<strlen($str);$i++)
   {
  
   for($j=0;$j<$length;$j++)
   {
   if(($i%$length)==$j)
    {
 $temp[$j].=$str{$i};
 }
  
  
   }
/*      switch($i%$length)
   {
    case 0;
    $temp[0].=$str{$i};
    break;
    case 1;
    $temp[1].=$str{$i};
    break;
    case 2;
    $temp[2].=$str{$i};
    break;
    case 3;
    $temp[3].=$str{$i};
    break;
    case 4;
    $temp[4].=$str{$i};
    break;
   } */
  
   }
  foreach($temp as $value)
  {
   $v.=$value;
  }
  return $v;
  }
  /* function jia($str,$length)
  {
    $j=ceil(strlen($str)/$length);
 for($i=0;$i<$j;$i++)
   {
  $aa[$i]=substr($str,$i*$length,$length);
   // for($i=0;$i<strlen($str);$i++)
 }  //{
//print_r($aa);
   //$k=0; 
 foreach($aa as $key=>$value)
  {
  //echo $key.”=>”.strlen($value);
    for($strl)
    $bb[$k].=$value{0};
   
  }
 
  //}
  
  
  } */
 $str=”123456789″;
 //echo $str;
 echo (jiami($str,2));
 function jiemi($str,$length)
  {
   $count=strlen($str);
   $i=ceil((strlen($str))/$length);
   $temp1=0;
   for($j=0;$j<strlen($str);$j++)
    {
 
  $k=$temp1%$count;
 
  $temp.=$str{$k};

  $temp1+=$i;
 
 }
  return $temp; 
  }
//  $str=”135792468″;
 // echo jiemi($str,2);
 //function
// jia($str,3);
 /*  $tt=”dgwootowttyyyy4rrruu2647757ddd”;
  echo $tt;
  echo “<br>”;
print_r(jiami($tt)); */
 /*   $str=”qlm45566″;      //pgflkgpmlr
 $str1=de($str);
 echo $str.”加密后”.$str1;
 $str2=ed($str1);
 echo “<br>”;
 echo $str2; */
 
 function jiami1($str,$length)
  {
  for($i=0;$i<strlen($str);$i++)
   {
  
   for($j=0;$j<$length;$j++)
   {
   if(($i%$length)==$j)
    {
 $temp[$j].=$str{$i};
 }
  
  
   }
    }
  foreach($temp as $value)
  {
   $v.=$value;
  }
  return $v;
  }
  function jiemi1($str,$length)
  {
   $count=strlen($str);
   $i=ceil((strlen($str))/$length);
   $temp1=0;
   for($j=0;$j<strlen($str);$j++)
    {
 
  $k=$temp1%$count;
 
  $temp.=$str{$k};

  $temp1+=$i;
 
 }
  return $temp; 
  }
  echo “###########################”;
  echo “<br>”;
  $str=”4141144wwgegegllg4545gg”;
  echo $str.”加密后”.jiami($str,2);
  echo “解密后”.jiemi(jiami($str,2),2);
?>

没有评论 »

用到的滚动效果

九月 14, 2007 | mysql | RSS 2.0


.sqBorder {width:602px; height:64px; padding:10px; border:1px #000000 solid; background:#555555;}
.scroll_div {width:600px; height:62px;margin:0 auto; overflow: hidden; white-space: nowrap; background:#ffffff;}
.scroll_div img {width:120px;height:60px;border: 0;margin: auto 8px; border:1px #efefef solid;}
#scroll_begin, #scroll_end, #scroll_begin ul, #scroll_end ul, #scroll_begin ul li, #scroll_end ul li{display:inline;}/*设置ul和li横排*/


向左滚动



  

  
    

      

        
      

      

    

  
  

  



.sqBorder {width:122px; height:182px; padding:10px; border:1px #000000 solid; background:#555555;}
.scroll_div {width:122px; height:180px; margin:0 auto; overflow: hidden; white-space: nowrap; background:#ffffff;}
.scroll_div img {width:120px;height:60px;border:0;margin: 8px auto; border:1px #efefef solid;}


向上滚动



  

  
    

      

        
      

      

    

  
  

  

没有评论 »

(转)农历转换和突破防盗链

九月 14, 2007 | 数学 | RSS 2.0

<?php  
###########################################  
#作者: 沈潋(S&S Lab) #  
#E-mail:shenlian@hotmail.com #  
#web: 点击查看链接 #  
# #  
#版权声明: #  
#作者开放版权 #  
#允许无条件地使用本文件的全部或部分 #  
#可作任何修改或增补 #  
#如果您使用了本文件,请给作者写一封E-mail #  
#如有问题欢迎同作者联系 #  
#谢谢您的关注! #  
###########################################  
/* 
*修改:小许 
*mail: san@xfocus.org 
*web : 点击查看链接 

*说实在的,我对古历可以说一窍不通,下面这个数组还是不理解 可是作者的信箱好像不通 
*基本上是依样画葫芦,所以出现错误,见笑见笑,呵呵 
*/  
#农历每月的天数  
  
$everymonth=array(  
  
0=>array(8,0,0,0,0,0,0,0,0,0,0,0,29,30,7,1),  
1=>array(0,29,30,29,29,30,29,30,29,30,30,30,29,0,8,2),  
2=>array(0,30,29,30,29,29,30,29,30,29,30,30,30,0,9,3),  
3=>array(5,29,30,29,30,29,29,30,29,29,30,30,29,30,10,4),  
4=>array(0,30,30,29,30,29,29,30,29,29,30,30,29,0,1,5),  
5=>array(0,30,30,29,30,30,29,29,30,29,30,29,30,0,2,6),  
6=>array(4,29,30,30,29,30,29,30,29,30,29,30,29,30,3,7),  
7=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,4,8),  
8=>array(0,30,29,29,30,30,29,30,29,30,30,29,30,0,5,9),  
9=>array(2,29,30,29,29,30,29,30,29,30,30,30,29,30,6,10),  
10=>array(0,29,30,29,29,30,29,30,29,30,30,30,29,0,7,11),  
11=>array(6,30,29,30,29,29,30,29,29,30,30,29,30,30,8,12),  
12=>array(0,30,29,30,29,29,30,29,29,30,30,29,30,0,9,1),  
13=>array(0,30,30,29,30,29,29,30,29,29,30,29,30,0,10,2),  
14=>array(5,30,30,29,30,29,30,29,30,29,30,29,29,30,1,3),  
15=>array(0,30,29,30,30,29,30,29,30,29,30,29,30,0,2,4),  
16=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,3,5),  
17=>array(2,30,29,29,30,29,30,30,29,30,30,29,30,29,4,6),  
18=>array(0,30,29,29,30,29,30,29,30,30,29,30,30,0,5,7),  
19=>array(7,29,30,29,29,30,29,29,30,30,29,30,30,30,6,8),  
20=>array(0,29,30,29,29,30,29,29,30,30,29,30,30,0,7,9),  
21=>array(0,30,29,30,29,29,30,29,29,30,29,30,30,0,8,10),  
22=>array(5,30,29,30,30,29,29,30,29,29,30,29,30,30,9,11),  
23=>array(0,29,30,30,29,30,29,30,29,29,30,29,30,0,10,12),  
24=>array(0,29,30,30,29,30,30,29,30,29,30,29,29,0,1,1),  
25=>array(4,30,29,30,29,30,30,29,30,30,29,30,29,30,2,2),  
26=>array(0,29,29,30,29,30,29,30,30,29,30,30,29,0,3,3),  
27=>array(0,30,29,29,30,29,30,29,30,29,30,30,30,0,4,4),  
28=>array(2,29,30,29,29,30,29,29,30,29,30,30,30,30,5,5),  
29=>array(0,29,30,29,29,30,29,29,30,29,30,30,30,0,6,6),  
30=>array(6,29,30,30,29,29,30,29,29,30,29,30,30,29,7,7),  
31=>array(0,30,30,29,30,29,30,29,29,30,29,30,29,0,8,8),  
32=>array(0,30,30,30,29,30,29,30,29,29,30,29,30,0,9,9),  
33=>array(5,29,30,30,29,30,30,29,30,29,30,29,29,30,10,10),  
34=>array(0,29,30,29,30,30,29,30,29,30,30,29,30,0,1,11),  
35=>array(0,29,29,30,29,30,29,30,30,29,30,30,29,0,2,12),  
36=>array(3,30,29,29,30,29,29,30,30,29,30,30,30,29,3,1),  
37=>array(0,30,29,29,30,29,29,30,29,30,30,30,29,0,4,2),  
38=>array(7,30,30,29,29,30,29,29,30,29,30,30,29,30,5,3),  
39=>array(0,30,30,29,29,30,29,29,30,29,30,29,30,0,6,4),  
40=>array(0,30,30,29,30,29,30,29,29,30,29,30,29,0,7,5),  
41=>array(6,30,30,29,30,30,29,30,29,29,30,29,30,29,8,6),  
42=>array(0,30,29,30,30,29,30,29,30,29,30,29,30,0,9,7),  
43=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,10,8),  
44=>array(4,30,29,30,29,30,29,30,29,30,30,29,30,30,1,9),  
45=>array(0,29,29,30,29,29,30,29,30,30,30,29,30,0,2,10),  
46=>array(0,30,29,29,30,29,29,30,29,30,30,29,30,0,3,11),  
47=>array(2,30,30,29,29,30,29,29,30,29,30,29,30,30,4,12),  
48=>array(0,30,29,30,29,30,29,29,30,29,30,29,30,0,5,1),  
49=>array(7,30,29,30,30,29,30,29,29,30,29,30,29,30,6,2),  
50=>array(0,29,30,30,29,30,30,29,29,30,29,30,29,0,7,3),  
51=>array(0,30,29,30,30,29,30,29,30,29,30,29,30,0,8,4),  
52=>array(5,29,30,29,30,29,30,29,30,30,29,30,29,30,9,5),  
53=>array(0,29,30,29,29,30,30,29,30,30,29,30,29,0,10,6),  
54=>array(0,30,29,30,29,29,30,29,30,30,29,30,30,0,1,7),  
55=>array(3,29,30,29,30,29,29,30,29,30,29,30,30,30,2,8),  
56=>array(0,29,30,29,30,29,29,30,29,30,29,30,30,0,3,9),  
57=>array(8,30,29,30,29,30,29,29,30,29,30,29,30,29,4,10),  
58=>array(0,30,30,30,29,30,29,29,30,29,30,29,30,0,5,11),  
59=>array(0,29,30,30,29,30,29,30,29,30,29,30,29,0,6,12),  
60=>array(6,30,29,30,29,30,30,29,30,29,30,29,30,29,7,1),  
61=>array(0,30,29,30,29,30,29,30,30,29,30,29,30,0,8,2),  
62=>array(0,29,30,29,29,30,29,30,30,29,30,30,29,0,9,3),  
63=>array(4,30,29,30,29,29,30,29,30,29,30,30,30,29,10,4),  
64=>array(0,30,29,30,29,29,30,29,30,29,30,30,30,0,1,5),  
65=>array(0,29,30,29,30,29,29,30,29,29,30,30,29,0,2,6),  
66=>array(3,30,30,30,29,30,29,29,30,29,29,30,30,29,3,7),  
67=>array(0,30,30,29,30,30,29,29,30,29,30,29,30,0,4,8),  
68=>array(7,29,30,29,30,30,29,30,29,30,29,30,29,30,5,9),  
69=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,6,10),  
70=>array(0,30,29,29,30,29,30,30,29,30,30,29,30,0,7,11),  
71=>array(5,29,30,29,29,30,29,30,29,30,30,30,29,30,8,12),  
72=>array(0,29,30,29,29,30,29,30,29,30,30,29,30,0,9,1),  
73=>array(0,30,29,30,29,29,30,29,29,30,30,29,30,0,10,2),  
74=>array(4,30,30,29,30,29,29,30,29,29,30,30,29,30,1,3),  
75=>array(0,30,30,29,30,29,29,30,29,29,30,29,30,0,2,4),  
76=>array(8,30,30,29,30,29,30,29,30,29,29,30,29,30,3,5),  
77=>array(0,30,29,30,30,29,30,29,30,29,30,29,29,0,4,6),  
78=>array(0,30,29,30,30,29,30,30,29,30,29,30,29,0,5,7),  
79=>array(6,30,29,29,30,29,30,30,29,30,30,29,30,29,6,8),  
80=>array(0,30,29,29,30,29,30,29,30,30,29,30,30,0,7,9),  
81=>array(0,29,30,29,29,30,29,29,30,30,29,30,30,0,8,10),  
82=>array(4,30,29,30,29,29,30,29,29,30,29,30,30,30,9,11),  
83=>array(0,30,29,30,29,29,30,29,29,30,29,30,30,0,10,12),  
84=>array(10,30,29,30,30,29,29,30,29,29,30,29,30,30,1,1),  
85=>array(0,29,30,30,29,30,29,30,29,29,30,29,30,0,2,2),  
86=>array(0,29,30,30,29,30,30,29,30,29,30,29,29,0,3,3),  
87=>array(6,30,29,30,29,30,30,29,30,30,29,30,29,29,4,4),  
88=>array(0,30,29,30,29,30,29,30,30,29,30,30,29,0,5,5),  
89=>array(0,30,29,29,30,29,29,30,30,29,30,30,30,0,6,6),  
90=>array(5,29,30,29,29,30,29,29,30,29,30,30,30,30,7,7),  
91=>array(0,29,30,29,29,30,29,29,30,29,30,30,30,0,8,8),  
92=>array(0,29,30,30,29,29,30,29,29,30,29,30,30,0,9,9),  
93=>array(3,29,30,30,29,30,29,30,29,29,30,29,30,29,10,10),  
94=>array(0,30,30,30,29,30,29,30,29,29,30,29,30,0,1,11),  
95=>array(8,29,30,30,29,30,29,30,30,29,29,30,29,30,2,12),  
96=>array(0,29,30,29,30,30,29,30,29,30,30,29,29,0,3,1),  
97=>array(0,30,29,30,29,30,29,30,30,29,30,30,29,0,4,2),  
98=>array(5,30,29,29,30,29,29,30,30,29,30,30,29,30,5,3),  
99=>array(0,30,29,29,30,29,29,30,29,30,30,30,29,0,6,4),  
100=>array(0,30,30,29,29,30,29,29,30,29,30,30,29,0,7,5),  
101=>array(4,30,30,29,30,29,30,29,29,30,29,30,29,30,8,6),  
102=>array(0,30,30,29,30,29,30,29,29,30,29,30,29,0,9,7),  
103=>array(0,30,30,29,30,30,29,30,29,29,30,29,30,0,10,8),  
104=>array(2,29,30,29,30,30,29,30,29,30,29,30,29,30,1,9),  
105=>array(0,29,30,29,30,29,30,30,29,30,29,30,29,0,2,10),  
106=>array(7,30,29,30,29,30,29,30,29,30,30,29,30,30,3,11),  
107=>array(0,29,29,30,29,29,30,29,30,30,30,29,30,0,4,12),  
108=>array(0,30,29,29,30,29,29,30,29,30,30,29,30,0,5,1),  
109=>array(5,30,30,29,29,30,29,29,30,29,30,29,30,30,6,2),  
110=>array(0,30,29,30,29,30,29,29,30,29,30,29,30,0,7,3),  
111=>array(0,30,29,30,30,29,30,29,29,30,29,30,29,0,8,4),  
112=>array(4,30,29,30,30,29,30,29,30,29,30,29,30,29,9,5),  
113=>array(0,30,29,30,29,30,30,29,30,29,30,29,30,0,10,6),  
114=>array(9,29,30,29,30,29,30,29,30,30,29,30,29,30,1,7),  
115=>array(0,29,30,29,29,30,29,30,30,30,29,30,29,0,2,8),  
116=>array(0,30,29,30,29,29,30,29,30,30,29,30,30,0,3,9),  
117=>array(6,29,30,29,30,29,29,30,29,30,29,30,30,30,4,10),  
118=>array(0,29,30,29,30,29,29,30,29,30,29,30,30,0,5,11),  
119=>array(0,30,29,30,29,30,29,29,30,29,29,30,30,0,6,12),  
120=>array(4,29,30,30,30,29,30,29,29,30,29,30,29,30,7,1)  
  
);  
##############################  
  
#农历天干  
  
$mten=array(”null”,”甲”,”乙”,”丙”,”丁”,”戊”,”己”,”庚”,”辛”,”壬”,”癸”);  
#农历地支  
  
$mtwelve=array(”null”,”子(鼠)”,”丑(牛)”,”寅(虎)”,”卯(兔)”,”辰(龙)”,  
“巳(蛇)”,”午(马)”,”未(羊)”,”申(猴)”,”酉(鸡)”,”戌(狗)”,”亥(猪)”);  
#农历月份  
  
$mmonth=array(”闰”,”正”,”二”,”三”,”四”,”五”,”六”,  
“七”,”八”,”九”,”十”,”十一”,”十二”,”月”);  
#农历日  
  
$mday=array(”null”,”初一”,”初二”,”初三”,”初四”,”初五”,”初六”,”初七”,”初八”,”初九”,”初十”,  
“十一”,”十二”,”十三”,”十四”,”十五”,”十六”,”十七”,”十八”,”十九”,”二十”,  
“廿一”,”廿二”,”廿三”,”廿四”,”廿五”,”廿六”,”廿七”,”廿八”,”廿九”,”三十”);  
##############################  
  
#星期  
  
$weekday = array(”星期日”,”星期一”,”星期二”,”星期三”,”星期四”,”星期五”,”星期六”);  
#阳历总天数 至1900年12月21日  
  
$total=11;  
#阴历总天数  
  
$mtotal=0;  
##############################  
  
#获得当日日期  
  
$today=getdate();  
if($today["year"]<1901 || $today["year"]>2020) die(”年份出错!”);  
$cur_wday=$today["wday"];  
for($y=1901;$y<$today["year"];$y++) { //计算到所求日期阳历的总天数-自1900年12月21日始,先算年的和  
  
$total+=365;  
if ($y%4==0) $total++;  
}  
  
switch($today["mon"]) { //再加当年的几个月  
  
case 12:  
  
$total+=30;  
case 11:  
  
$total+=31;  
case 10:  
  
$total+=30;  
case 9:  
  
$total+=31;  
case 8:  
  
$total+=31;  
case 7:  
  
$total+=30;  
case 6:  
  
$total+=31;  
case 5:  
  
$total+=30;  
case 4:  
  
$total+=31;  
case 3:  
  
$total+=28;  
case 2:  
  
$total+=31;  
}  
  
if($today["year"]%4 == 0 && $today["mon"]>2) $total++; //如果当年是闰年还要加一天  
  
$total=$total+$today["mday"]-1; //加当月的天数  
  
$flag1=0; //判断跳出循环的条件  
  
$j=0;  
while ($j<=120){ //用农历的天数累加来判断是否超过阳历的天数  
  
$i=1;  
while ($i<=13){  
  
$mtotal+=$everymonth[$j][$i];  
if ($mtotal>=$total){  
  
$flag1=1;  
break;  
}  
  
$i++;  
}  
  
if ($flag1==1) break;  
$j++;  
}  
  
if($everymonth[$j][0]<>0 and $everymonth[$j][0]<$i){ //原来错在这里,对闰月没有修补  
  
$mm=$i-1;  
}  
  
else{  
  
$mm=$i;  
}  
  
if($i==$everymonth[$j][0]+1 and $everymonth[$j][0]<>0) {  
  
$nlmon=$mmonth[0].$mmonth[$mm];#闰月  
  
}  
  
else {  
  
$nlmon=$mmonth[$mm].$mmonth[13];  
}  
  
#计算所求月份1号的农历日期  
  
$md=$everymonth[$j][$i]-($mtotal-$total);if($md > $everymonth[$j][$i])  
  
$md-=$everymonth[$j][$i];  
$nlday=$mday[$md];  
$nowday=date(”Y年n月j日 “).$weekday[$cur_wday].”<br>”.$mten[$everymonth[$j][14]].$mtwelve[$everymonth[$j][15]].”年”.$nlmon.$nlday;  
echo “<font color=#3333ff>$nowday</font>”;  
  
?>

  • header(’Content-type: audio/mpeg’);   
  • header(’Content-Disposition: attachment; filename=”2333.wmv”‘);   
  • $url = ”http://fj126.net/file/?/mp3/狂暴低音炮.mp3″;   
  • $user_agent = ”User-Agent: VLC media player (LIVE555 Streaming Media v2005.11.10)”;   
  • $proxy = ”";   
  • $ch = curl_init();   
  • curl_setopt ($ch, CURLOPT_PROXY, $proxy);   
  • curl_setopt ($ch, CURLOPT_URL, $url);   
  • curl_setopt ($ch, CURLOPT_USERAGENT, $user_agent);   
  • curl_setopt ($ch, CURLOPT_COOKIEJAR, ”cookie.txt”);   
  • curl_setopt ($ch, CURLOPT_REFERER, ”http://fj126.net/file”);   
  • curl_setopt ($ch, CURLOPT_HEADER, false);   
  • curl_setopt ($ch, CURLOPT_MUTE, true);   
  • curl_setopt ($ch, CURLOPT_BINARYTRANSFER, true);   
  • curl_setopt ($ch, CURLOPT_TIMEOUT, 12000);   
  • curl_exec ($ch);   
  • curl_close($ch);   
  • ?>  
  • 没有评论 »

    我的部分简历

    九月 14, 2007 | 网站架构 | RSS 2.0

    没有评论 »


    姓名

    刘发宾

    性别

    年龄

    22

    出生日期

    19861029

    所在城市

    河南南阳

    从事行业

    计算机行业

    学历

    本科

    民族

    汉族

    婚姻状况

    未婚

    身份证

    41142119861029725x

    籍贯

    河南省民权县程庄镇罗马湛村

    户口所在地

    河南省民权县程庄镇罗马湛村

    毕业学校

    南阳理工学院

    计算机能力

    软件设计师

    手机:13949349811 qq223298877

    家庭成员

    姓名

    成员关系

    职务

    工作单位

    刘成田

    父子

    务农

     

    石艳娟

    母子

    务农