主要收集自己做项目中遇到的问题,或是一些好的方法!!ad一下:最近没有什么事,有单做的可以找我.QQ:57893457
mysql随机查询最常见的写法如下:
Php代码
  1. SELECT * FROM tablename ORDER BY RAND() LIMIT 1  


php手册上如此解释:
About selecting random rows from a MySQL table:

SELECT * FROM tablename ORDER BY RAND() LIMIT 1

works for small tables, but once the tables grow larger than 300,000 records or so this will be very slow because MySQL will have to process ALL the entries from the table, order them randomly and then return the first row of the ordered result, and this sorting takes long time. Instead you can do it like this (atleast if you have an auto_increment PK):

SELECT MIN(id), MAX(id) FROM tablename;

Fetch the result into $a

$id=rand($a[0],$a[1]);

SELECT * FROM tablename WHERE id>='$id' LIMIT 1

大意是说,如果你用 ORDER BY RAND() 来随机读取记录的话,当数据表记录达到30万或者更多的时候,mysql将非常吃力.
所以php手册里给了一种方法,结合php来实现:
首先 SELECT MIN(id), MAX(id) FROM tablename; 取数据库里最大最小值;
然后 $id=rand($a[0],$a[1]); 产生一个随机数;
最后 SELECT * FROM tablename WHERE id>='$id' LIMIT 1 将上面产生的随机数带入查询;
Tags: ,
问题:关闭弹出层后,原来页面上的文本框无法聚焦,即文本框变成readyonly(只读)了
原因和解决方法:这个的原因不好说,很多人都认为是ie本身的bug。是由于iframe没有移除,即使移除了。内存上也么有清除造成的。这也是我猜的。哈哈。解决方法是在tb_remove()中先手动移除iframe然后,在强制做垃圾回收,至少我是可以啦。哈哈。代码如下:

function tb_remove() {
    $("#TB_imageOff").unbind("click");
    $("#TB_closeWindowButton").unbind("click");
    $("#TB_window").fadeOut("fast",function(){
        if(navigator.userAgent.indexOf("MSIE")>0) { //如果是IE
            //手动移除iframe,IE的一个bug
            $('#TB_iframeContent').remove();
        }
        $('#TB_window,#TB_overlay,#TB_HideSelect').trigger("unload").unbind().remove();
        if(navigator.userAgent.indexOf("MSIE")>0) { //如果是IE
            //自己调用垃圾回收,强制清楚iframe内存,解决文本框无法输入问题。
            CollectGarbage();
        }
    });
    $("#TB_load").remove();
    if (typeof document.body.style.maxHeight == "undefined") {//if IE 6
        $("body","html").css({
            height: "auto",
            width: "auto"
        });
        $("html").css("overflow","");
    }
    document.onkeydown = "";
    document.onkeyup = "";
    return false;
}
Tags: ,

php socket模拟POST GET请求 fsockopen 不指定

