nginx静态资源设置缓存的方法

nginx静态资源设置缓存的方法

直接加expires 30d; 就是就可以了 缓存时间30天
完整如下

  location / {
            root   /home/www/wordpress;
            index  index.php index.html index.htm;
			expires 30d;
		     if (!-e $request_filename) {
		    	rewrite ^/p([0-9]*)/$  /?p=$1 last;
				#rewrite /index.html /?p=967 redirect;
				break;
			}
        }

然后重新服务 nginx -s reload
然后测试 打开浏览器network
reponseheader里面
Cache-Control:max-age=2592000
30*24*3600=2592000秒

php $_SERVER[‘HTTP_REFERER’]详解

php $_SERVER[‘HTTP_REFERER’]详解

ceshia.php

echo '<a href="ceshib.php">ceshib</a>';

ceshib.php

print_r($_SERVER['HTTP_REFERER']);
exit();

访问ceshia 然后点击ceshib连接
返回http://wx.newmiracle.cn/ceshia.php

如果直接访问ceshib
就会报错
Notice: Undefined index: HTTP_REFERER in F:\phpStudy\WWW\mircoweb\mircoweb\wwwroot\Public\ceshib.php on line 8

PHP去除html的宽高属性的正则表达式

PHP去除html的宽高属性的正则表达式

<?php
/**
 * 清除宽高样式
 * @param  String $content 内容
 * @return String
 */
function clear_wh($content){
    $config = array('width', 'height');

    foreach($config as $v){
        //匹配 width=400 height = 200这种类型的
        $content = preg_replace('/'.$v.'\s*=\s*\d+\s*/i', '', $content);
        //匹配 width="500" height="300" 这种类型的
        $content = preg_replace('/'.$v.'\s*=\s*.+?["\']/i', '', $content);
       //匹配 Width : 100px ; Height: 100 px;
      $content = preg_replace('/'.$v.'\s*:\s*\d+\s*px\s*;?/i', '', $content);
    }

    return $content;
}
?>

<?php
$html = <<<HTML
<div style="text-align:center" width="500" height="300">
    <div style="Width : 100px ; Height: 100 px;">
        <img src="/images/test.jpg" width=400 height = 200>
        <div style="float:left; width: 100px; height : 200 px;"></div>
    </div>
    <div style="width :   100 px ;height: 100px">
        <img src="/images/test.jpg" width=400 height = 200>
    </div>
</div>
HTML;

echo '<xmp>';
echo '原内容:'.PHP_EOL;
echo $html.PHP_EOL.PHP_EOL;
echo '过滤后内容:'.PHP_EOL;
echo clear_wh($html);
echo '</xmp>';
?>

php open_basedir的使用与性能分析

php open_basedir的使用与性能分析

使用方法

/*限制打开的目录*/
ini_set('open_basedir', __DIR__.'/');

如果 打开不是这个目录 就会报错
failed to open stream: Operation not permitted in F:\phpStudy\WWW\mircoweb\mircoweb\wwwroot\Public\opendirtest.php on line 8

经过测试 open_basedir使用后 会影响I/O性能导致系统执行变慢 所以能不用就不要用了。。。

PHP判断是不是爬虫的方法

PHP判断是不是爬虫的方法
这个一般用于防止爬虫 和 seo优化(因为爬虫都是按照第一次打开显示的页面 有些ajax 等需要点击才能显示的就爬不到啦)

<?php
// 判断是否搜索引擎机器人访问
function isRobot() {
    $agent= strtolower(isset($_SERVER['HTTP_USER_AGENT'])? $_SERVER['HTTP_USER_AGENT'] : '');
    if(!empty($agent)){
        $spiderSite= array(
            "TencentTraveler",
            "Baiduspider+",
            "BaiduGame",
            "Googlebot",
            "msnbot",
            "Sosospider+",
            "Sogou web spider",
            "ia_archiver",
            "Yahoo! Slurp",
            "YoudaoBot",
            "Yahoo Slurp",
            "MSNBot",
            "Java (Often spam bot)",
            "BaiDuSpider",
            "Voila",
            "Yandex bot",
            "BSpider",
            "twiceler",
            "Sogou Spider",
            "Speedy Spider",
            "Google AdSense",
            "Heritrix",
            "Python-urllib",
            "Alexa (IA Archiver)",
            "Ask",
            "Exabot",
            "Custo",
            "OutfoxBot/YodaoBot",
            "yacy",
            "SurveyBot",
            "legs",
            "lwp-trivial",
            "Nutch",
            "StackRambler",
            "The web archive (IA Archiver)",
            "Perl tool",
            "MJ12bot",
            "Netcraft",
            "MSIECrawler",
            "WGet tools",
            "larbin",
            "Fish search",
        );
        foreach($spiderSite as $val){
            $str = strtolower($val);
            if(strpos($agent, $str) !== false){
                return true;
            }
        }
    }

    return false;
}
if(isRobot()){
    echo'爬虫';
}else{
    echo'不是爬虫';
}
?>

