1、大家来说说URL映射吧
一般url映射有两种方式,一种是通过mod_rewrite实现,这种网上教材很多我也不多说了。另外一种是在程序中模拟,比如类似zend Framework中的那种方式/index.php/controller/action/var1/value1/var2/value2/。这里方式其实最主要是通过一个统一的输入接口,然后对url进行解析,最后转发到相应的controller中的module。
Read the rest of this entry »
模拟登陆可以用curl或者socket来实现,当curl需要服务器相应的启用curl module,自己socket实现相对比较麻烦,使用snoopy就简单了很多啦。
在这里,我们使用喜悦国际村做为例子。(^_^,纯属研究)
首先,我们要获取到登陆需要发送什么字段,目标地址是什么。这里我们使用snoopy的fetchform来实现。
- <?php
- include "Snoopy.class.php";
- $snoopy = new Snoopy;
- $snoopy->fetchform("http://www.phpx.com/happy/logging.php?action=login");
- print $snoopy->results;
- ?>
当然你也可以直接查看http://www.phpx.com/happy/logging.php?action=login的源代码来实现,不过这样更加方便把。这里,我们获取到目标和提交的数据,下一步就可以实现模拟登陆了。代码如下:
- <?php
- include "Snoopy.class.php";
- $snoopy = new Snoopy;
- $submit_url = "http://www.phpx.com/happy/logging.php?action=login";
- $submit_vars["loginmode"] = "normal";
- $submit_vars["styleid"] = "1";
- $submit_vars["cookietime"] = "315360000";
- $submit_vars["loginfield"] = "username";
- $submit_vars["username"] = "********"; //你的用户名
- $submit_vars["password"] = "*******"; //你的密码
- $submit_vars["questionid"] = "0";
- $submit_vars["answer"] = "";
- $submit_vars["loginsubmit"] = "提 交";
- $snoopy->submit($submit_url,$submit_vars);
- print $snoopy->results;
- ?>
去年接触到PDO,也稍微了用了下。不过不熟悉,这次查看了手册,详细的看了看。手册上是英文的,顺便就翻译下。
PDO,全称PHP DATA OBJECTS,在PHP中定义了一个轻量级别的数据操作接口。在PHP5.1及其之后的版本中得到完全的支持。PDO,实现了事务、不同数据库之间的抽象。这是我最喜欢的原因。
安全PDO是非常简单的,也有很多文章,这里就不具体说了。
Read the rest of this entry »
- <?php
- //获得当前的脚本网址
- function get_php_url(){
- if(!empty($_SERVER["REQUEST_URI"])){
- $scriptName = $_SERVER["REQUEST_URI"];
- $nowurl = $scriptName;
- }else{
- $scriptName = $_SERVER["PHP_SELF"];
- if(empty($_SERVER["QUERY_STRING"])) $nowurl = $scriptName;
- else $nowurl = $scriptName."?".$_SERVER["QUERY_STRING"];
- }
- return $nowurl;
- }
- //把全角数字转为半角数字
- function GetAlabNum($fnum){
- $nums = array("0","1","2","3","4","5","6","7","8","9");
- $fnums = "0123456789";
- for($i=0;$i<=9;$i++) $fnum = str_replace($nums[$i],$fnums[$i],$fnum);
- $fnum = ereg_replace("[^0-9\.]|^0{1,}","",$fnum);
- if($fnum=="") $fnum=0;
- return $fnum;
- }
写PHP的时候,最讨厌的就是循环输出时换行(比如:每5条数据换一次行)。读取记录集要用循环,换行还要用循环。烦死了!
现在使用了div+css的方法,终于可以把“换行”这种小问题交给css解决了。(怎么感觉像脑白金广告?)
实现的思路很简单:“大div套小div”。
在css中定义好大div的宽度和小div的宽度。
比如:
- .div1{width:600px;}
- .div2{width:140px;float:left;margin:5px;text-align:left;}
其中div1是整个布局,div2里放着每条数据。(div2里的float:left是让每个div2都居左对齐,margin:5px是留出间隔,text-align:left是让div2里的文本也居左对齐)
这样在页面中,只在div1中使用一次循环,只管输出div2。换行的问题,就留给css自己把关了,当div2的总宽度超过了div1的宽度,自然就会换到下一行。
所以,把两个div的宽度计算好。逢几换行由你定。
简单吧?