shunzi , 2010/08/18 10:47 , PHP , 评论(9) , 阅读(120) , Via 本站原创
  1. function httpRequestGET($url){   
  2.   $url2 = parse_url($url);   
  3.   $url2["path"] = ($url2["path"] == "" ? "/" : $url2["path"]);   
  4.   $url2["port"] = ($url2["port"] == "" ? 80 : $url2["port"]);   
  5.   $host_ip = @gethostbyname($url2["host"]);   
  6.   $fsock_timeout=20;   
  7.   if(($fsock = fsockopen($host_ip, 80, $errno$errstr$fsock_timeout)) < 0){   
  8.     return false;   
  9.   }   
  10.      
  11.   $request =  $url2["path"] . ($url2["query"] != "" ? "?" . $url2["query"] : "") . ($url2["fragment"] != "" ? "#" . $url2["fragment"] : "");   
  12.   $in  = "GET " . $request . " HTTP/1.0\r\n";   
  13.   $in .= "Accept: */*\r\n";   
  14.   $in .= "User-Agent: Payb-Agent\r\n";   
  15.   $in .= "Host: " . $url2["host"] . "\r\n";   
  16.   $in .= "Connection: Close\r\n\r\n";   
  17.   if(!@fwrite($fsock$instrlen($in))){   
  18.     fclose($fsock);   
  19.     return false;   
  20.   }   
  21.   unset($in);   
  22.      
  23.   $out = "";   
  24.   while($buff = @fgets($fsock, 2048)){   
  25.     $out .= $buff;   
  26.   }   
  27.   fclose($fsock);   
  28.   $pos = strpos($out"\r\n\r\n");   
  29.   $head = substr($out, 0, $pos);    //http head   
  30.   $status = substr($head, 0, strpos($head"\r\n"));    //http status line   
  31.   $body = substr($out$pos + 4, strlen($out) - ($pos + 4));//page body   
  32.   if(preg_match("/^HTTP\/\d\.\d\s([\d]+)\s.*$/"$status$matches)){   
  33.     if(intval($matches[1]) / 100 == 2){   
  34.       return $body;     
  35.     }else{   
  36.       return false;   
  37.     }   
  38.   }else{   
  39.     return false;   
  40.   }   
  41. }   
  42. function httpRequestPOST($url,$post_data){   
  43.   $url2 = parse_url($url);   
  44.   $url2["path"] = ($url2["path"] == "" ? "/" : $url2["path"]);   
  45.   $url2["port"] = ($url2["port"] == "" ? 80 : $url2["port"]);   
  46.   $host_ip = @gethostbyname($url2["host"]);   
  47.   $fsock_timeout=20;//秒   
  48.   if(($fsock = fsockopen($host_ip, 80, $errno$errstr$fsock_timeout)) < 0){   
  49.     return false;   
  50.   }   
  51.      
  52.   $request =  $url2["path"] . ($url2["query"] != "" ? "?" . $url2["query"] : "") . ($url2["fragment"] != "" ? "#" . $url2["fragment"] : "");   
  53.      
  54.   $needChar = false;   
  55.      
  56.   foreach($post_data as $key => $val)  {   
  57.         
  58.     $post_data2 .= ($needChar ? "&" : "") . urlencode($key) . "=" . urlencode($val);   
  59.     $needChar = true;   
  60.   }   
  61.   $in  = "POST " . $request . " HTTP/1.0\r\n";   
  62.   $in .= "Accept: */*\r\n";   
  63.   $in .= "Host: " . $url2["host"] . "\r\n";   
  64.   $in .= "User-Agent: Lowell-Agent\r\n";   
  65.   $in .= "Content-type: application/x-www-form-urlencoded\r\n";   
  66.   $in .= "Content-Length: " . strlen($post_data2) . "\r\n";   
  67.   $in .= "Connection: Close\r\n\r\n";   
  68.   $in .= $post_data2 . "\r\n\r\n";   
  69.      
  70.   unset($post_data2);   
  71.   if(!@fwrite($fsock$instrlen($in))){   
  72.     fclose($fsock);   
  73.     return false;   
  74.   }   
  75.   unset($in);   
  76.      
  77.   $out = "";   
  78.   while($buff = fgets($fsock, 2048)){   
  79.     $out .= $buff;   
  80.   }   
  81.      
  82.   fclose($fsock);   
  83.   $pos = strpos($out"\r\n\r\n");   
  84.   $head = substr($out, 0, $pos);    //http head   
  85.   $status = substr($head, 0, strpos($head"\r\n"));    //http status line   
  86.   $body = substr($out$pos + 4, strlen($out) - ($pos + 4));//page body   
  87.   if(preg_match("/^HTTP\/\d\.\d\s([\d]+)\s.*$/"$status$matches)){   
  88.     if(intval($matches[1]) / 100 == 2){   
  89.       return $body;   
  90.     }else{   
  91.       return false;   
  92.     }   
  93.   }else{   
  94.     return false;   
  95.   }   
  96. }   

