2005年11月09日

其实要得到这两个数据都不难,因为这两个工具都有Toolbar,随便找一个sniffer工具看一看就知道了。
为什么要用程序得到这两个数据呢?Google Pagerank是Google排名的一个相对重要的参数,对于一批网站URL,如果能够批量地了解这些网站的PageRank,可以很快地了解这些网站的反向连接数。Alexa排名的前500名是能够列出来的,但是500名以后就没办法列出来了,如果能够通过程序得到任何域名的Alexa排名,也是相当有用的。
以下是对Google PR和Alexa的一些分析及获取方法。

1 Google PageRank

http://toolbarqueries.google.com/search?client=navclient-auto&ch=CHECKSUM&ie=UTF-8&oe=UTF-8&features=Rank:FVN&q=info:http://YOURURL

以上地址中,CHECKSUM是通过对后面的http://YOURURL计算后得到的一个数字,用来验证URL是否从Toolbar过来的。

Checksum的算法请在网上搜索,一定找得到。流行最广的,也是最早的是一段PHP代码。

<?php
/*
    This code is released unto the public domain
*/
header("Content-Type: text/plain; charset=utf-8");
define(‘GOOGLE_MAGIC’, 0xE6359A60);

//unsigned shift right
function zeroFill($a, $b)
{
    $z = hexdec(80000000);
        if ($z & $a)
        {
            $a = ($a>>1);
            $a &= (~$z);
            $a |= 0×40000000;
            $a = ($a>>($b-1));
        }
        else
        {
            $a = ($a>>$b);
        }
        return $a;
}


function mix($a,$b,$c) {
  $a -= $b; $a -= $c; $a ^= (zeroFill($c,13));
  $b -= $c; $b -= $a; $b ^= ($a<<8);
  $c -= $a; $c -= $b; $c ^= (zeroFill($b,13));
  $a -= $b; $a -= $c; $a ^= (zeroFill($c,12));
  $b -= $c; $b -= $a; $b ^= ($a<<16);
  $c -= $a; $c -= $b; $c ^= (zeroFill($b,5));
  $a -= $b; $a -= $c; $a ^= (zeroFill($c,3));  
  $b -= $c; $b -= $a; $b ^= ($a<<10);
  $c -= $a; $c -= $b; $c ^= (zeroFill($b,15));
  
  return array($a,$b,$c);
}

function GoogleCH($url, $length=null, $init=GOOGLE_MAGIC) {
    if(is_null($length)) {
        $length = sizeof($url);
    }
    $a = $b = 0×9E3779B9;
    $c = $init;
    $k = 0;
    $len = $length;
    while($len >= 12) {
        $a += ($url[$k+0] +($url[$k+1]<<8) +($url[$k+2]<<16) +($url[$k+3]<<24));
        $b += ($url[$k+4] +($url[$k+5]<<8) +($url[$k+6]<<16) +($url[$k+7]<<24));
        $c += ($url[$k+8] +($url[$k+9]<<8) +($url[$k+10]<<16)+($url[$k+11]<<24));
        $mix = mix($a,$b,$c);
        $a = $mix[0]; $b = $mix[1]; $c = $mix[2];
        $k += 12;
        $len -= 12;
    }

    $c += $length;
    switch($len)              /* all the case statements fall through */
    {
        case 11: $c+=($url[$k+10]<<24);
        case 10: $c+=($url[$k+9]<<16);
        case 9 : $c+=($url[$k+8]<<8);
          /* the first byte of c is reserved for the length */
        case 8 : $b+=($url[$k+7]<<24);
        case 7 : $b+=($url[$k+6]<<16);
        case 6 : $b+=($url[$k+5]<<8);
        case 5 : $b+=($url[$k+4]);
        case 4 : $a+=($url[$k+3]<<24);
        case 3 : $a+=($url[$k+2]<<16);
        case 2 : $a+=($url[$k+1]<<8);
        case 1 : $a+=($url[$k+0]);
         /* case 0: nothing left to add */
    }
    $mix = mix($a,$b,$c);
    /*——————————————– report the result */
    return $mix[2];
}

