发布新日志

  • 伪造referer

    2008-08-29 19:54:33

    拿sina相册的pv统计接口作例子吧.

    <?php
    $host = 'hitsw.sinajs.cn';
    $target = 'http://hitsw.sinajs.cn/hits?act=5&uid=509239de&sid=117092&var=_HitsW';
    $referer = 'http://photo.sina.com.cn/list/photo_b.php?uid=1351760350&ctg_id=117092&page=1'; //伪造HTTP_REFERER地址
    $fp = fsockopen($host, 80, $errno, $errstr, 30);
    if (!$fp){
    echo "$errstr($errno)<br />\n";
    }
    else{
    $out = "
    GET $target HTTP/1.1
    Host: $host
    Referer: $referer
    Connection: Close\r\n\r\n";
    fwrite($fp, $out);
    while (!feof($fp)){
    echo fgets($fp,10240)."<br>";
    }
    fclose($fp);
    }
    ?>

  • 在windows下安装phpunit

    2008-08-19 10:14:59

    废话就不多说了。也许你知道了单元测试,但又不知道怎么开始,这是个常见的问题,因为我也碰到过,希望下面这个说明会对有帮助,以windows平台为例。

    运行PHPUnit需要PHP5的命令行,所以这里需要php的解释器。安装php就不提了.安好之后再接下去做.

    常见的安装方法是通过PEAR Install来安装。一般安装php后可能还没有安装pear,但有一个脚本会自行安装pear。在php5的安装目录下,运行go-pear。这样会有一个向导安装pear,一直回车吧。如果安装成功在php5的安装目录下面会有一个pear.bat文件,这样就可以继续安装PHPUnit了。

    pear channel-discover pear.phpunit.de

    pear install phpunit/PHPUnit

    运行上面命令后,会自动安装PHPUnit,安装完毕后在PHP5的安装目录下会有phpunit.bat这个文件,这样你就有了phpunit的命令行工具,在默认情况下PHP5的安装目录会自动加入到PATH环境变量中。

    安装完闭之后你的php.ini里面应该有include_path=".;D:\php\pear"这一行(注意重起apache让配置生效).

    否则以后你require_once 'PHPUnit/Framework.php'的时候会引用不到. 

  • php翻页函数

    2008-07-24 19:53:53

    先看函数被定义了没,没有才定以函数.(这里似乎没有必要,引用文件的时候直接require_once不就行了?)

    函数里面声名了几个全局变量.当前页(外面从$_GET参数里取的),每页起始的贴子号(这是第一次定义,外面显示的时候用到),构成翻页表的html字符串,$_SERVER(这个定义全局变量是多余的,$SERVER本来就是全局的)

    然后把每页显示的页数也注册成全局变量(我不觉得这个有什么用,函数要用这个值有参数传递,外面直接有定义啊)

    从get里面取出当前页参数,如果没有,就指定为1

    然后获取页面URI,解析URI,取得参数部分的定义

    (先判断URI带不带参数)然后用正则把参数中关于当前页的部分去掉,用剩余的部分重新组成URI

    在URL后面加一个没有值的页码参数,这里考虑到了有其他参数和没其他参数的情况

    算出总页数,当前页(当前页如果大于总页则指定为最后页),上一页(当前页-1,等于0则代表不存在),下一页(要考虑有没有下一页),算出每页起始页帖子号(这个号不是帖子的id,是降续排列后有上往下数的数字)

    这里做了个判断 如果总页数小于等于1,则返回false,这代表只有1页时,不会显示翻页列表

    开是生成分页导航条的代码:

    对当前页,前一页,后一页,是否是最后页都做了判断,来决定首页,前一页,后一页,末页是显示链接还是文字

    编写跳转页面代码,使用onchange=window.location的方式.(还记得之前没有值的page吗?在这里=this.value)

    列表项用循环打印出来,这里做了个判断,如果是个当前页,则选中该项

    用到的函数:

    function_exists()   //判断函数是否存在

    isset()          //判断变量是否存在

    intval()          //把字符串转换为值

    parse_url()        //解析URI到数组里

    ereg_replace()      //正则匹配替换

    str_replace()     //字符串替换

    ceil()          //进位取整小数

    min()           //取最小的数

     

  • PHP验证码生成类

    2008-07-23 16:32:47

    创建一个叫code的类

    随机字串、图片长宽是类全局变量

    构造函数赋值了随机字串、图片长宽的值。还把随机字串的值注册一个sission变量,以供效验的时候用。

    随机字串的产生是有一个自建函数random实现,它从一个字符串数组内随机去值,取的个数可以由参数控制。

    由一个genimg函数生成图片

       genimg函数

       先发送一个http头过去,通知以下内容为image/png(似乎不这样做也没事)

       根据长宽创建图片

       设置背景色、字体色、模糊点色

       在图上画模糊点,用个循环,在图上随机画1000个点

       然后在图片上把随机字符串写上去,再画个边框

       保存图片

       销毁图片

    用到的函数:

    mt_srand()     //生成随机数种子

    mt_rand()      //生成随机数

    head()          //发送一行http头

    imagecreate()     //创建一张空白图片,返回图片资源变量

    imagecolorallocate()    //设置颜色

    imagesetpixel()          //以像素为单位在图片某坐标画点

    imagestring()            //在图片上写字

    imagerectangle()         //在图片上画矩形

    imagepng()             //保存图片

    imagedestroy()         //销毁图片资源变量

     

  • 一段安装程序php代码

    2008-07-22 14:56:40

    首先echo了一个页面头和尾(这里作成head.html和footer.html include进来更好.)

    然后判断一个常量是否存在来判断是否已安装.(常量存在另一个配置文件config.php里,配置文件是安装成功时创建的.)

    接下了判断config.php是否存在,存在就继续,不存在就打印错误页面,结束代码(为什么不自动创建一个?)

    如果config.php不可写,尝试一次修改权限,不成功继续报错,成功继续.

    尝试以写方式打开一次文件,不成功则报错,成功则继续.(我不知道这步有什么意思,据说windows下可能is_writeable返回true却打不开?)

    读区$_post[]值,如果没有就设置默认值

    判断是否点了install按钮

    判断是否有错误输入信息,错误信息存在数组中.

    判断是否支持mysql扩展,支持则继续,不支持结束.

    尝试链接数据库,成功则设定数据库字符集和模式,选中数据库,选中不成功就创建数据库,创建的时候有个是否成功的判断,创建完了选择中数据库,再设定字符集和模式.(这样可以不需要事先建好数据库,但怎么知道选择失败就是没有库呢?创建之前要不要加个drop更好?)

    判断有没有错误信息产生,没有则创建库,创建配置文件.

    有错误就打印错误信息和提交表单.(第一次访问时没有错误信息,直接打印提交表单)

    用到的函数:

    error_reporting(E_ALL & ~E_NOTICE)  //显示错误信息,除了E_NOTICE

    eregi('WIN',PHP_OS) //忽略大小写的正则匹配

    date_default_timezone_set()  //设置默认时区,php5.1新特性

    echo  //打印字符串

    defined  //判断常量是否定义

    exit()  //退出程序

    file_exists()  //判断文件是否存在

    is_writable()  //判断文件是否可写

    chmod()   //修改文件权限

    fopen()   //打开文件

    isset()    //判断变量是否已定义

    strlen()   //计算字符串长度

    function_exists()   //判断函数是否可用(用这个来判断是否支持mysql扩展)

    mysql_get_server_info()   //获取服务器版本信息

    mysql_query()    //执行sql代码

    MYSQL_SELECT_DB()  //选中数据库

    mysql_error()    //输出mysql错误信息

    define()   //定义常量

    md5()      //计算

    ftruncate()   //截断文件(可以用来清空文件)

    fwrite()     //往文件写入内容

    mysql_errno()   //输入mysql错误编号

    gmdate()    //返回与时区无关的GMT时间

    count()     //算一个数组中有几个元素

     

  • APACHE+PHP+MYSQL的安装

    2008-07-12 23:03:20

    今天重装系统,windows下的APM已经装过N遍了,总有些细节会忘掉.记一下吧,这是win下的安装方法

    apache,没什么好说的,直接装,中间只需填个域名就可以.

    装完修改DocumentRoot以及对应的Directory, 在给DirectoryIndex加些index.htm index.php什么的.

    然后是PHP, PHP解压后放到比如D:\php, 然后重命名php.ini.dist为php.ini, 修改extension_dir=d:\php\ext,

    1.去掉;extension= php_mysql.dll前的分号,

    2.把d:\php和d:\php\ext加到系统环境变量path中(似乎没什么用,我还是把libmysql.dll拷到system32下才行的),

    3.然后修改apache配置文件:

    LoadModule php5_module D:/php/php5apache2_2.dll(因为我用的是apache2.2.4)

    PHPIniDir "D:/php"

    AddType application/x-httpd-php .php

    AddType application/x-httpd-php .html

    AddType application/x-httpd-php .htm

    然后是安装mysql,mysql是比较独立的一部分,如果上面两个包都配好,那就重启apache直接就可以了.

    mysql中间步骤有点多, 注意看一下, 大多是数据库资源占用的选项,自己用尽管往小的选吧.

  • FireFox与document.all、showModalDialog

    2008-06-26 18:41:15

    前几天傻哩八叽地改了个程序,觉得多出几行代码就顺手删了。刚跑到FireFox下一用,模态窗口弹不出来。

    FireBug显示showModalDialog not defined

    FireFox不支持showModalDialog(为什么?),只好用window.open代替了。

    查了查老代码,是用document.all是否为true来决定showModalDialog还是window.open。

    试了一下,FireFox支持document.all.*,但是document.all是个空对像,果然可以用来区分IE和firefox。

    不过为什么要用document.all来判断而不直接识别浏览器呢?是因为方便还是document.all和showModalDialog有什么特别联系?

    ……firefox还不支持window.dialogArguments?

数据统计

  • 访问量: 11998
  • 日志数: 24
  • 建立时间: 2008-06-11
  • 更新时间: 2008-11-17

RSS订阅

Open Toolbar