百度-搜索引擎优化指南(转) 不指定

shunzi , 2010/08/17 11:04 , SEO , 评论(7) , 阅读(141) , Via 本站原创


前期准备

域名和服务器空间是网站建设的基础

  1. 域名注册
    域名可以和网站主题或网站名称相呼应,让人看到域名就能联想到网站内容
  2. 服务器、空间租用
    保证用户的访问速度和稳定性,根据用户群分布选择接入商
面向搜索引擎的网站建设

如何更好的让搜索引擎收录网站中的内容?

  1. 机器可读
    建议使用文字而不是flash、图片、Javascript等来显示重要的内容或链接,不使用frame和iframe框架结构
  2. 网站结构
    确保每个页面都可以通过至少一个文本链接到达。合理分类网站上的内容,不要过度细分。
  3. 子域名与目录的选择
    关联度不高的内容,放在不同的子域名下,可以帮助搜索引擎更好的理解站点的主题。
  4. 规范、简单的url
    同一网页,只对应一个url;不把Session id等不必要的内容放在url中;让用户能从url判断出网页内容以及网站结构信息,并可以
    预测将要看到的内容;URL尽量短;动态url对搜索引擎没有影响
  5. 利用站长工具
    Sitemap提交;开启ping服务
  6. 谨慎改版/换域名
    如非必要,不要做整站内容的完全更换。如果切换,做好301转向工作。

提供PHP效率总结(经常看看) 不指定

shunzi , 2010/08/10 17:42 , PHP , 评论(9) , 阅读(188) , Via 本站原创
   这些都是高手们总结出来的,有时间就看看。
   1、如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍。

  2、$row[’id’] 的速度是$row[id]的7倍。

  3、echo 比 print 快,并且使用echo的多重参数(译注:指用逗号而不是句点)代替字符串连接,比如echo $str1,$str2。

  4、在执行for循环之前确定最大循环数,不要每循环一次都计算最大值,最好运用foreach代替。

  5、注销那些不用的变量尤其是大数组,以便释放内存。

  6、尽量避免使用__get,__set,__autoload。

  7、require_once()代价昂贵。

  8、include文件时尽量使用绝对路径,因为它避免了PHP去include_path里查找文件的速度,解析操作系统路径所需的时间会更少。

  9、如果你想知道脚本开始执行(译注:即服务器端收到客户端请求)的时刻,使用$_SERVER[‘REQUEST_TIME’]要好于time()。

  10、函数代替正则表达式完成相同功能。

  11、str_replace函数比preg_replace函数快,但strtr函数的效率是str_replace函数的四倍。

  12、如果一个字符串替换函数,可接受数组或字符作为参数,并且参数长度不太长,那么可以考虑额外写一段替换代码,使得每次传递参数是一个字符,而不是只写一行代码接受数组作为查询和替换的参数。

  13、使用选择分支语句(译注:即switch case)好于使用多个if,else if语句。

  14、用@屏蔽错误消息的做法非常低效,极其低效。

  15、打开apache的mod_deflate模块,可以提高网页的浏览速度。

  16、数据库连接当使用完毕时应关掉,不要用长连接。

  17、错误消息代价昂贵。

  18、在方法中递增局部变量,速度是最快的。几乎与在函数中调用局部变量的速度相当。

  19、递增一个全局变量要比递增一个局部变量慢2倍。

  20、递增一个对象属性(如:$this->prop++)要比递增一个局部变量慢3倍。

  21、递增一个未预定义的局部变量要比递增一个预定义的局部变量慢9至10倍。

  22、仅定义一个局部变量而没在函数中调用它,同样会减慢速度(其程度相当于递增一个局部变量)。PHP大概会检查看是否存在全局变量。

Tags: ,
分页: 1/3 第一页 1 2 3 下页 最后页 [ 显示模式: 摘要 | 列表 ]