//converts a string into an array of integers containing the numeric value of the char
function strord($string) {
    for($i=0;$i<strlen($string);$i++) {
        $result[$i] = ord($string{$i});
    }
    return $result;
}
//
http://www.example.com/ – Checksum: 6540747202
$url = ‘info:’.$_GET['url'];
print("
url:\t{$_GET['url']}\n");
$ch = GoogleCH(strord($url));
printf("ch:\t6%u\n",$ch);
?>

还可以找到VB和Pascal的计算Checksum的源码。

GET那个URL可以直接得到那个URL的Pagerank。注意URL可以是一个域名,也可以是一个地址。这样就可以完全得到google pagerank了。

2 Alexa排名数据

http://data.alexa.com/data/+wQ411en8000lA?cli=10&dat=snba&ver=7.0&cdt=alx_vw%3D20%26wid%3D12206%26act%3D00000000000%26ss%3D1680×16t%3D0%26ttl%3D35371%26vis%3D1%26rq%3D4&url=spaces.msn.com

GET以上地址即可。把spaces.msn.com换程序要的地址。调用后将返回一段xml如下:

<?xml version="1.0" encoding="UTF-8"?>

<ALEXA VER="0.9" URL="spaces.msn.com/" HOME="0" AID="=">
<RLS TITLE="Related Links" PREFIX="http://" more ="389">
<RL HREF="mobile.msn.co.jp/" TYPE="link" SRC="NTrails" TITLE="Msn" CONF="034" />
<RL HREF="cnn.com/" TYPE="link" SRC="Siblinks" TITLE="CNN – Cable News Network" CONF="300" ASIN="B00006B48F"/>
<RL HREF="cbsnews.com/sections/home/main100.shtml" TYPE="link" SRC="Siblinks" TITLE="CBS News" CONF="300" ASIN="B00006DFEQ"/>
<RL HREF="abcnews.go.com/" TYPE="link" SRC="Siblinks" TITLE="ABC News" CONF="300" ASIN="B00006CBMR"/>
<RL HREF="altavista.com/" TYPE="link" SRC="Siblinks" TITLE="Altavista" CONF="300" ASIN="B00006CZ94"/>
<RL HREF="yahoo.com/" TYPE="link" SRC="UserEdit" TITLE="Yahoo!" CONF="300" ASIN="B00006D2TC"/>
<RL HREF="
www.hotbot.com/" TYPE="link" SRC="UserEdit" TITLE="HotBot" CONF="300" ASIN="B00006BUYX"/>
<RL HREF="netscape.com/" TYPE="link" SRC="UserEdit" TITLE="Netscape" CONF="300" ASIN="B00006C6KQ"/>
<RL HREF="excite.com/" TYPE="link" SRC="UserEdit" TITLE="My Excite" CONF="300" ASIN="B00006E21K"/>
<RL HREF="aol.com/" TYPE="link" SRC="UserEdit" TITLE="AOL Anywhere" CONF="300" ASIN="B00006ARD3"/>
<RL HREF="
www.geocities.com/" TYPE="link" SRC="Usertrails" TITLE="www.geocities.com/" CONF="000"/>
</RLS>
<SD TITLE="Alexa Site Data" FLAGS="DMOZ">
<AMZN ASIN="B000304FNA" URL="spaces.msn.com/"/>
<ADDR STREET="One Microsoft Way" CITY="Redmond" STATE="WA" ZIP="98052" COUNTRY="US"/>
<CREATED DATE="10-Nov-1994" DAY="10" MONTH="11" YEAR="1994"/>
<PHONE NUMBER="unlisted"/>
<OWNER NAME="
www.msn.com"/>
<EMAIL ADDR="
info@msn.com"/>
<POP RATE="13"/>
<DOS>
<DO DOMAIN="microsoft.com" TITLE="microsoft.com"/>
<DO DOMAIN="passport.com" TITLE="passport.com"/>
<DO DOMAIN="msnbc.com" TITLE="msnbc.com"/>
<DO DOMAIN="windowsmedia.com" TITLE="windowsmedia.com"/>
<DO DOMAIN="iechannelguide.com" TITLE="iechannelguide.com"/>
<DO DOMAIN="cooltravelassistant.com" TITLE="cooltravelassistant.com"/>
<DO DOMAIN="mstrav.com" TITLE="mstrav.com"/>
<DO DOMAIN="msnusers.com" TITLE="msnusers.com"/>
<DO DOMAIN="msimg.com" TITLE="msimg.com"/>
<DO DOMAIN="eshop.com" TITLE="eshop.com"/>
<DO DOMAIN="windowsupdate.com" TITLE="windowsupdate.com"/>
<DO DOMAIN="passportimages.com" TITLE="passportimages.com"/>
<DO DOMAIN="home-publishing.com" TITLE="home-publishing.com"/>
<DO DOMAIN="slate.com" TITLE="slate.com"/>
<DO DOMAIN="windows.com" TITLE="windows.com"/>
<DO DOMAIN="windows95.com" TITLE="windows95.com"/>
<DO DOMAIN="expediamaps.com" TITLE="expediamaps.com"/>
<DO DOMAIN="encarta.com" TITLE="encarta.com"/>
<DO DOMAIN="homeadvisor.com" TITLE="homeadvisor.com"/>
<DO DOMAIN="carpoint.com" TITLE="carpoint.com"/>
<DO DOMAIN="hotmai.com" TITLE="hotmai.com"/>
<DO DOMAIN="msn.net" TITLE="msn.net"/>
<DO DOMAIN="moneycentral.com" TITLE="moneycentral.com"/>
<DO DOMAIN="msretech.com" TITLE="msretech.com"/>
<DO DOMAIN="microsoftfrontpage.com" TITLE="microsoftfrontpage.com"/>
<DO DOMAIN="vworlds.org" TITLE="vworlds.org"/>
<DO DOMAIN="investor.com" TITLE="investor.com"/>
<DO DOMAIN="homail.com" TITLE="homail.com"/>
<DO DOMAIN="crimsonskies.com" TITLE="crimsonskies.com"/>
</DOS>
<TICKER SYMBOL="MSFT"/>
<LANG LEX="en"/>
<LINKSIN NUM="5558"/>
<SPEED TEXT="2537" PCT="30"/>
<REVIEWS AVG="4.0" NUM="21"/>
<POPULARITY URL="msn.com/" TEXT="2"/>
<CHILD SRATING="0"/>
<ASSOCS>
<ASSOC ID="start-buymusiclink"/></ASSOCS>
<REACH RANK="2"/>
</SD>

<KEYWORDS>
</KEYWORDS>
 </ALEXA>

这样,就可以通过程序得到任何一个地址的Google PR和Alexa排名了。

2005年11月07日

  首先说我不是搞密码的,以前用MD5仅仅是写程序时处于安全考虑对口令进行加密,对于为什么MD5不能破解也不是太清楚(山大的王小云教授部分破解了MD5已经是事实),有时会看到一些软件的下载处会注明一个MD5的哈希值,开始以为是序列号之类的,但我从来没用到过这串乱码,到底为什么我希望弄清楚。
  我翻了一下资料上面说经MD5、SHA1之类的哈希算法得到的仅仅是个消息摘要,如果明文中稍作改动就会使得到的哈希产生很大的变化,不太明白也懒得看太多,于是我写了一句代码测试一下:

<?php
  $string = tttttt;
  echo md5($string);
?>


  当我改变string的值时,输出果然一点都不一样,我还将$string设为很长的一段文字,通过修改其中某个字符前后来判断,结果和前面一样。那么现在我产生一点想法,通过这种方法我可以判断我的文档中的文字是否被别人修改过,但是好多文档并不是普通的文本文件,比如一幅图片、一个软件,能不能用类似的办法判断是否被人修改过呢?继续测试吧,首先我读取一个二进制文件到内存中,再对读取的内容做哈希不就可以了嘛!于是用下面的代码:

<?php
  $filename = "c:\\test\\photo.gif";
  $handle = fopen($filename, "rb");
  $contents = fread($handle, filesize ($filename));
  fclose($handle);
?>

 
  我测试了好几种文件类型,最小的几十K,最大的600多兆,都是可行的!唯一的缺点是感觉用PHP去执行效率有点低,有这个想法我当然可以用delphi之类(其它的我还不会呢,呵呵)的工具写一个界面友好点的工具了,写到这里,才突然想到网上这种工具肯定很多,就当一个学习的过程吧!

发表于 2005-11-07 11:14
这几天用PHP做一个程序,用到了大文件的上传,因为仅在局域网中使用,所以速度不是问题。我想测试一下PHP到底能传多大的文件,我修改了php.ini的几个配置,用一下程序传文件,果然可以上传几十兆甚至上百兆的文件了。

php.ini需要修改的量,这里仅列出原始配置,可以修改成你希望的大小
upload_max_filesize = 2m 
post_max_size 
= 2m 
max_execution_time 
= 30 
max_input_time 
= 600
memory_limit 
= 8m 


我上传文件的代码如下:
————upload.html————

<html>
<head>
<body>
<title>Upload new news file</title>
</head>
<h1>Upload new news file</h1>
<form enctype="multipart/form-data" method="post" action="./upload.php">
<label>upload this file:
<input name="userfile" type="file" id="userfile" />
</label>
<label>
<input type="submit" name="Submit" value="Send File" />
</label>
</form>
</body>
</html>

————upload.php————
<html>
<head>
<title>Uploading File</title>
</head>
<body>
<h1>Uploading File</h1>
<?php
//put the file where we’d like it
$upfile = ‘./upload/’.$_FILES['userfile']['name'];
if (is_uploaded_file($_FILES['userfile']['tmp_name']))
{
if(!move_uploaded_file($_FILES['userfile']['tmp_name'],$upfile))
{
echo ‘Problem: Could not move file to destination directory’;
exit;
}
}
else
{
echo ‘Problem: Possible file upload attack. Filename: ‘;
echo $_FILES['userfile']['name'];
exit;
}
echo ‘File upload successfully<br><br>’;
?>
</body>
</html>


发表于 2005-11-07 10:29
作者:cn-linux

  我经常听到这样一个问题:“我有一个从网站发来的合同。我如何给通过表单发送的电子邮件增加一个附件呢?”

  首先我要说的是要做到这个没有什么简单的办法。你要很好的理解PHP或其它的服务器端的脚本语言。当然你还要一个真正支持PHP的网站的账号。如果满足了这个前提,在你读完了本章后就可以用PHP发送带附件的电子邮件了。

1. 附件是如何工作的

  如果你曾经在PHP的手册中搜索过“附件”函数,那么结果可能是什么都没有(至少在我写本文的时间还没有)。后来你就要花很多时间来了解这方面的知识。

  你也许会想当你给某个人发送一封带附件的电子邮件时,附件是和邮件一起放到收件人的信箱里的(比如,如果你给他/她发了一个PNG的图片文件,他/她的信箱里会包含一个txt文件(电子邮件)和一个.png文件(附件)。但这不是它的工作原理。当你加入一个附件时,你的邮件程序把附件转换成纯文本文件,并在你写的内容(实际的电子邮件)后面插入这个文本块。这个,当你把所有的东西发出来后,收件人的信箱里只有一个纯文本文件——一个同时包含附件和实际电子邮件内容的文件。

  下面是一个带附件(一个HTML文件)电子邮件的例子。

Return-Path:
Date: Mon, 22 May 2000 19:17:29 +0000
From: Someone
To: Person
Message-id: <83729KI93LI9214@example.com>
Content-type: multipart/mixed; boundary="396d983d6b89a"
Subject: Here’s the subject
–396d983d6b89a
Content-type: text/plain; charset=iso-8859-1
Content-transfer-encoding: 8bit

This is the body of the email.

–396d983d6b89a
Content-type: text/html; name=attachment.html
Content-disposition: inline; filename=attachment.html
Content-transfer-encoding: 8bit




This is the attached HTML file



–396d983d6b89a–


  前面的7行是邮件的头,其中值得注意的是Content-type头部分。这个头告诉邮件程序电子邮件是由一个以上的部分组成的。不含附件的邮件只有一个部分:消息本身。带附件的电子通常至少由两部分组成:消息和附件。这样,带两个附件的邮件由三部分组成:消息,第一个附件和第二个附件。

  带附件的电子邮件的不同部分之间用分界线来分隔。分界线在Content–type头中定义。邮件的每个新部分以两个连字号(–)和分界线开始。
最后一个分界线后也有两个连字号,表示这个邮件中没有其它的部分了。

  在每个分界线后有一些行,用来告诉邮件程序这个部分的内容的类型。
比如,看看上面例子中第一个分界线后面的两行–以Content-type: text/plain开头的行。这些行说明后面的部分是ISO-8859-1字符集的纯文本。跟在第二个分界线后的行告诉邮件程序现在的部分是一个 HTML文件,它的名字是"attachment.html"。

  Content-disposition这持告诉邮件程序如果可能就以内嵌的方式显示附件。现在新的邮件程序会在消息后显示HTML的内容。如果Content- disposition被设为attachment,那么邮件程序就不会显示HTML文件的内容,而是显示一个连接到文件的图标(或其它的类似的东西)。收件人要看附件的内容,必须点击这个图标。一般情况下,如果附件是一些文本(包含HTML),Content-disposition会被设为 inline,这是因为现在大部分邮件程序能够不借助其它浏览器而直接显示附件(文本)的内容。如果附件不是文本(比如图片或其它类似的内容), Content-disposition 就设为attachment。

2. 用PHP生成带附件的电子邮件

  这里一个例子,告诉你如果把一个定义好的HTML文件加为邮件的附件:

# 我们首先写实际的消息内容
$emailBody = "This is text that goes into the body of the email.";

# 然后我们要作为附件的HTML文件
$attachment = "

This is the attached HTML file


";

# 建立在邮件中分隔不同部分的分界线。
# 基本上,分界线可以是任意的字符串。
# 但是重要的一点是确定一个写邮件的人
# 这会随意写出的字符串,所以我们用
# uniqid函数来产生一个随机的字符串。
$boundary = uniqid( "");

# 现在我们要建立邮件头。不要忘了插入
# Content-type头来说明这个邮件包含一个或更多的附件。
$headers = "From: someone@example.com
Content-type: multipart/mixed; boundary="$boundary"";

# 好,现在我们已经有了邮件的所有内容。
# 下一件事是修改邮件的主体。
$emailBody = "–$boundary
Content-type: text/plain; charset=iso-8859-1
Content-transfer-encoding: 8bit

$emailBody

–$boundary
Content-type: text/html; name=attachment.html
Content-disposition: inline; filename=attachment.html
Content-transfer-encoding: 8bit

$attachment

–$boundary–";

# 现在可以把邮件发出去了
mail( "person@eksempel.dk", "The subject", $emailBody, $headers);
?>


3. 把用户上传的文件作为附件

  你也许会觉得上面的例子难以理解,但下面…。在下面的例子中事情更难了,因为我们要用一个表单让用户上传他们的文件,并把这个文件作为我们要发的邮件的附件。麻烦的是我们不能预先知道文件的MIME类型。
在前面的例子中,我们已经知道该它是一个HTML文件,所以给这个附件设置Content-type头是很简单的。在下面的例子中,MIME类型可能是任意的,因为用户可能会上传一个HTML文件,一个PNG文件,一个vCard文件,或者其它的东西。让我们来看看例子:

# 现在我们来生成表单。在产生可以上传文件的表单时,
# 不要忘了把


# 如果用户已经按了"Send"按钮"
if ($send) {
# 定义分界线
$boundary = uniqid( "");

# 生成邮件头
$headers = "From: $from
Content-type: multipart/mixed; boundary="$boundary"";

# 确定上传文件的MIME类型
if ($attachment_type) $mimeType = $attachment_type;
# 如果浏览器没有指定文件的MIME类型,
# 我们可以把它设为"application/unknown".
else $mimeType = "application/unknown";

# 确定文件的名字
$fileName = $attachment_name;

# 打开文件
$fp = fopen($attachment, "r");
# 把整个文件读入一个变量
$read = fread($fp, filesize($attachment));

# 好,现在变量$read中保存的是包含整个文件内容的文本块。
# 现在我们要把这个文本块转换成邮件程序可以读懂的格式
# 我们用base64方法把它编码
$read = base64_encode($read);

# 现在我们有一个用base64方法编码的长字符串。
# 下一件事是要把这个长字符串切成由每行76个字符组成的小块
$read = chunk_split($read);

# 现在我们可以建立邮件的主体
$body = "–$boundary
Content-type: text/plain; charset=iso-8859-1
Content-transfer-encoding: 8bit

$body

–$boundary
Content-type: $mimeType; name=$fileName
Content-disposition: attachment; filename=$fileName
Content-transfer-encoding: base64

$read

–$boundary–";

# 发送邮件
mail($to, $subject, $body, $headers);
}
?>

  这就是全部内容。如果你不能很好地理解上面的例子,我的建议是给你自己发送几个带附件的邮件,然后仔细研究邮件的源代码。
发表于 2005-11-02 15:35

http://pear.php.net/package/Mail_IMAPv2
http://pear.php.net/package/Mail_IMAP
http://cn2.php.net/imap

发表于 2005-10-29 01:48

  本人对于新技术的接触总是慢半拍,从以前的电子邮件和QQ,别人都开始用的时候我还不怎么了解,而现在也听说RSS很火,可惜我也没用过。今天一个偶然的机会,我搜索了一下RSS并下载了新浪点点通阅读器,一下被RSS新颖、使用的功能给吸引了。

  因为我宿舍不能上网,只好单机玩。今晚我在玩我前几天下载的O-blog 2.5时,看到这个程序就有RSS功能嘛,于是我就装了新浪点点通阅读器,将O-blog假如频道,感觉不错!可是当我每次打开一篇文章时,都是打开的首页,原来是文章的链接错误,于是我看了一下xml代码(其实我也没学过xml),果然其中有个<link>http://localhost/……link> 这个地址是错误的,下面我就打开rss文件开始研究了,其实也不难嘛,我就下手改掉了错误。因为我很少写程序,所以代码写的很不规范,下面附上我的代码,请高手们指点、规范、完善以下。

1、首先在class\rss.php中加入GetExtra函数,获取静态文件扩展名,加在GetExtra()函数后即可。
//add some codes
function GetExtra()
{
 global $mysql_prefix;
 $sql = "SELECT `extraname` FROM `".$mysql_prefix."config`";
 $result = mysql_query($sql);
 $re = mysql_fetch_array($result);
 return $re[0];
}//
最后一行加入
//add some codes
$extraname  = GetExtra();

2、以程序目录下rss2.php为例修改,在$a[5] = $blog[$i]['content']一行后面加入部分代码。
//add some codes
if ($blog[$i]['filename'] == "")
    $filename = $a[1].".".$extraname;
else 
    $filename = $blog[$i]['filename'].".".$extraname;

$date_array = getdate ($blog[$i]['date']);
$filepath = "/archives/".$date_array['year']."/".$date_array['mon']."/".$date_array['mday']."/".$filename;

  现在保存文件,到新浪点点通验证,success!

发表于 2005-10-30

1、首先在class\rss.php中加入GetExtra函数,获取静态文件扩展名,加在GetExtra()函数后即可。
//add some codes
function GetExtra()
{
 global $mysql_prefix;
 $sql = "SELECT `extraname` FROM `".$mysql_prefix."config`";
 $result = mysql_query($sql);
 $re = mysql_fetch_array($result);
 return $re[0];
}//
最后一行加入
//add some codes
$extraname  = GetExtra();

2、以程序目录下rss2.php为例修改,在$a[5] = $blog[$i]['content']一行后面加入部分代码。
//add some codes
if ($blog[$i]['filename'] == "")
    $filename = $a[1].".".$extraname;
else 
    $filename = $blog[$i]['filename'].".".$extraname;

$date_array = getdate ($blog[$i]['date']);
$filepath = "/archives/".$date_array['year']."/".$date_array['mon']."/".$date_array['mday']."/".$filename;

  现在保存文件,到新浪点点通验证,success!

发表于 2005-10-30 link> 这个地址是错误的,下面我就打开rss文件开始研究了,其实也不难嘛,我就下手改掉了错误。因为我很少写程序,所以代码写的很不规范,下面附上我的代码,请高手们指点、规范、完善以下。

1、首先在class\rss.php中加入GetExtra函数,获取静态文件扩展名,加在GetExtra()函数后即可。
//add some codes
function GetExtra()
{
 global $mysql_prefix;
 $sql = "SELECT `extraname` FROM `".$mysql_prefix."config`";
 $result = mysql_query($sql);
 $re = mysql_fetch_array($result);
 return $re[0];
}//
最后一行加入
//add some codes
$extraname  = GetExtra();

2、以程序目录下rss2.php为例修改,在$a[5] = $blog[$i]['content']一行后面加入部分代码。
//add some codes
if ($blog[$i]['filename'] == "")
    $filename = $a[1].".".$extraname;
else 
    $filename = $blog[$i]['filename'].".".$extraname;

$date_array = getdate ($blog[$i]['date']);
$filepath = "/archives/".$date_array['year']."/".$date_array['mon']."/".$date_array['mday']."/".$filename;

  现在保存文件,到新浪点点通验证,success!

发表于 2005-10-30