PHP解析xml的方法

PHP解析xml的方法

<?php  
/** XML 文件分析类 
*   Date:   2013-02-01 
*   Author: fdipzone 
*   Ver:    1.0 
* 
*   func: 
*   loadXmlFile($xmlfile)     读入xml文件输出Array 
*   loadXmlString($xmlstring) 读入xmlstring 输出Array 
*/  
  
class XMLParser{  
  
    /** 读取xml文件 
    * @param  String  $xmlfile 
    * @return Array 
    */  
    public function loadXmlFile($xmlfile){  
  
        // get xmlfile content  
        $xmlstring = file_exists($xmlfile)? file_get_contents($xmlfile) : '';  
  
        // parser xml  
        list($flag, $data) = $this->parser($xmlstring);  
  
        return $this->response($flag, $data);  
  
    }  
  
  
    /** 读取xmlstring 
    * @param  String $xmlstring 
    * @return Array 
    */  
    public function loadXmlString($xmlstring){  
  
        // parser xml  
        list($flag, $data) = $this->parser($xmlstring);  
  
        return $this->response($flag, $data);  
  
    }  
  
  
    /** 解释xml内容 
    * @param   String $xmlstring 
    * @return  Array 
    */  
    private function parser($xmlstring){  
  
        $flag = false;  
        $data = array();  
  
        // check xml format  
        if($this->checkXmlFormat($xmlstring)){  
            $flag = true;  
              
            // xml to object  
            $data = simpleXML_load_string($xmlstring, 'SimpleXMLElement', LIBXML_NOCDATA);  
              
            // object to array  
            $this->objectToArray($data);  
        }  
  
        return array($flag, $data);  
  
    }  
  
  
    /** 检查xml格式是否正确 
    * @param  String $xmlstring 
    * @return boolean 
    */  
    private function checkXmlFormat($xmlstring){  
          
        if($xmlstring==''){  
            return false;  
        }  
  
        $xml_parser_obj = xml_parser_create();  
  
        if(xml_parse_into_struct($xml_parser_obj, $xmlstring, $vals, $indexs)===1){ // 1:success 0:fail  
            return true;  
        }else{  
            return false;  
        }  
  
    }  
  
  
    /** object 转 Array 
    * @param  object $object 
    * @return Array 
    */  
    private function objectToArray(&$object){  
          
        $object = (array)$object;  
          
        foreach($object as $key => $value){  
            if($value==''){  
                $object[$key] = "";  
            }else{  
                if(is_object($value) || is_array($value)){  
                    $this->objectToArray($value);  
                    $object[$key] = $value;  
                }  
            }  
        }  
      
    }  
  
  
    /** 输出返回 
    * @param  boolean $flag true:false 
    * @param  Array   $data 转换后的数据 
    * @return Array 
    */  
    private function response($flag=false, $data=array()){  
      
        return array($flag, $data);  
      
    }  
  
}  
  
?>  

<?php  
require "XMLParser.class.php";  
  
$xmlfile = 'file.xml';  
$xmlstring = '<?xml version="1.0" encoding="utf-8"?>  
<xmlroot>  
<status>1000</status>  
<info></info>  
<result><id>100</id>  
<name>fdipzone</name>  
<gender>1</gender>  
<age>28</age>  
</result>  
</xmlroot>';  
  
echo '<pre>';  
  
$xml_parser = new XMLParser();  
echo "response xmlfile\r\n";  
list($flag, $xmldata) = $xml_parser->loadXmlFile($xmlfile);  
if($flag){  
    print_r($xmldata);  
}  
  
echo "response xmlstring\r\n";  
list($flag, $xmldata) = $xml_parser->loadXmlString($xmlstring);  
if($flag){  
    print_r($xmldata);  
}  
  
echo '

‘;
?>

javascript判断碰撞检测

javascript判断碰撞检测

点与矩形的碰撞检测

 /**
     *
     * @param x1 点
     * @param y1 点
     * @param x2 矩形view x
     * @param y2 矩形view y
     * @param w  矩形view 宽
     * @param h  矩形view 高
     * @return
     */
    function isCollsion(x1,y1,x2,y2,w,h) {
        if (x1 >= x2 && x1 <= x2 + w && y1 >= y2 && y1 <= y2 + h) {
            console.log('碰撞');
            return true;
        }
        console.log('没碰撞');
        return false;
    }

