分类: 网页设计

  • ASP中时间函数的使用(一)

    Date 函数
    描述:返回当前系统日期。
    语法:Date

    DateAdd 函数
    描述:返回已添加指定时间间隔的日期。
    语法:DateAdd(interval, number, date)
    interval: 必选。字符串表达式,表示要添加的时间间隔。有关数值,请参阅“设置”部分。
    number: 必选。数值表达式,表示要添加的时间间隔的个数。数值表达式可以是正数(得到未来的日期)或负数(得到过去的日期)。
    date: 必选。Variant 或要添加 interval 的表示日期的文字。 
    interval 参数可以有以下值:
    yyyy (年) 、q (季度) 、m (月) 、y (一年的日数) 、d (日) 、w (一周的日数) 、ww (周) 、h (小时) 、n (分钟) 、s (秒)
    说明:可用 DateAdd 函数从日期中添加或减去指定时间间隔。例如可以使用 DateAdd 从当天算起 30 天以后的日期或从现在算起 45 分钟以后的时间。要向 date 添加以“日”为单位的时间间隔,可以使用“一年的日数”(“y”)、“日”(“d”)或“一周的日数”(“w”)。
    DateAdd 函数不会返回无效日期。如下示例将 95 年 1 月 31 日加上一个月:
    NewDate = DateAdd(“m”, 1, “31-Jan-95″)
    在这个例子中,DateAdd 返回 95 年 2 月 28 日,而不是 95 年 2 月 31 日。如果 date 为 96 年 1 月 31 日,则返回 96 年 2 月 29 日,这是因为 1996 是闰年。
    如果计算的日期是在公元 100 年之前则会产生错误。
    如果 number 不是 Long 型值,则在计算前四舍五入为最接近的整数。

    DateDiff 函数
    描述:返回两个日期之间的时间间隔。
    语法:DateDiff(interval, date1, date2 [,firstdayofweek[, firstweekofyear>)
    interval: 必选。字符串表达式,表示用于计算 date1 和 date2 之间的时间间隔。有关数值,请参阅“设置”部分。
    date1, date2: 必选。日期表达式。用于计算的两个日期。
    firstdayofweek: 可选。指定星期中第一天的常数。如果没有指定,则默认为星期日。有关数值,请参阅“设置”部分。
    firstweekofyear: 可选。指定一年中第一周的常数。如果没有指定,则默认为 1 月 1 日所在的星期。有关数值,请参阅“设置”部分。
    interval 参数可以有以下值:
    yyyy (年) 、q (季度) 、m (月) 、y (一年的日数) 、d (日) 、w (一周的日数) 、ww (周) 、h (小时) 、n (分钟) 、s (秒)
    firstdayofweek 参数可以有以下值:
    (以下分别为:常数 值 描述)
    vbUseSystem 0 使用区域语言支持 (NLS) API 设置。
    vbSunday 1 星期日(默认)
    vbMonday 2 星期一
    vbTuesday 3 星期二
    vbWednesday 4 星期三
    vbThursday 5 星期四
    vbFriday 6 星期五
    vbSaturday 7 星期六
    firstweekofyear 参数可以有以下值:
    (以下分别为:常数 值 描述)
    vbUseSystem 0 使用区域语言支持 (NLS) API 设置。
    vbFirstJan1 1 由 1 月 1 日所在的星期开始(默认)。
    vbFirstFourDays 2 由在新年中至少有四天的第一周开始。
    vbFirstFullWeek 3 由在新的一年中第一个完整的周开始。
    说明:DateDiff 函数用于判断在两个日期之间存在的指定时间间隔的数目。例如可以使用 DateDiff 计算两个日期相差的天数,或者当天到当年最后一天之间的星期数。
    要计算 date1 和 date2 相差的天数,可以使用“一年的日数”(“y”)或“日”(“d”)。当 interval 为“一周的日数”(“w”)时,DateDiff 返回两个日期之间的星期数。如果 date1 是星期一,则 DateDiff 计算到 date2 之前星期一的数目。此结果包含 date2 而不包含 date1。如果 interval 是“周”(“ww”),则 DateDiff 函数返回日历表中两个日期之间的星期数。函数计算 date1 和 date2 之间星期日的数目。如果 date2 是星期日,DateDiff 将计算 date2,但即使 date1 是星期日,也不会计算 date1。
    如果 date1 晚于 date2,则 DateDiff 函数返回负数。
    firstdayofweek 参数会对使用“w”和“ww”间隔符号的计算产生影响。
    如果 date1 或 date2 是日期文字,则指定的年度会成为日期的固定部分。但是如果 date1 或 date2 被包括在引号 (” “) 中并且省略年份,则在代码中每次计算 date1 或 date2 表达式时,将插入当前年份。这样就可以编写适用于不同年份的程序代码。
    在 interval 为“年”(“yyyy”)时,比较 12 月 31 日和来年的 1 月 1 日,虽然实际上只相差一天,DateDiff 返回 1 表示相差一个年份。

    DatePart 函数
    描述:返回给定日期的指定部分。
    语法:DatePart(interval, date[, firstdayofweek[, firstweekofyear>)
    DatePart: 函数的语法有以下参数:
    interval: 必选。字符串表达式,表示要返回的时间间隔。有关数值,请参阅“设置”部分。
    date: 必选。要计算的日期表达式。
    firstdayof week: 可选。指定星期中的第一天的常数。如果没有指定,则默认为星期日。有关数值,请参阅“设置”部分。
    firstweekofyear: 可选。指定一年中第一周的常数。如果没有指定,则默认为 1 月 1 日所在的星期。有关数值,请参阅“设置”部分。
    interval 参数可以有以下值:
    yyyy (年) 、q (季度) 、m (月) 、y (一年的日数) 、d (日) 、w (一周的日数) 、ww (周) 、h (小时) 、n (分钟) 、s (秒)
    firstdayofweek 参数可以有以下值:
    (以下分别为:常数 值 描述)
    vbUseSystem 0 使用区域语言支持 (NLS) API 设置。
    vbSunday 1 星期日(默认)
    vbMonday 2 星期一
    vbTuesday 3 星期二
    vbWednesday 4 星期三
    vbThursday 5 星期四
    vbFriday 6 星期五
    vbSaturday 7 星期六
    firstweekofyear 参数可以有以下值:
    (以下分别为:常数 值 描述)
    vbUseSystem 0 使用区域语言支持 (NLS) API 设置。
    vbFirstJan1 1 由 1 月 1 日所在的星期开始(默认)。
    vbFirstFourDays 2 由在新年中至少有四天的第一周开始。
    vbFirstFullWeek 3 由在新的一年中第一个完整的周(不跨年度)开始。
    说明:DatePart 函数用于计算日期并返回指定的时间间隔。例如使用 DatePart 计算某一天是星期几或当前的时间。
    firstdayofweek 参数会影响使用“w”和“ww”间隔符号的计算。
    如果 date 是日期文字,则指定的年度会成为日期的固定部分。但是如果 date 被包含在引号 (” “) 中,并且省略年份,则在代码中每次计算 date 表达式时,将插入当前年份。这样就可以编写适用于不同年份的程序代码。

  • 网站优化基础工作

     多数站长在交换友情链接时把百度快照作为一个重要的参照数,这让它在不知不觉中成为了众多站长重视的原因之一。百度快照是百度搜索引擎蜘蛛在访问网站的时候形成的一个时间,也就是说百度更新你网站首页的时间。在某种程度上,快照更新时间的快慢决定着站点的质量和权重。一般来说,提高快照的更新速度的方法有很多,如何优化组合才能达到低投入高效益是我们该思考的方向。
      网站内容是王道,定期更新需坚持
      网站内容的更新频率高才会吸引蜘蛛主动上门收录,这使得内容成为了百度快照基础中的基础,做好内容是前提。如果网站内容常常不更新的话,百毒蜘蛛是不会眷顾你的。而添加原创内容是更新网站的标杆,把握更新时间规律、控制更新质量是百度快照更新快的站点必须具备的条件。就拿我站程序超市网来说,站里的网编们每天的基础任务就是网站推广,这其中进行的推广方式又恰好与网站内容更新同步。每天坚持在本社区发帖、每天定量的网摘推广、每周两篇高质量软文更新等等都是“内容为王”的实现途径。每天把这些基础工作做好,快照自然更新快。
      友情链接规矩多,规律添加需遵守
      友链是推进快照更新的重要条件之一,友情链接需有规律的添加,高质量的外链是前提,有步骤的添加是要求,一次性添加太多、添加的时间差非常不规律会被搜索引擎冠以作弊的嫌疑。而如果添加的友链都是隔天快照的话,对于本站来说也会得到相当大的优势。但是友链切不可以加后就置之不理,它需要你定时去“清理”。网站风云变幻,如果所添加的站点发生被K或者降权等意外时,就得果断的对这些链接进行处理。自己被罚还要拖累别人,这种冤大头的事万万不能让它发生。
      论坛博客推广高,细节方法需注意
      论坛博客推广也是网站推广里的一种,同样有利于百度快照的快速更新。在一些国内人气高名气大的论坛和博客里发帖回帖是个很好的方法,通过回帖签名带链接或者留言加链接的方式来增加被蜘蛛捕捉到的机会。多跟帖不仅容易成为反链,所带外链的回复还能为你的网站带来用户流量。另外,在大门户网站里发布围绕关键字相关内容的信息与你站链接也会让百毒蜘蛛搜索到你。
      百度快照更新并没有什么特别深奥的学问,打好基础工作,注意方法,持之以恒地坚持下去才能达到理想效果,有一天你会发现你的快照天天更新。

  • wordpress的auto-draft功能

    这个功能auto-draft似乎3.0就已经有了,之所以现在才发现是因为已经对之前的revision功能妥协了,使用ID作为url的同学应该知道,这个功能会让ID不连续,刚开始我还一直和这个功能较量,但是每次升级似乎都被和谐掉,然后在折腾,最后已经基本妥协了。

    revision这个是历史版本功能,意思就是每次修改会保存之前没有修改的版本,但是这个功能应该是很少人会使用的。写文章也不是什么要记录每次修改的地方,何必做的跟科学试验似的呢。

    auto-draft是3.0新出来的功能,按照网上的说法这个是在没有任何保存的情况下关闭浏览器存储的自动草稿,这个草稿会定期清除,但是这样会使ID一样不连续。所以现在网上已经开始有人研究干掉这个功能了,我看到的都是一些修改代码的方法,似乎官方并没有出语句可以直接屏蔽功能。

  • 主题增加原生嵌套评论及Ajax回复效果

     最终还是没坚持到一天,这两个功能是我非常喜欢的,本来在主题制作的时候就已经准备好这块了,但是为了追求没有JavaScript的境界被我给砍掉了,而后我认识到了避免使用JavaScript是一件很难受的事情,这个比避免使用图片更难受。

    本来我是很纠结的,因为Ajax要使用jquery,这个文件mini版也要50K以上,但是幸好google很仗义,在代码库有这个文件,直接调用即可使用,于是终于决定使用Ajax回复。

    这里要说的是必须要说zww,这个是我较早的博友了,很喜欢折腾的,一路下来似乎已经有“主题制造机”的称号了。即使我在百度搜索也能很容易找到他的文章,这对我的帮助很大,当然还有一个人是我之前都不曾知道的,我在找Ajax回复的时候几乎所有的文章都指向了他那里。

    willin,我下载了他的WordPress 內置嵌套評論專用 Ajax comments,非常好用,这让我很容的就写好了Ajax效果。

  • 博客启用新主题

    今天是7.28 唐山大地震,当然最近冯小刚的《唐山大地震》也在火热的上映,作为一个唐山人,选择这天换上新主题,是作为一个纪念吧。这些天我一直在找一些好的主题,但是都不是太满意,于是自己开始写主题,由于个人的网页设计很初级,主题还不如我找到的主题漂亮,但是毕竟是自己写的还是用吧,起码会有一点点自豪感,主题以后还会慢慢的完善的,目前就这样,能够通过HTML5和CSS3的效验,是一款没有图片,没有JavaScript,当然更没有使用Ajax,这是喜欢简洁风格的一种追求。当然这样缺少了一些效果,有些我还是很喜欢的,以后选择着添加吧。

  • wp模板comments.php范例

    comments的设计在中文教程里面介绍较少,我这里找到一个写好的comments代码,贴出来,需要的可以直接粘走使用。

    <?php if(!empty($_SERVER[‘SCRIPT_FILENAME’]) && ‘comments.php’ == basename($_SERVER[‘SCRIPT_FILENAME’])) : ?>   
     <?php die(‘You can not access this page directly!’); ?> 
    <?php endif; ?>

    <?php if(!empty($post->post_password)) : ?>
       <?php if($_COOKIE[‘wp-postpass_’ . COOKIEHASH] != $post->post_password) : ?>
      <p>This post is password protected. Enter the password to view comments.</p>
       <?php endif; ?>
    <?php endif; ?>

    <?php if($comments) : ?>
       <ol>
         <?php foreach($comments as $comment) : ?>
        <li id=”comment-<?php comment_ID(); ?>”>
         <?php if ($comment->comment_approved == ‘0’) : ?>
          <p>Your comment is awaiting approval</p>
         <?php endif; ?>
         <?php comment_text(); ?>
         <p><?php comment_type(); ?> by <?php comment_author_link(); ?> on <?php comment_date(); ?> at <?php comment_time(); ?></p>
        </li>
      <?php endforeach; ?>
     </ol>
    <?php else : ?>
     <p>No comments yet</p>
    <?php endif; ?>

    <?php if(comments_open()) : ?>
     <?php if(get_option(‘comment_registration’) && !$user_ID) : ?>
      <p>You must be <a href=”<?php echo get_option(‘siteurl’); ?>/wp-login.php?redirect_to=<?php echo urlencode(get_permalink()); ?>”>logged in</a> to post a comment.</p><?php else : ?>
      <form action=”<?php echo get_option(‘siteurl’); ?>/wp-comments-post.php” method=”post” id=”commentform”>
       <?php if($user_ID) : ?>
        <p>Logged in as <a href=”<?php echo get_option(‘siteurl’); ?>/wp-admin/profile.php”><?php echo $user_identity; ?></a>. <a href=”<?php echo get_option(‘siteurl’); ?>/wp-login.php?action=logout” title=”Log out of this account”>Log out &raquo;</a></p>
       <?php else : ?>
        <p><input type=”text” name=”author” id=”author” value=”<?php echo $comment_author; ?>” size=”22″ tabindex=”1″ />
        <label for=”author”><small>Name <?php if($req) echo “(required)”; ?></small></label></p>
        <p><input type=”text” name=”email” id=”email” value=”<?php echo $comment_author_email; ?>” size=”22″ tabindex=”2″ />
        <label for=”email”><small>Mail (will not be published) <?php if($req) echo “(required)”; ?></small></label></p>
        <p><input type=”text” name=”url” id=”url” value=”<?php echo $comment_author_url; ?>” size=”22″ tabindex=”3″ />
        <label for=”url”><small>Website</small></label></p>
       <?php endif; ?>
       <p><textarea name=”comment” id=”comment” cols=”100%” rows=”10″ tabindex=”4″></textarea></p>
       <p><input name=”submit” type=”submit” id=”submit” tabindex=”5″ value=”Submit Comment” />
       <input type=”hidden” name=”comment_post_ID” value=”<?php echo $id; ?>” /></p>
       <?php do_action(‘comment_form’, $post->ID); ?>
      </form>
     <?php endif; ?>
    <?php else : ?>
     <p>The comments are closed.</p>
    <?php endif; ?>

  • CSS中控制换行的四种属性

      一、white-space

      可以实现HTML中PRE标签的效果,以及单元格的noWrap效果,点此查看示例。

      语法:

      white-space : normal   pre   nowrap

      取值:

      normal: 默认值。默认处理方式。文本自动处理换行。假如抵达容器边界内容会转到下一行

      pre: 换行和其他空白字符都将受到保护。这个值需要IE6+或者 !DOCTYPE 声明为 standards-compliant mode 支持。如果 !DOCTYPE 声明没有指定为 standards-compliant mode ,此属性可以使用,但是不会发生作用。结果等同于 normal 。参阅 pre 对象

      nowrap: 强制在同一行内显示所有文本,直到文本结束或者遭遇 br 对象。参阅 noWrap 属性

      说明:

      设置或检索对象内空格字符的处理方式。

      空 格字符,像换行,空格,TAB,在HTML文档中默认的是被忽略的。当此属性设置为 normal 或者 nowrap 时,你可以使用不换行空格的命名实体 来添加空格,用 br 元素来添加换行。此属性对你使用文档对象模型(DOM)操作的内容的影响与其对IE显示内容的影响一样。

      此属性作用于块对象。

      相关样式:

      text-overflow

      将它与white-space结合使用就不用再写程序来判断字符串长度了,点此查看示例。

      语法:

      text-overflow : clip   ellipsis

      取值:

      clip:默认值。不显示省略标记(…),而是简单的裁切

      ellipsis:当对象内文本溢出时显示省略标记(…)

      说明:

      设置或检索是否使用一个省略标记(…)标示对象内文本的溢出。

      这个属性仅仅作用于水平内联方向的,普通的西方文本的溢出。内联溢出发生在行内的文本超出可用宽度却没有换行机会的时候。

      要强制溢出发生并且应用 ellipsis 值,作者必须设置对象的 white-space 属性值为 nowrap 。

      假如没有换行机会(例如,对象容器的宽度是狭窄的,而内有很长的没有合理断行的文本),没有应用 nowrap 也有可能溢出。

      为了使 ellipsis 值被应用,此属性必须被设置到具有不可视区域的对象。最好的选择是设置 overflow 属性为 hidden 。设置 overflow 属性为 scroll 或者 auto 时,此属性也会应用。但是会有滚动条出现。

      通过选择省略标记,隐藏的文本可以被选择。当选择发生时,省略标记会隐藏而被文本替换。

      此属性为在DHTML中制作省略标记提供了高效的方法。

      二、word-break

      最常用的控制换行属性,常与下面的word-wrap结合使用,点此查看示例。

      语法:

      word-break : normal   break-all   keep-all

      取值:

      normal: 默认值。允许在词间换行

      break-all:该行为与亚洲语言的 normal 相同。也允许非亚洲语言文本行的任意字内断开。该值适合包含一些非亚洲文本的亚洲文本

      keep-all:与所有非亚洲语言的 normal 相同。对于中文,韩文,日文,不允许字断开。适合包含少量亚洲文本的非亚洲文本

      说明:

      设置或检索对象内文本的字内换行行为。尤其在出现多种语言时。

      对于中文,应该使用 break-all 。

      三、word-wrap

      如果你设计的网页不是自适应宽度的话,需要将它设置为break-word,否则可能出现版快错开的情况,点此查看示例。

      语法:

      word-wrap : normal   break-word

      取值:

      normal:默认值。允许内容顶开指定的容器边界

      break-word:内容将在边界内换行。如果需要,词内换行( word-break )也将发生

      说明:

      设置或检索当当前行超过指定容器的边界时是否断开转行。

      此属性仅作用于有布局的对象,如块对象。内联要素要使用该属性,必须先设定对象的 height 或 width 属性,或者设定 position 属性为 absolute ,或者设定 display 属性为 block 。

      四、overflow,overflow-x,overflow-y

      这个不是严格意思上的控制换行样式,但在某些时候将它设置为hidden可以补充word-wrap的不足,比方你想在限制宽度里仅显示一行文字,而这行文 字的长度却超过这个宽度,结合white-space+text-overflow可以达到更好的效果,点此查看示例。

      语法:

      overflow : visible   auto   hidden   scroll

      取值:

      visible: 默认值。不剪切内容也不添加滚动条。假如显式声明此默认值,对象将以包含对象的 window 或 frame 的尺寸裁切。并且 clip 属性设置将失效

      auto:在必需时对象内容才会被裁切或显示滚动条

      hidden:不显示超过对象尺寸的内容

      scroll:总是显示滚动条

      说明:

      检索或设置当对象的内容超过其指定高度及宽度时如何管理内容。

      所有对象的默认值是 visible ,除了 textarea 对象和 body 对象的默认值是 auto 。设置 textarea 对象此属性值为 hidden 将隐藏其滚动条。

      对于 table 来说,假如 table-layout 属性设置为 fixed ,则 td 对象支持带有默认值为 hidden 的 overflow 属性。如果设为 scroll 或者 auto ,那么超出 td 尺寸的内容将被剪切。如果设为 visible ,将导致额外的文本溢出到右边或左边(视 direction 属性设置而定)的单元格。

      自IE5开始,此属性在MAC平台上可用。

      自IE6开始,当你使用 !DOCTYPE 声明指定了 standards-compliant 模式,此属性可以应用于 html 对象。

  • WordPress根据不同分类调用不同模板

    wordpress 2.9以前版本:首先查看下你的分类ID,例如是:12.然后复制一个category.php(也就是一个通用的分类模板,不想的话 可以自己新写一个)到主题根目录,改名为category-12.php.

    现在wp2.9都出来了,看一下对这里的新改进吧:
    查看要使用特殊模板样式的分类的别名,例如是CSS.然后复制一个category.php到主题根目录,改名为category-css.php.

  • XFN1.1

    在博客的代码里面经常可以看到
    http://gmpg.org/xfn/11
    那么这链接是做什么用的呢?

    XFN 1.1 relationships meta data profile

    XFN XML Friends Network 

    微格式数据对于平常通过浏览器来阅读HTML文档的用户来说,没有什么实际性的意义,可是对于某些用户代理器来说,通过读取这份XFN微格式数据再加上其它的诸如hCard等微格式数据,那么即可在互联网上呈现出人与人之间的关系网络。

    那么如何使用这个呢?

    1、 <head profile=”http://gmpg.org/xfn/11″>

    2、 <link rel=”profile” href=”http://gmpg.org/xfn/11″ />

  • 网页布局方案

    固定布局(fiexd),流动布局(fluid/liquid)还是弹性布局(elastic)

    固定宽度布局(Fixed Layout)

    这种布局有一个设置了固定宽度的外包裹,里面的各个模块也是固定宽度而非百分比。重要的是容器(外包裹)元素是设置为不能移动的。无论访问者屏幕的分辨率是多少,网页都显示为和其它访问者相同的宽度。

    流动/流体布局(Fluid/Liquid Layout)

    流体布局,也被成为流体布局,主体部分都是用了百分比宽度,因此可以自适应用户的分辨率。

  • .htaccess 设置301

    <IfModule mod_rewrite.c>
    Options +FollowSymLinks
    RewriteEngine on
    rewritecond %{http_host} ^www.old.com [nc]
    rewriterule ^(.*)$ http://www.new.com/$1 [L,R=301]
    </IfModule>

  • MySQL 5.0.91

    此次更新将是MySQL5.0.91的最后一次更新,建议大家立即更新MySQL 5.0.91。这也意味着MySQL 5.0系列不再开发。
      详细更新如下:

      安全更新:解决了服务器验证COM_FIELD_LIST失败的问题。这问题有可能被利用来绕过所有表的特权检查。

      在MySQL 5.0及以上的版本上,这样的BUG将使所有用户能通过SELECT权限验证来获得所有其他数据库中任何表中的字段定义。以及潜在的其他MySQL服务器文件系统的访问权限。

  • 利用QQWry.Dat实现IP地址高效检索

    1、原文的类中构造函数已转成PHP5的__construct,析构函数也换掉了。

    2、调用:

    $ip=’65.55.109.119′;
    $idADDR=new IpLocation();
    print_r($idADDR->getlocation($ip));

    返回结果:

    /* getlocation($ip)返回ARRAY,如下:
    Array
    (
    [ip] => 65.55.109.119 //输入的IP
    [beginip] => 65.52.0.0
    [endip] => 65.55.255.255
    [country] => 美国
    [area] => Microsoft公司
    )
    */

    根据 LumaQQ 开发者文档中的纯真IP数据库格式详解,我编写了一个 PHP 的查询 IP 所在地区信息的类。在编写过程中发现纯真IP数据库格式详解中关于记录区的描述不是很全面,不过出入也不是很大,所以我没必要再写一份纯真 IP 数据库的格式说明了,大家感兴趣的话,读一读下面的代码应该就能看出来了。代码中加了很详细的注释,应该很容易读懂的。

    在创建这个类的一个实例后,实例中就保存了打开的文件指针和一些查询需要的信息,每次查询时不需要重新打开文件,直到页面执行结束后,打开的文件才会自动关闭。这样。在一个页面内进行多次查询时,效率是很高的。并且此类不仅可以直接查询 IP,还可以自动将域名解析为 IP 进行查询。

    下面是程序代码:

    <?php

    /**
    * IP 地理位置查询类
    *
    * @author 马秉尧
    * @version 1.5
    * @copyright 2005 CoolCode.CN
    */
    class IpLocation {
    /**
    * QQWry.Dat文件指针
    * @var resource
    */
    var $fp;

    /**
    * 第一条IP记录的偏移地址
    * @var int
    */
    var $firstip;

    /**
    * 最后一条IP记录的偏移地址
    * @var int
    */
    var $lastip;

    /**
    * IP记录的总条数(不包含版本信息记录)
    * @var int
    */
    var $totalip;

    /**
    * 构造函数,打开 QQWry.Dat 文件并初始化类中的信息
    * @param string $filename
    * @return IpLocation
    */
    function __construct($filename = “QQWry.Dat”) {
    $this->fp = 0;
    if (($this->fp = @fopen($filename, ‘rb’)) !== false) {
    $this->firstip = $this->getlong();
    $this->lastip = $this->getlong();
    $this->totalip = ($this->lastip – $this->firstip) / 7;
    //注册析构函数,使其在程序执行结束时执行
    register_shutdown_function(array(&$this, ‘__construct’));
    }
    }

    /**
    * 返回读取的长整型数
    * @access private
    * @return int
    */
    function getlong() {
    //将读取的little-endian编码的4个字节转化为长整型数
    $result = unpack(‘Vlong’, fread($this->fp, 4));
    return $result[‘long’];
    }

    /**
    * 返回读取的3个字节的长整型数
    *
    * @access private
    * @return int
    */
    function getlong3() {
    //将读取的little-endian编码的3个字节转化为长整型数
    $result = unpack(‘Vlong’, fread($this->fp, 3).chr(0));
    return $result[‘long’];
    }

    /**
    * 返回压缩后可进行比较的IP地址
    *
    * @access private
    * @param string $ip
    * @return string
    */
    function packip($ip) {
    // 将IP地址转化为长整型数,如果在PHP5中,IP地址错误,则返回False,
    // 这时intval将Flase转化为整数-1,之后压缩成big-endian编码的字符串
    return pack(‘N’, intval(ip2long($ip)));
    }

    /**
    * 返回读取的字符串
    *
    * @access private
    * @param string $data
    * @return string
    */
    function getstring($data = “”) {
    $char = fread($this->fp, 1);
    while (ord($char) > 0) { // 字符串按照C格式保存,以\0结束
    $data .= $char; // 将读取的字符连接到给定字符串之后
    $char = fread($this->fp, 1);
    }
    return $data;
    }

    /**
    * 返回地区信息
    *
    * @access private
    * @return string
    */
    function getarea() {
    $byte = fread($this->fp, 1); // 标志字节
    switch (ord($byte)) {
    case 0: // 没有区域信息
    $area = “”;
    break;
    case 1:
    case 2: // 标志字节为1或2,表示区域信息被重定向
    fseek($this->fp, $this->getlong3());
    $area = $this->getstring();
    break;
    default: // 否则,表示区域信息没有被重定向
    $area = $this->getstring($byte);
    break;
    }
    return $area;
    }

    /**
    * 根据所给 IP 地址或域名返回所在地区信息
    * @access public
    * @param string $ip
    * @return array
    */
    function getlocation($ip) {
    if (!$this->fp) return null; // 如果数据文件没有被正确打开,则直接返回空
    $location[‘ip’] = gethostbyname($ip); // 将输入的域名转化为IP地址
    $ip = $this->packip($location[‘ip’]); // 将输入的IP地址转化为可比较的IP地址
    // 不合法的IP地址会被转化为255.255.255.255
    // 对分搜索
    $l = 0; // 搜索的下边界
    $u = $this->totalip; // 搜索的上边界
    $findip = $this->lastip; // 如果没有找到就返回最后一条IP记录(QQWry.Dat的版本信息)
    while ($l <= $u) { // 当上边界小于下边界时,查找失败
    $i = floor(($l + $u) / 2); // 计算近似中间记录
    fseek($this->fp, $this->firstip + $i * 7);
    $beginip = strrev(fread($this->fp, 4)); // 获取中间记录的开始IP地址
    // strrev函数在这里的作用是将little-endian的压缩IP地址转化为big-endian的格式
    // 以便用于比较,后面相同。
    if ($ip < $beginip) { // 用户的IP小于中间记录的开始IP地址时
    $u = $i – 1; // 将搜索的上边界修改为中间记录减一
    }
    else {
    fseek($this->fp, $this->getlong3());
    $endip = strrev(fread($this->fp, 4)); // 获取中间记录的结束IP地址
    if ($ip > $endip) { // 用户的IP大于中间记录的结束IP地址时
    $l = $i + 1; // 将搜索的下边界修改为中间记录加一
    }
    else { // 用户的IP在中间记录的IP范围内时
    $findip = $this->firstip + $i * 7;
    break; // 则表示找到结果,退出循环
    }
    }
    }

    //获取查找到的IP地理位置信息
    fseek($this->fp, $findip);
    $location[‘beginip’] = long2ip($this->getlong()); // 用户IP所在范围的开始地址
    $offset = $this->getlong3();
    fseek($this->fp, $offset);
    $location[‘endip’] = long2ip($this->getlong()); // 用户IP所在范围的结束地址
    $byte = fread($this->fp, 1); // 标志字节
    switch (ord($byte)) {
    case 1: // 标志字节为1,表示国家和区域信息都被同时重定向
    $countryOffset = $this->getlong3(); // 重定向地址
    fseek($this->fp, $countryOffset);
    $byte = fread($this->fp, 1); // 标志字节
    switch (ord($byte)) {
    case 2: // 标志字节为2,表示国家信息又被重定向
    fseek($this->fp, $this->getlong3());
    $location[‘country’] = $this->getstring();
    fseek($this->fp, $countryOffset + 4);
    $location[‘area’] = $this->getarea();
    break;
    default: // 否则,表示国家信息没有被重定向
    $location[‘country’] = $this->getstring($byte);
    $location[‘area’] = $this->getarea();
    break;
    }
    break;
    case 2: // 标志字节为2,表示国家信息被重定向
    fseek($this->fp, $this->getlong3());
    $location[‘country’] = $this->getstring();
    fseek($this->fp, $offset + 8);
    $location[‘area’] = $this->getarea();
    break;
    default: // 否则,表示国家信息没有被重定向
    $location[‘country’] = $this->getstring($byte);
    $location[‘area’] = $this->getarea();
    break;
    }
    if ($location[‘country’] == ” CZ88.NET”) { // CZ88.NET表示没有有效信息
    $location[‘country’] = “未知”;
    }
    if ($location[‘area’] == ” CZ88.NET”) {
    $location[‘area’] = “”;
    }
    return $location;
    }

    /**
    * 析构函数,用于在页面执行结束后自动关闭打开的文件。
    *
    */
    function __desctruct() {
    if ($this->fp) {
    fclose($this->fp);
    }
    $this->fp = 0;
    }
    }
    ?>

  • dz文件说明

    admincp.php——后台系统设置程序文件,一般只处理菜单的显示的访问权限,不处理管理控制。
    attachment——附件文件,仅仅处理附件下载的功能。
    announcement.php——论坛公告的显示,一般很少改
    blog.php——浏览BLOG文章时候会用的,非常容易理解
    config.inc.php——配置论坛数据库、密码等信息,这个大家最熟悉了
    digest.php——论坛精华区的信息显示,不用多说了吧?
    discuz_version.php——论坛版本信息,用来更新用的,没有官方说明绝对不要修改
    faq.php——论坛帮助系统,不过我看绝对没人用
    forumdisplay.php——很简单,论坛主题列表的显示
    index.php——控制首页元素显示
    logging.php——登陆系统,判断用户名、密码。
    mail_config.inc.php——配置论坛EMAIL功能
    member.php——控制会员列表显示,积分策略等等信息显示
    memcp.php——会员控制面板
    misc.php——控制评分功能、BLOG、论坛界面显示功能等等
    plugin.php——论坛插件,这个主要控制论坛插件的菜单的显示,一般极少修改
    pm.php——论坛短信息程序,控制短信息发表与浏览
    post.php——与viewthread.php相似,但是更多是管理帖子发表、编辑等等信息,也会有权限的控制提示
    redirect.php——控制显示论坛的最后发表的主题访问
    register.php——注册文件,同时也会控制注册的信息的合法性
    rss.php——RSS快速订阅,不用多说了吧?
    search.php——处理论坛搜索功能中的信息筛选
    seccode.php——论坛注册,生成验证码的程序
    stats.php——处理统计中的统计信息
    topic.php——一般无法直接访问,控制页面显示,显示主题条数
    topicadmin.php——控制的是管理人员的前台管理操作,如精华、置顶、高亮等等
    viewpro.php——处理浏览会员信息的内容显示
    viewthread.php——处理浏览帖子时候的帖子信息显示,例如信息、标题等等,同时也处理访问帖子的权限,如阅读权限是否足够等等。
    (更多…)
  • IE9为什么不会支持HTML5呢?

    其实很早就想说这个问题了,一个是IE9不支持XP 另外就是IE9并不打算去支持html5,当然不是这么说的,是说他们在考察主流网站用的东西,去支持主流网站的代码,这样让大多数网站用着好。其实我不觉得这个有很大的冲突啊,这样就不能去更多的支持html5吗?而且作为大多数浏览器都在做的事你不去做,是为什么呢?不管是用户还是网站,都是去用你们浏览器的,只有你们浏览器做好了一个模式固定了,那么开发者们就会省很多精力,而且也不会有不同浏览器之间的很多麻烦,然后你们总是标新立异。要知道网站的开发是会看用户用什么浏览器的,你们这么做不是支持网站,只不过是变相的与其他浏览器制造不同。

  • 让网页变成黑白的

    直接上代码了

    <style type=”text/css”>
    body{
    filter:Gray;
    }
    </style>

    在来一个方法

    <style type=”text/css”>

    html { filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale=1); }

    </style>

    对于flash的处理方法

    <param value=”false” name=”menu”/>
    <param value=”opaque” name=”wmode”/>

  • 网页标准代码注释方法

    网页制作中,为了方便日后修改或协作开发,常常要对页面进行相应的注释,你网页结构清晰,可读性增强。以下介绍几种常用的注释方法:

    一、HTML的注释方法
    <!– html注释:START –>
    内容
    <!– html注释:END –>

    二、CSS的注释方法
    <style type=”text/css”>
    /* css注释*/
    </style>

    在单独的css样式表文件中也采用此方法注释

    三、JS的注释方法
    <script type=”text/javascript”>
    //js注释
    </script>

    四、ASP的注释方法

    <%
    Set xml=Server.CreateObject(“Microsoft.XMLDOM”)
    Set Fs=xml.documentElement.childNodes 
    ‘ASP注释
    %>

    其他注释方法:

    比如vbs用   ‘注释 或 REM   注释内容

    PHP支持C,C++和Unix风格的注释方式:

      /* C,C++风格多行注释 */

      // C++风格单行注释

      # Unix风格单行注释

  • DIV+CSS导航

    <html>
    <head>
    <meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″ />
    <title>css菜单</title>
    <style>
    body{
    background-color:#B8B8A0;
    }
    #fbtn{
    display:none;
    overflow:hidden;
    border-style:solid;
    border-width:1px;
    border-color:#e1e1c9 #e1e1c9 #6e6e56 #6e6e56;
    padding:1 1 1 1;
    width:115px;
    height:30px;
    }
    #fbtn_txt{
    position:relative;
    }
    #fbtn_txt div{
    height:30px;
    padding-top:11px;
    font-size:12px;
    color:#800080;
    text-align:center;
    cursor:hand;
    }
    #fbtn_mask{
    background-color:#ffffff;
    position:relative;
    width:100%;
    height:100%;
    }
    </style>
    </head>
    <body>
    <div id=fbtn>
    <div id=fbtn_mask></div>
    <div id=fbtn_txt>
    <div>G1</div>
    <div>good morning</div>
    </div>
    </div>
    <div id=fbtn>
    <div id=fbtn_mask></div>
    <div id=fbtn_txt>
    <div>G2</div>
    <div>good evening</div>
    </div>
    </div>
    <div id=fbtn>
    <div id=fbtn_mask></div>
    <div id=fbtn_txt>
    <div>M1</div>
    <div>my name is fireyy</div>
    </div>
    </div>
    <div id=fbtn>
    <div id=fbtn_mask></div>
    <div id=fbtn_txt>
    <div>M2</div>
    <div>mm mm i love u</div>
    </div>
    </div>
    <div id=fbtn>
    <div id=fbtn_mask></div>
    <div id=fbtn_txt>
    <div>G1</div>
    <div>good morning</div>
    </div>
    </div>
    <div id=fbtn>
    <div id=fbtn_mask></div>
    <div id=fbtn_txt>
    <div>G2</div>
    <div>good evening</div>
    </div>
    </div>
    <div id=fbtn>
    <div id=fbtn_mask></div>
    <div id=fbtn_txt>
    <div>M1</div>
    <div>my name is fireyy</div>
    </div>
    </div>
    <div id=fbtn>
    <div id=fbtn_mask></div>
    <div id=fbtn_txt>
    <div>M2</div>
    <div>mm mm i love u</div>
    </div>
    </div>
    <script>
    var current=null;
    var t=null;
    for(var i=0;i<fbtn.length;i++){
    fbtn_txt[i].style.posTop=-30;
    fbtn_mask[i].style.posTop=-30;
    fbtn[i].index=i;
    fbtn[i].style.display=”block”;
    fbtn[i].onmouseover=function(){
    if(!current){
    current=this;
    domove(this.index);
    }
    else
    if(current!=this){
    domove(current.index);
    domove(this.index);
    current=this;
    }
    }
    fbtn[i].onmouseout=function(){
    if(event.toElement==this.parentElement&t==this){
    domove(this.index);
    current=null;
    }
    }
    }
    function domove(num){
    var o=fbtn_txt[num];
    var m=fbtn_mask[num];
    if(o.style.posTop<-60){
    o.style.display=”none”;
    var t=o.children[1].innerHTML;
    o.children[1].innerHTML=o.children[0].innerHTML;
    o.children[0].innerHTML=t;
    o.style.posTop=-30;
    o.style.display=”block”;
    if(m.style.posTop>30)
    m.style.posTop=-30;
    else
    m.style.posTop=0;
    }
    else{
    m.style.posTop+=3;
    o.style.posTop-=3;
    setTimeout(‘domove(‘+num+’)’,15);
    }
    }
    </script>
    </body>
    </html>

  • Web 开发中遇到的UTF-8的问题总结

    一个网站如果需要国际化,就需要将编码从GB2312转成UTF-8,其中有很多的问题需要注意,如果没有转换彻底,将会有很多的编码问题出现!

    主要有五个方面:

    一.HTML页面转UTF-8编码问题

    二.PHP页面转UTF-8编码问题

    三.MYSQL数据库使用UTF-8编码的问题

    四.JS相关的UTF-8编码问题

    五.FLASH相关的UTF-8编码问题 (更多…)

  • ISO Latin-1字符集

    有些字符在HTML里有特别的含义,比如小于号<就表示HTML Tag的开始,这个小于号是不显示在我们最终看到的网页里的。那如果我们希望在网页中显示一个小于号,该怎么办呢?

    这就要说到HTML字符实体(HTML Character Entities)了。

    一个字符实体(Character Entity)分成三部分:第一部分是一个&符号,英文叫ampersand;第二部分是实体(Entity)名字或者是#加上实体(Entity)编号;第三部分是一个分号。

    比如,要显示小于号,就可以写&lt;或者&#60;。

    用实体(Entity)名字的好处是比较好理解,一看lt,大概就猜出是less than的意思,但是其劣势在于并不是所有的浏览器都支持最新的Entity名字。而实体(Entity)编号,各种浏览器都能处理。

    注意:Entity是区分大小写的。 (更多…)