矩形与矩形的碰撞检测

 /**
     * 检测两个矩形是否碰撞
     * @param x1  矩形1view x
     * @param y1  矩形1view y
     * @param w1  矩形1view 宽
     * @param h1  矩形1view 高
     * @param x2  矩形2view x
     * @param y2  矩形2view y
     * @param w2  矩形2view 宽
     * @param h2  矩形2view 高
     * @return
     */
        function isCollsionWithRect(x1,y1,w1,h1,x2,y2,w2,h2) {
        if (x1 >= x2 && x1 >= x2 + w2) {
            console.log('没碰撞');
            return false;
        } else if (x1 <= x2 && x1 + w1 <= x2) {
            console.log('没碰撞');
            return false;
        } else if (y1 >= y2 && y1 >= y2 + h2) {
            console.log('没碰撞');
            return false;
        } else if (y1 <= y2 && y1 + h1 <= y2) {
            console.log('没碰撞');
            return false;
        }
        console.log('碰撞');
        return true;
    }

htm5手机端实现拖动图片

htm5手机端实现拖动图片


<!doctype html>
<html>
<head>
    <title>Mobile Cookbook</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style>
        .someElm {
            width:4rem;
            height:4rem;

            position:absolute;

        }
        .someElm1{
            left:3%;top:10%;
            background:#ccc;
        }
        .someElm2{
            left:13%;top:25%;
            background:#f00000;
        }
        .someElm3{
            left:70%;top:10%;
            background: #0B8E00;
        }
    </style>
</head>
<body>

    <div class="someElm someElm1">
    </div>
    <div class="someElm someElm2">
    </div>
    <div class="someElm someElm3">
    </div>

<script src="http://apps.bdimg.com/libs/jquery/1.9.1/jquery.js"></script>
<!-- <script src="http://code.jquery.com/mobile/1.0a4.1/jquery.mobile-1.0a4.1.min.js"></script>-->
<script>
     var chumodianposleft;
     var chumodianpostop;
    $('.someElm').bind('touchstart',function(e){
        var touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];
        /*读取选中元素的绝对定位的值*/
        var pianyi=$(this).offset();
        /*选中的地方离元素的边距*/
        chumodianposleft=touch.pageX-pianyi.left;
        chumodianpostop=touch.pageY-pianyi.top;
    })
    $('.someElm').bind('touchmove',function(e){

        var touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];
         /*左上角为0,0*/

        $(this).css('left',touch.pageX-chumodianposleft);
        $(this).css('top',touch.pageY-chumodianpostop);
    });
</script>
</body>
</html>

下面的来个升级版的demo 拖动元素到中间的框里面 然后元素消失

<!doctype html>
<html>
<head>
    <title>Mobile Cookbook</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style>
        .someElm {
            width:4rem;
            height:4rem;

            position:absolute;

        }
        .someElm1{
            left:3%;top:10%;
            background:#ccc;
        }
        .someElm2{
            left:13%;top:25%;
            background:#f00000;
        }
        .someElm3{
            left:70%;top:10%;
            background: #0B8E00;
        }

        .gudingceshi {
            width:6rem;
            height:6rem;
            position:absolute;
            left: 37%;
            top: 47%;
            background: #000;
        }
    </style>
</head>
<body>

    <div class="someElm someElm1">
    </div>
    <div class="someElm someElm2">
    </div>
    <div class="someElm someElm3">
    </div>
    <div class="gudingceshi">
    </div>

<script src="http://apps.bdimg.com/libs/jquery/1.9.1/jquery.js"></script>
<!-- <script src="http://code.jquery.com/mobile/1.0a4.1/jquery.mobile-1.0a4.1.min.js"></script>-->
<script>

     var chumodianposleft;
     var chumodianpostop;
    $('.someElm').bind('touchstart',function(e){
        var touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];
        /*读取选中元素的绝对定位的值*/
        var pianyi=$(this).offset();
        /*选中的地方离元素的边距*/
        chumodianposleft=touch.pageX-pianyi.left;
        chumodianpostop=touch.pageY-pianyi.top;
    })
    $('.someElm').bind('touchmove',function(e){

        var touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];

         /*左上角为0,0*/
        var x2=$('.gudingceshi').offset().left;
        var y2=$('.gudingceshi').offset().top;
        var w=$('.gudingceshi').width();
        var h=$('.gudingceshi').height();
        var ispengzhuang=isCollsion(touch.pageX,touch.pageY,x2,y2,w,h);
        if(ispengzhuang){
            $(this).remove();
        }

        $(this).css('left',touch.pageX-chumodianposleft);
        $(this).css('top',touch.pageY-chumodianpostop);
    });
</script>

<script>


    /**
     *
     * @param x1 点
     * @param y1 点
     * @param x2 矩形view x
     * @param y2 矩形view y
     * @param w  矩形view 宽
     * @param h  矩形view 高
     * @return
     */
    function isCollsion(x1,y1,x2,y2,w,h) {
        if (x1 >= x2 && x1 <= x2 + w && y1 >= y2 && y1 <= y2 + h) {
            console.log('碰撞');
            return true;
        }
        console.log('没碰撞');
        return false;
    }
</script>
</body>
</html>