网站开发:XSS(跨站攻击)的防范利器HTMLPurifier

xss
  在编程开发时安全问题是及其重要的,对于用户提交的数据要进行过滤。   XSS就是需要重视的一点,先说一下什么是XSS:   简单来说就是用户提交数据(例如发表评论,发表日志)时往Web页面里插入恶意javascript代码例如死循环,疯狂的alert,这还不算还可能会修改页面页面上的html元素(例如登录表单的action),这样当用户浏览该页之时,嵌入其中Web里面的代码会被执行,从而达到用户的特殊目的。     在使用PHP开发时,可以使用htmlspecialchars将用户提交过来的数据转换使之原样显示,但是这样一来会造成一些弊端,比如用户上传的图片无法显示,html标签不会起作用,没有任何样式。解决方案就是可以使用UBB标签或者自定义标签来实现,要么就是自己写正则去过滤,但是防不胜防,并且这样在处理起来有些繁琐。下载重点介绍一个开源的HTMLPurifier,这是一个符合W3C标准的HTML过滤器,可以生成标准的HTML代码,并且有很多的自定义配置,设置白名单之后就可以把有用的css留下并且可以过滤掉javascript代码,有效的防止XSS!   实例:   <?php //引入htmlPurifier去除XSS跨站攻击代码 生成安全的html代码 require_once('./htmlpurifier/library/HTMLPurifier.includes.php'); $config = HTMLPurifier_Config::createDefault(); //创建默认配置 $purifier = new HTMLPurifier($config); //实例化 并传入默认配置 ($config为空也可) $safedata = $purifier->purify($_POST['content']); //开始过滤 返回过滤后的字符串 echo '<pre>'; print_r($safedata); ?>   下载HTMLPurifier  
继续阅读 »
  在编程开发时安全问题是及其重要的,对于用户提交的数据要进行过滤。   XSS就是需要重视的一点,先说一下什么是XSS:   简单来说就是用户提交数据(例如发表评论,发表日志)时往Web页面里插入恶意javascript代码例如死循环,疯狂的alert,这还不算还可能会修改页面页面上的html元素(例如登录表单的action),这样当用户浏览该页之时,嵌入其中Web里面的代码会被执行,从而达到用户的特殊目的。     在使用PHP开发时,可以使用htmlspecialchars将用户提交过来的数据转换使之原样显示,但是这样一来会造成一些弊端,比如用户上传的图片无法显示,html标签不会起作用,没有任何样式。解决方案就是可以使用UBB标签或者自定义标签来实现,要么就是自己写正则去过滤,但是防不胜防,并且这样在处理起来有些繁琐。下载重点介绍一个开源的HTMLPurifier,这是一个符合W3C标准的HTML过滤器,可以生成标准的HTML代码,并且有很多的自定义配置,设置白名单之后就可以把有用的css留下并且可以过滤掉javascript代码,有效的防止XSS!   实例:   <?php //引入htmlPurifier去除XSS跨站攻击代码 生成安全的html代码 require_once('./htmlpurifier/library/HTMLPurifier.includes.php'); $config = HTMLPurifier_Config::createDefault(); //创建默认配置 $purifier = new HTMLPurifier($config); //实例化 并传入默认配置 ($config为空也可) $safedata = $purifier->purify($_POST['content']); //开始过滤 返回过滤后的字符串 echo '<pre>'; print_r($safedata); ?>   下载HTMLPurifier   收起阅读 »

分析 Nginx出现Access Denied的原理以及解决方案

          如果你的Nginx服务器出现Access Denied我觉得90%的可能性是Nginx配置文件配置的有些小毛病,网上有些解决方案是修改php-fpm的配置文件中的security.limit_extensions,在这个参数中增加访问的文件扩展名,例如css、js等文件出现Access Denied错误时增加扩展名结果还真管用,其实这种方式不太可取,这些静态文件本不应该交给php-fpm解析,由此可以断定Nginx配置文件中配置的将所有的文件都交给php-fpm处理了。解决办法就是只让php文件交给php-fpm来解析,这样问题就解决了。配置方式如下:   location ~ \.php(.*)$ { #这里填写php-fpm相关参数 } 提醒:php字母前的.一定要用\转义,否则只要带php的路径或者文件名都会匹配到,造成一些异常.  
继续阅读 »
          如果你的Nginx服务器出现Access Denied我觉得90%的可能性是Nginx配置文件配置的有些小毛病,网上有些解决方案是修改php-fpm的配置文件中的security.limit_extensions,在这个参数中增加访问的文件扩展名,例如css、js等文件出现Access Denied错误时增加扩展名结果还真管用,其实这种方式不太可取,这些静态文件本不应该交给php-fpm解析,由此可以断定Nginx配置文件中配置的将所有的文件都交给php-fpm处理了。解决办法就是只让php文件交给php-fpm来解析,这样问题就解决了。配置方式如下:   location ~ \.php(.*)$ { #这里填写php-fpm相关参数 } 提醒:php字母前的.一定要用\转义,否则只要带php的路径或者文件名都会匹配到,造成一些异常.   收起阅读 »

原生php 实现微信自定义分享

  不依赖任何框架,原生php 实现微信自定义分享:   只需要两个文件:   index.php //模板文件jssdk.php   index.php (模板代码如下):   自行替换 appId 和 appSecret   <?php include_once 'jssdk.php'; $jssdk = new \JSSDK("appId", "appSecret"); $signPackage = $jssdk->GetSignPackage(); $appid = 'appId'; $timestamp = $signPackage['timestamp']; $nonceStr = $signPackage['nonceStr']; $signature = $signPackage['signature']; ?> <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script> <script> wx.config({ appId: '<?php echo $appid;?>', timestamp: '<?php echo $timestamp;?>', nonceStr: '<?php echo $nonceStr;?>', signature: '<?php echo $signature;?>', jsApiList: [ 'onMenuShareTimeline', 'onMenuShareAppMessage' ] }); wx.ready(function () { shareWeixin(); }); function shareWeixin(){ wx.onMenuShareTimeline({ title: '标题', link: '分享地址', imgUrl: '分享图片地址', success: function () { // 用户确认分享后执行的回调函数 //window.location.href=""; }, cancel: function () { // 用户取消分享后执行的回调函数 } }); wx.onMenuShareAppMessage({ title: '标题', desc: '简介', link: '分享地址', imgUrl: '分享图片地址', type: '', dataUrl: '', success: function () { // 用户确认分享后执行的回调函数 //window.location.href=""; }, cancel: function () { // 用户取消分享后执行的回调函数 } }); } </script> jssdk.php 代码如下:   <?php class JSSDK { private $appId; private $appSecret; public function __construct($appId, $appSecret) { $this->appId = $appId; $this->appSecret = $appSecret; } public function getSignPackage() { $jsapiTicket = $this->getJsApiTicket(); $url = "http://www.51ask.org/"; $timestamp = time(); $nonceStr = $this->createNonceStr(); // 这里参数的顺序要按照 key 值 ASCII 码升序排序 $string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr&timestamp=$timestamp&url=$url"; $signature = sha1($string); $signPackage = array( "appId" => $this->appId, "nonceStr" => $nonceStr, "timestamp" => $timestamp, "url" => $url, "signature" => $signature, "rawString" => $string ); return $signPackage; } private function createNonceStr($length = 16) { $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; $str = ""; for ($i = 0; $i < $length; $i++) { $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1); } return $str; } private function getJsApiTicket() { // jsapi_ticket 应该全局存储与更新,以下代码以写入到文件中做示例 $data = json_decode(file_get_contents("jsapi_ticket.json")); if ($data->expire_time < time()) { $accessToken = $this->getAccessToken(); $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken"; $res = json_decode($this->httpGet($url)); $ticket = $res->ticket; if ($ticket) { $data->expire_time = time() + 7000; $data->jsapi_ticket = $ticket; $fp = fopen("jsapi_ticket.json", "w"); fwrite($fp, json_encode($data)); fclose($fp); } } else { $ticket = $data->jsapi_ticket; } return $ticket; } private function getAccessToken() { // access_token 应该全局存储与更新,以下代码以写入到文件中做示例 $data = json_decode(file_get_contents("access_token.json")); if ($data->expire_time < time()) { $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appId&secret=$this->appSecret"; $res = json_decode($this->httpGet($url)); $access_token = $res->access_token; if ($access_token) { $data->expire_time = time() + 7000; $data->access_token = $access_token; $fp = fopen("access_token.json", "w"); fwrite($fp, json_encode($data)); fclose($fp); } } else { $access_token = $data->access_token; } return $access_token; } private function httpGet($url) { $curl = curl_init(); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_TIMEOUT, 500); curl_setopt($curl, CURLOPT_URL, $url); $res = curl_exec($curl); curl_close($curl); return $res; } }
继续阅读 »
  不依赖任何框架,原生php 实现微信自定义分享:   只需要两个文件:   index.php //模板文件jssdk.php   index.php (模板代码如下):   自行替换 appId 和 appSecret   <?php include_once 'jssdk.php'; $jssdk = new \JSSDK("appId", "appSecret"); $signPackage = $jssdk->GetSignPackage(); $appid = 'appId'; $timestamp = $signPackage['timestamp']; $nonceStr = $signPackage['nonceStr']; $signature = $signPackage['signature']; ?> <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script> <script> wx.config({ appId: '<?php echo $appid;?>', timestamp: '<?php echo $timestamp;?>', nonceStr: '<?php echo $nonceStr;?>', signature: '<?php echo $signature;?>', jsApiList: [ 'onMenuShareTimeline', 'onMenuShareAppMessage' ] }); wx.ready(function () { shareWeixin(); }); function shareWeixin(){ wx.onMenuShareTimeline({ title: '标题', link: '分享地址', imgUrl: '分享图片地址', success: function () { // 用户确认分享后执行的回调函数 //window.location.href=""; }, cancel: function () { // 用户取消分享后执行的回调函数 } }); wx.onMenuShareAppMessage({ title: '标题', desc: '简介', link: '分享地址', imgUrl: '分享图片地址', type: '', dataUrl: '', success: function () { // 用户确认分享后执行的回调函数 //window.location.href=""; }, cancel: function () { // 用户取消分享后执行的回调函数 } }); } </script> jssdk.php 代码如下:   <?php class JSSDK { private $appId; private $appSecret; public function __construct($appId, $appSecret) { $this->appId = $appId; $this->appSecret = $appSecret; } public function getSignPackage() { $jsapiTicket = $this->getJsApiTicket(); $url = "http://www.51ask.org/"; $timestamp = time(); $nonceStr = $this->createNonceStr(); // 这里参数的顺序要按照 key 值 ASCII 码升序排序 $string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr&timestamp=$timestamp&url=$url"; $signature = sha1($string); $signPackage = array( "appId" => $this->appId, "nonceStr" => $nonceStr, "timestamp" => $timestamp, "url" => $url, "signature" => $signature, "rawString" => $string ); return $signPackage; } private function createNonceStr($length = 16) { $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; $str = ""; for ($i = 0; $i < $length; $i++) { $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1); } return $str; } private function getJsApiTicket() { // jsapi_ticket 应该全局存储与更新,以下代码以写入到文件中做示例 $data = json_decode(file_get_contents("jsapi_ticket.json")); if ($data->expire_time < time()) { $accessToken = $this->getAccessToken(); $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken"; $res = json_decode($this->httpGet($url)); $ticket = $res->ticket; if ($ticket) { $data->expire_time = time() + 7000; $data->jsapi_ticket = $ticket; $fp = fopen("jsapi_ticket.json", "w"); fwrite($fp, json_encode($data)); fclose($fp); } } else { $ticket = $data->jsapi_ticket; } return $ticket; } private function getAccessToken() { // access_token 应该全局存储与更新,以下代码以写入到文件中做示例 $data = json_decode(file_get_contents("access_token.json")); if ($data->expire_time < time()) { $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appId&secret=$this->appSecret"; $res = json_decode($this->httpGet($url)); $access_token = $res->access_token; if ($access_token) { $data->expire_time = time() + 7000; $data->access_token = $access_token; $fp = fopen("access_token.json", "w"); fwrite($fp, json_encode($data)); fclose($fp); } } else { $access_token = $data->access_token; } return $access_token; } private function httpGet($url) { $curl = curl_init(); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_TIMEOUT, 500); curl_setopt($curl, CURLOPT_URL, $url); $res = curl_exec($curl); curl_close($curl); return $res; } } 收起阅读 »

原生php 实现微信授权登录

  不依赖任何框架,原生php 实现微信授权登录:   只需要两个文件:   index.phpweixin.class.php   index.php代码如下:   <?php session_start(); if($_SESSION['openid']){ exit('已经授权登录过了。。。'); } { include_once "weixin.class.php"; $wx_login = new Wxlogin(); $userinfo = $wx_login->getUserInfo(); if($userinfo['openid']){ $_SESSION['openid'] = $userinfo['openid']; var_dump($userinfo); } else { exit('授权失败'); } } weixin.clsss.php 代码如下(自行替换当中 app_id 和 app_key 和 授权回调地址):   <?php class Wxlogin{ //private $login_page_url = "https://open.weixin.qq.com/connect/qrconnect?";//微信登录界面 private $login_page_url = "https://open.weixin.qq.com/connect/oauth2/authorize?";//微信登录界面 private $get_accessToken_url = "https://api.weixin.qq.com/sns/oauth2/access_token?";//后去token的url //private $get_openId_url = 'https://graph.qq.com/oauth2.0/me';//获取openid的url private $get_user_info = "https://api.weixin.qq.com/sns/userinfo?";//获取用户信息的url private $app_id = ''; private $app_key = ''; public $redirect_url = ''; private $access_token; //QQ登录页面 private function get_wx_login_page() { $state = md5(rand(1,1000)); $query = [ 'appid' => $this->app_id, 'redirect_uri' => $this->redirect_url, 'response_type' => 'code', 'scope' => 'snsapi_userinfo', 'state' => $state, ]; $_SESSION['state'] = $state;//保存state验证 $url= $this->login_page_url.http_build_query($query).'#wechat_redirect'; header("Location:$url"); exit; } //获取access_token private function get_code() { //获取code @$code = $_GET['code']; if(!$code){ $this->get_wx_login_page(); } $state = $_GET['state']; /* if($state != $_SESSION['state']){ echo "state is wrong!"; exit; } */ $_SESSION['state'] = null; $query = [ 'grant_type' => 'authorization_code', 'code' => $code, 'secret' => $this->app_key, 'appid' => $this->app_id, ]; return $this->get_curl($this->get_accessToken_url, http_build_query($query)); } //获取token private function get_token_info() { //获取access_token /* { "access_token":"ACCESS_TOKEN", "expires_in":7200, "refresh_token":"REFRESH_TOKEN", "openid":"OPENID", "scope":"SCOPE" } */ $data = json_decode($this->get_code(),true); //参数组装数组 $this->access_token = $data["access_token"]; $array = array( 'access_token' => $data["access_token"], 'openid' => $data['openid'], ); return $this->get_curl($this->get_user_info, http_build_query($array)); } //获取openid&&获取用户信息 public function getUserInfo() { $data = $this->get_token_info(); $data = json_decode($data, true); $data['access_token'] = $this->access_token; return $data; } //curl GET请求 private function get_curl($url,$query) { $url_request = $url.$query; $curl = curl_init(); //设置抓取的url curl_setopt($curl, CURLOPT_URL, $url_request); //设置头文件的信息作为数据流输出 curl_setopt($curl, CURLOPT_HEADER, 0); //设置获取的信息以文件流的形式返回,而不是直接输出. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //执行命令 $data = curl_exec($curl); //关闭URL请求 curl_close($curl); return $data; } }   以上,有问题留言回复。。      
继续阅读 »
  不依赖任何框架,原生php 实现微信授权登录:   只需要两个文件:   index.phpweixin.class.php   index.php代码如下:   <?php session_start(); if($_SESSION['openid']){ exit('已经授权登录过了。。。'); } { include_once "weixin.class.php"; $wx_login = new Wxlogin(); $userinfo = $wx_login->getUserInfo(); if($userinfo['openid']){ $_SESSION['openid'] = $userinfo['openid']; var_dump($userinfo); } else { exit('授权失败'); } } weixin.clsss.php 代码如下(自行替换当中 app_id 和 app_key 和 授权回调地址):   <?php class Wxlogin{ //private $login_page_url = "https://open.weixin.qq.com/connect/qrconnect?";//微信登录界面 private $login_page_url = "https://open.weixin.qq.com/connect/oauth2/authorize?";//微信登录界面 private $get_accessToken_url = "https://api.weixin.qq.com/sns/oauth2/access_token?";//后去token的url //private $get_openId_url = 'https://graph.qq.com/oauth2.0/me';//获取openid的url private $get_user_info = "https://api.weixin.qq.com/sns/userinfo?";//获取用户信息的url private $app_id = ''; private $app_key = ''; public $redirect_url = ''; private $access_token; //QQ登录页面 private function get_wx_login_page() { $state = md5(rand(1,1000)); $query = [ 'appid' => $this->app_id, 'redirect_uri' => $this->redirect_url, 'response_type' => 'code', 'scope' => 'snsapi_userinfo', 'state' => $state, ]; $_SESSION['state'] = $state;//保存state验证 $url= $this->login_page_url.http_build_query($query).'#wechat_redirect'; header("Location:$url"); exit; } //获取access_token private function get_code() { //获取code @$code = $_GET['code']; if(!$code){ $this->get_wx_login_page(); } $state = $_GET['state']; /* if($state != $_SESSION['state']){ echo "state is wrong!"; exit; } */ $_SESSION['state'] = null; $query = [ 'grant_type' => 'authorization_code', 'code' => $code, 'secret' => $this->app_key, 'appid' => $this->app_id, ]; return $this->get_curl($this->get_accessToken_url, http_build_query($query)); } //获取token private function get_token_info() { //获取access_token /* { "access_token":"ACCESS_TOKEN", "expires_in":7200, "refresh_token":"REFRESH_TOKEN", "openid":"OPENID", "scope":"SCOPE" } */ $data = json_decode($this->get_code(),true); //参数组装数组 $this->access_token = $data["access_token"]; $array = array( 'access_token' => $data["access_token"], 'openid' => $data['openid'], ); return $this->get_curl($this->get_user_info, http_build_query($array)); } //获取openid&&获取用户信息 public function getUserInfo() { $data = $this->get_token_info(); $data = json_decode($data, true); $data['access_token'] = $this->access_token; return $data; } //curl GET请求 private function get_curl($url,$query) { $url_request = $url.$query; $curl = curl_init(); //设置抓取的url curl_setopt($curl, CURLOPT_URL, $url_request); //设置头文件的信息作为数据流输出 curl_setopt($curl, CURLOPT_HEADER, 0); //设置获取的信息以文件流的形式返回,而不是直接输出. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //执行命令 $data = curl_exec($curl); //关闭URL请求 curl_close($curl); return $data; } }   以上,有问题留言回复。。       收起阅读 »

php 合成图片(图片添加图片水印)

php
  效果图如下:   两张原图:     效果图如下:     附上源码:   <?php 原图为WechatIMG527.jpeg 水印图为logo.jpeg function watermark($filename,$water){ //获取背景图片的宽度和高度 list($b_w,$b_h) = getimagesize($filename); //获取水印图片的宽度和高度 list($w_w,$w_h) = getimagesize($water); //创建背景图片的资源 $back = imagecreatefromjpeg($filename); //创建水印图片的资源 $water = imagecreatefromjpeg($water); //使用imagecopy()函数将水印图片复制到背景图片指定的位置中 imagecopy($back, $water, $posX=331, $posY=42, 0, 0, $w_w, $w_h); //保存带有水印图片的背景图片 imagejpeg($back,$filename); imagedestroy($back); imagedestroy($water); } watermark("WechatIMG527.jpeg", "logo.jpeg"); ?>
继续阅读 »
  效果图如下:   两张原图:     效果图如下:     附上源码:   <?php 原图为WechatIMG527.jpeg 水印图为logo.jpeg function watermark($filename,$water){ //获取背景图片的宽度和高度 list($b_w,$b_h) = getimagesize($filename); //获取水印图片的宽度和高度 list($w_w,$w_h) = getimagesize($water); //创建背景图片的资源 $back = imagecreatefromjpeg($filename); //创建水印图片的资源 $water = imagecreatefromjpeg($water); //使用imagecopy()函数将水印图片复制到背景图片指定的位置中 imagecopy($back, $water, $posX=331, $posY=42, 0, 0, $w_w, $w_h); //保存带有水印图片的背景图片 imagejpeg($back,$filename); imagedestroy($back); imagedestroy($water); } watermark("WechatIMG527.jpeg", "logo.jpeg"); ?> 收起阅读 »

txt格式的sitemap转xml格式工具

  分析一个txt格式的sitemap转xml格式工具:   php 逐行读取txt   txt文件格式,每个url占一行。   如下图所示:     代码如下:   <?php $file = fopen("sitemap.txt", "r"); $fp = fopen('sitemap.xml', 'w'); $xml_str = '<?xml version="1.0" encoding="utf-8"?><urlset>'; $str = ''; while(! feof($file)) { //逐行读取txt中的url,拼接成xml的格式 $str .= '<url><loc>'.fgets($file).'</loc>'; $str .='<lastmod>'.date('Y-m-d',time()).'</lastmod>'; $str .='<changefreq>daily</changefreq>'; $str .='<priority>0.8</priority></url>'; } fclose($file); fwrite($fp, $xml_str.$str.'</urlset>'); fclose($fp); ?> 结果如下图所示:    
继续阅读 »
  分析一个txt格式的sitemap转xml格式工具:   php 逐行读取txt   txt文件格式,每个url占一行。   如下图所示:     代码如下:   <?php $file = fopen("sitemap.txt", "r"); $fp = fopen('sitemap.xml', 'w'); $xml_str = '<?xml version="1.0" encoding="utf-8"?><urlset>'; $str = ''; while(! feof($file)) { //逐行读取txt中的url,拼接成xml的格式 $str .= '<url><loc>'.fgets($file).'</loc>'; $str .='<lastmod>'.date('Y-m-d',time()).'</lastmod>'; $str .='<changefreq>daily</changefreq>'; $str .='<priority>0.8</priority></url>'; } fclose($file); fwrite($fp, $xml_str.$str.'</urlset>'); fclose($fp); ?> 结果如下图所示:     收起阅读 »

免费收录网站搜索引擎登录口大全

seo
  360搜索引擎登录入口:http://info.so.360.cn/site_submit.html 即刻搜索网站提交入口:http://zz.jike.com/submit/genUrlForm 盘古数据开放平台:http://open.panguso.com/data/resource/url/new 百度搜索网站登录口:http://www.baidu.com/search/url_submit.html 百度单个网页提交入口:http://zhanzhang.baidu.com/sitesubmit Google网站登录口:https://www.google.com/webmasters/tools/submit-url Google新闻网站内容:http://www.google.com/support/news_pub/bin/request.py?contact_type=suggest_content&hl=cn bing(必应)网页提交登录入口:http://www.bing.com/toolbox/submit-site-url 简搜搜索引擎登陆口:http://www.jianso.com/add_site.html 搜狗网站收录提交入口:http://www.sogou.com/feedback/urlfeedback.php SOSO搜搜网站收录提交入口:http://www.soso.com/help/usb/urlsubmit.shtml 雅虎中国网站登录口:http://sitemap.cn.yahoo.com/ 网易有道搜索引擎登录口:http://tellbot.youdao.com/report 中搜免费登录服务:http://register.zhongsou.com/NetSearch/frontEnd/free_protocol.htm MSN必应网站登录口:http://cn.bing.com/docs/submit.aspx?FORM=WSDD2 Alexa网站登录入口:http://www.alexa.com/help/webmasters TOM搜索网站登录口:http://search.tom.com/tools/weblog/log.php 铭万网B2B(必途)网址登陆口:http://search.b2b.cn/pageIncluded/AddPage.php 蚁搜搜索网站登录口:http://www.antso.com/apply.asp 快搜搜索网站登录口:http://www.kuaisou.com/main/inputweb.asp 汕头搜索登录口:http://www.stsou.com/join.asp 孙悟空搜索网站登录:http://www.swkong.com/add.php 天网网站登陆口:http://home.tianwang.com/denglu.htm 速搜全球登陆口:http://www.suso.com.cn/suso/link.asp 酷帝网站目录提交入口:http://www.coodir.com/accounts/addsite.asp 快搜网站登陆口:http://www.kuaisou.com/main/inputweb.asp 搜猫搜索引擎登录入口:http://test.somao123.com/search/url_submit.php 泽许搜索网站登录入口:http://www.zxyt.cn/guide/?m=adc4&Nsid=a3c6847db163587d&wver=t 一淘网开放搜索申请入口:http://open.etao.com/apply_intro.htm?spm=0.0.0.40.9VF4FQ >> 独立博客收录提交网址 百度博客提交: http://utility.baidu.com/blogsearch/submit.php 博客大全提交:http://lusongsong.com/daohang/login.asp Google博客提交:http://blogsearch.google.com/ping 雅虎中国博客提交:http://search.help.cn.yahoo.com/h4_4.html FeedSky提交博客: http://www.feedsky.com 搜狗(SoGou)博客提交:http://www.sogou.com/feedback/blogfeedback.php 有道(YoDao)博客提交:http://tellbot.yodao.com/ 必应 Bing博客提交:http://www.bing.com/toolbox/submit-site-url 搜搜博客提交:http://www.soso.com/help/usb/urlsubmit.shtml >> 英文搜索网站收录地址 Dmoz网站登录入口:http://www.dmoz.org/World/Chinese_Simplified NetSearch登陆口:http://intelseek.com/add_url_form.asp Freewebsubmission.com 搜索引擎批量提交:http://www.freewebsubmission.com/ 快速登录20个搜索引擎:http://www.trafficzap.com/searchsubmit.php HotBot登录口:http://www.hotbot.com/prefs_filters.asp?prov=Inktomifilter=web netscape登录口:http://about.netscape.com/ AddMe登陆口 :http://www.addme.com/submission/free-submission-start.php NetSearch登录口:http://www.netsearch.org/promo/submit.htm AddMe登录口:http://www.addme.com/s0new.htm Link it All登录口:http://www.that-special-gift.com/ffa/links.html Voyager登录口:http://www.voyagersearch.com/cgi-bin/q/search.cgi?NAVG=AddURL Gigablast登录口:http://www.gigablast.com/addurl Aeiwei登录口:http://www.aeiwi.com/submit.html Infotiger登录口:http://www.infotiger.com/addurl.html Nationaldirectory登录口:http://www.nationaldirectory.com/addurl/ WhatUseek登录口:http://www.whatuseek.com/addurl-secondary.shtml Exactseek登录口:http://www.exactseek.com/add.html Walhello登录口:http://www.walhello.com/addlinkgl.html Scrubtheweb登录口:http://www.scrubtheweb.com/addurl.html >> 网址导航站收录申请登陆口大全 hao123网址收录:http://submit.hao123.com/static/auditSys/wztj.htm 360网址导航收录入口:http://hao.360.cn/url.html 谷歌265上网导航网站提交:http://www.265.com/submit.html 百度网址导航提交入口:http://site.baidu.com/quality/quality_form.php 2345网址导航申请收录入口:http://www.2345.com/help/submitweb.htm 必应网址导航提交:https://feedback.discoverbing.com/default.aspx?locale=zh-CN&productkey=bingweb&scrx=1 搜狗网址导航收录入口:http://123.sogou.com/about/shoulu.html 博客大全申请收录入口:http://lusongsong.com/daohang/login.asp QQ导航网站收录申请规则:http://support.qq.com/cgi-bin/content_... 搜狗网址导航收录申请:http://123.sogou.com/shoulu.html 114啦网址收录:http://url.114la.com/ 金山网址导航收录申请:http://123.duba.net/apply/ 瑞星网址导航收录申请:http://hao.rising.cn/catalog/slsq.html 好看123网址导航收录申请:http://www.haokan123.com/urlsubmit/url_submit.html 466傲游网址导航申请收录网站:http://bbs.maxthon.cn/viewthread.php?tid=584498&extra= 1616网址导航收录:http://www.1616.net/jd/misc/coop.htm 淘网址(tao123)收录申请:http://krq.tao123.com/collectsite/ 0460网站之家收录:http://www.0460.com/member/login.aspx 赶驴啊网站收录提交入口:http://www.ganlva.com/url-submit/ hao123网站收录规则:http://www.hao123.cn/hezuo.htm 114网址导航收录申请:http://www.114.com.cn/index.php?view=websubmit 726网址收录口:http://www.726.com/url-submit/ 1166网址收录口:http://www.1166.com/tool/add.html 中商网址导航链接提交:http://www.cb114.cn/apps/about.html 7999网址收录口:http://7999.com/misc/coop.htm 369网址大全新站提交:http://wvw.369.com/us/url.htm 568网址导航网址提交:http://www.568.cc/abc/website-add.html 找军事网址提交:http://www.zhaojunshi.com/url-submit/ 19687网站大全网址提交:http://www.19687.com/apps/about.html#add 易看网址大全:http://www.ekan123.com/shoulu.htm 1181网址登陆:http://link.1181.com/adduser.asp 57616网址导航登陆:http://www.57616.com/apps/about.html#add Jia123网址网址提交:http://bbs.jia123.com/index.asp?boardid=2 >> 网站管理员工具大全(搜索引擎): Google网站管理员工具:http://www.google.com/webmasters/ 微软Bing管理员工具地址:http://www.bing.com/toolbox/webmaster/ 百度站长平台:http://zhanzhang.baidu.com/ 即刻搜索站长中心:http://zz.jike.com/ 360搜索站长平台:http://zhanzhang.so.com/ >> 开放平台注册应用大全: 搜搜论坛开放计划:http://open.soso.com/datacoop/bbs/submitbbs.html (仅适用于Discus,会带来大量外链) 百度数据开放平台:http://open.baidu.com/data/ 新浪微博开放平台:http://open.weibo.com/ 腾讯微博开放平台:http://dev.open.t.qq.com/ QQ互联:http://connect.qq.com/ 百度链接开放平台:http://dev.baidu.com/connect/ 人人网开放平台:http://dev.renren.com/ 网易微博开放平台:http://open.t.163.com/ 搜狐微博开放平台:http://open.t.sohu.com/ 淘宝开放平台:http://open.taobao.com 支付好开放平台:http://bizpartner.alipay.com/denglu/index.htm 豆瓣API key:http://www.douban.com/service/apikey/apply 天涯开放平台:http://open.tianya.cn/ Google站长开发者:https://www.google.com/accounts/ManageDomains 开心开放平台:http://open.kaixin001.com/ 天翼开放平台:http://open.189.cn/ 360应用开放平台:http://dev.app.360.cn/ 雅虎开放平台:https://developer.apps.yahoo.com/projects Twitter开放平台:https://dev.twitter.com/ Facebook开放平台:https://developers.facebook.com/ >> 向搜索引擎递交sitemap大全(网站地图): 腾讯搜搜:http://open.soso.com/sitemap/ 搜搜开放平台提供了提交sitemap的功能。 百度:http://sitemap.baidu.com/ 百度站长平台,期待很久了,可惜一直在内测中。暂时无法提交。 雅虎中国:http://sitemap.cn.yahoo.com/ 雅虎中国的站长工具很早就提供了提交sitemap的功能,还支持rss。 Google:https://www.google.com/webmasters/tools/ 可谓最强大的网站管理员工具,提交sitemap当然是最基本的。 Yandex:http://webmaster.yandex.com/ Yandex是俄罗斯最大的搜索引擎,相对于俄罗斯的百度。管理员工具提供了类似Google Webmaster的功能,非常强大。 Bing:http://www.bing.com/toolbox/webmaster/ 微软的强力产品,在美国市场占有一定搜索份额。管理员工具功能也很强大。 Yahoo!:https://siteexplorer.search.yahoo.com/ 雅虎英文站,因为同微软的bing合作关系,提交sitemap后提示已经提交给了微软。 Ask:http://submissions.ask.com/ping?sitemap=http://www.YourWebSite.com/sitemap.xml 修改红色部分的url为自己的sitemap地址,直接在浏览器提交。 最后,在robots.txt文件中添加sitemap,搜索引擎抓取robots.txt的时候就可以获取sitemap。方法非常简单,只要在robots.txt的第一行或者最后一行按以下格式加入sitemap地址即可。 Sitemap: http://www.example.com/sitemap.xml 网站被K申诉通道 百度网页申诉:http://zhanzhang.baidu.com/feedback 腾讯QQ电脑管家网站申诉:http://guanjia.qq.com/complaint.html Google网站申诉:http://www.google.com/webmasters/ 雅虎网站申诉:http://help.cn.yahoo.com/feedback.html?product=onesearch&source=1W5 知道创宇(Scanv)安全联盟申诉通道:http://www.scanv.com/seccenter/appeal/?domain= 360网盾申诉:http://wd.360.cn/appeal/appeal.html 金山云安全网站申诉:http://fish.ijinshan.com/Kws/appeal (注:搜狗浏览器遇到拦截,也可在金山申诉) 瑞星卡卡网站申诉:http://tool.ikaka.com/ssinfo.asp  
继续阅读 »
  360搜索引擎登录入口:http://info.so.360.cn/site_submit.html 即刻搜索网站提交入口:http://zz.jike.com/submit/genUrlForm 盘古数据开放平台:http://open.panguso.com/data/resource/url/new 百度搜索网站登录口:http://www.baidu.com/search/url_submit.html 百度单个网页提交入口:http://zhanzhang.baidu.com/sitesubmit Google网站登录口:https://www.google.com/webmasters/tools/submit-url Google新闻网站内容:http://www.google.com/support/news_pub/bin/request.py?contact_type=suggest_content&hl=cn bing(必应)网页提交登录入口:http://www.bing.com/toolbox/submit-site-url 简搜搜索引擎登陆口:http://www.jianso.com/add_site.html 搜狗网站收录提交入口:http://www.sogou.com/feedback/urlfeedback.php SOSO搜搜网站收录提交入口:http://www.soso.com/help/usb/urlsubmit.shtml 雅虎中国网站登录口:http://sitemap.cn.yahoo.com/ 网易有道搜索引擎登录口:http://tellbot.youdao.com/report 中搜免费登录服务:http://register.zhongsou.com/NetSearch/frontEnd/free_protocol.htm MSN必应网站登录口:http://cn.bing.com/docs/submit.aspx?FORM=WSDD2 Alexa网站登录入口:http://www.alexa.com/help/webmasters TOM搜索网站登录口:http://search.tom.com/tools/weblog/log.php 铭万网B2B(必途)网址登陆口:http://search.b2b.cn/pageIncluded/AddPage.php 蚁搜搜索网站登录口:http://www.antso.com/apply.asp 快搜搜索网站登录口:http://www.kuaisou.com/main/inputweb.asp 汕头搜索登录口:http://www.stsou.com/join.asp 孙悟空搜索网站登录:http://www.swkong.com/add.php 天网网站登陆口:http://home.tianwang.com/denglu.htm 速搜全球登陆口:http://www.suso.com.cn/suso/link.asp 酷帝网站目录提交入口:http://www.coodir.com/accounts/addsite.asp 快搜网站登陆口:http://www.kuaisou.com/main/inputweb.asp 搜猫搜索引擎登录入口:http://test.somao123.com/search/url_submit.php 泽许搜索网站登录入口:http://www.zxyt.cn/guide/?m=adc4&Nsid=a3c6847db163587d&wver=t 一淘网开放搜索申请入口:http://open.etao.com/apply_intro.htm?spm=0.0.0.40.9VF4FQ >> 独立博客收录提交网址 百度博客提交: http://utility.baidu.com/blogsearch/submit.php 博客大全提交:http://lusongsong.com/daohang/login.asp Google博客提交:http://blogsearch.google.com/ping 雅虎中国博客提交:http://search.help.cn.yahoo.com/h4_4.html FeedSky提交博客: http://www.feedsky.com 搜狗(SoGou)博客提交:http://www.sogou.com/feedback/blogfeedback.php 有道(YoDao)博客提交:http://tellbot.yodao.com/ 必应 Bing博客提交:http://www.bing.com/toolbox/submit-site-url 搜搜博客提交:http://www.soso.com/help/usb/urlsubmit.shtml >> 英文搜索网站收录地址 Dmoz网站登录入口:http://www.dmoz.org/World/Chinese_Simplified NetSearch登陆口:http://intelseek.com/add_url_form.asp Freewebsubmission.com 搜索引擎批量提交:http://www.freewebsubmission.com/ 快速登录20个搜索引擎:http://www.trafficzap.com/searchsubmit.php HotBot登录口:http://www.hotbot.com/prefs_filters.asp?prov=Inktomifilter=web netscape登录口:http://about.netscape.com/ AddMe登陆口 :http://www.addme.com/submission/free-submission-start.php NetSearch登录口:http://www.netsearch.org/promo/submit.htm AddMe登录口:http://www.addme.com/s0new.htm Link it All登录口:http://www.that-special-gift.com/ffa/links.html Voyager登录口:http://www.voyagersearch.com/cgi-bin/q/search.cgi?NAVG=AddURL Gigablast登录口:http://www.gigablast.com/addurl Aeiwei登录口:http://www.aeiwi.com/submit.html Infotiger登录口:http://www.infotiger.com/addurl.html Nationaldirectory登录口:http://www.nationaldirectory.com/addurl/ WhatUseek登录口:http://www.whatuseek.com/addurl-secondary.shtml Exactseek登录口:http://www.exactseek.com/add.html Walhello登录口:http://www.walhello.com/addlinkgl.html Scrubtheweb登录口:http://www.scrubtheweb.com/addurl.html >> 网址导航站收录申请登陆口大全 hao123网址收录:http://submit.hao123.com/static/auditSys/wztj.htm 360网址导航收录入口:http://hao.360.cn/url.html 谷歌265上网导航网站提交:http://www.265.com/submit.html 百度网址导航提交入口:http://site.baidu.com/quality/quality_form.php 2345网址导航申请收录入口:http://www.2345.com/help/submitweb.htm 必应网址导航提交:https://feedback.discoverbing.com/default.aspx?locale=zh-CN&productkey=bingweb&scrx=1 搜狗网址导航收录入口:http://123.sogou.com/about/shoulu.html 博客大全申请收录入口:http://lusongsong.com/daohang/login.asp QQ导航网站收录申请规则:http://support.qq.com/cgi-bin/content_... 搜狗网址导航收录申请:http://123.sogou.com/shoulu.html 114啦网址收录:http://url.114la.com/ 金山网址导航收录申请:http://123.duba.net/apply/ 瑞星网址导航收录申请:http://hao.rising.cn/catalog/slsq.html 好看123网址导航收录申请:http://www.haokan123.com/urlsubmit/url_submit.html 466傲游网址导航申请收录网站:http://bbs.maxthon.cn/viewthread.php?tid=584498&extra= 1616网址导航收录:http://www.1616.net/jd/misc/coop.htm 淘网址(tao123)收录申请:http://krq.tao123.com/collectsite/ 0460网站之家收录:http://www.0460.com/member/login.aspx 赶驴啊网站收录提交入口:http://www.ganlva.com/url-submit/ hao123网站收录规则:http://www.hao123.cn/hezuo.htm 114网址导航收录申请:http://www.114.com.cn/index.php?view=websubmit 726网址收录口:http://www.726.com/url-submit/ 1166网址收录口:http://www.1166.com/tool/add.html 中商网址导航链接提交:http://www.cb114.cn/apps/about.html 7999网址收录口:http://7999.com/misc/coop.htm 369网址大全新站提交:http://wvw.369.com/us/url.htm 568网址导航网址提交:http://www.568.cc/abc/website-add.html 找军事网址提交:http://www.zhaojunshi.com/url-submit/ 19687网站大全网址提交:http://www.19687.com/apps/about.html#add 易看网址大全:http://www.ekan123.com/shoulu.htm 1181网址登陆:http://link.1181.com/adduser.asp 57616网址导航登陆:http://www.57616.com/apps/about.html#add Jia123网址网址提交:http://bbs.jia123.com/index.asp?boardid=2 >> 网站管理员工具大全(搜索引擎): Google网站管理员工具:http://www.google.com/webmasters/ 微软Bing管理员工具地址:http://www.bing.com/toolbox/webmaster/ 百度站长平台:http://zhanzhang.baidu.com/ 即刻搜索站长中心:http://zz.jike.com/ 360搜索站长平台:http://zhanzhang.so.com/ >> 开放平台注册应用大全: 搜搜论坛开放计划:http://open.soso.com/datacoop/bbs/submitbbs.html (仅适用于Discus,会带来大量外链) 百度数据开放平台:http://open.baidu.com/data/ 新浪微博开放平台:http://open.weibo.com/ 腾讯微博开放平台:http://dev.open.t.qq.com/ QQ互联:http://connect.qq.com/ 百度链接开放平台:http://dev.baidu.com/connect/ 人人网开放平台:http://dev.renren.com/ 网易微博开放平台:http://open.t.163.com/ 搜狐微博开放平台:http://open.t.sohu.com/ 淘宝开放平台:http://open.taobao.com 支付好开放平台:http://bizpartner.alipay.com/denglu/index.htm 豆瓣API key:http://www.douban.com/service/apikey/apply 天涯开放平台:http://open.tianya.cn/ Google站长开发者:https://www.google.com/accounts/ManageDomains 开心开放平台:http://open.kaixin001.com/ 天翼开放平台:http://open.189.cn/ 360应用开放平台:http://dev.app.360.cn/ 雅虎开放平台:https://developer.apps.yahoo.com/projects Twitter开放平台:https://dev.twitter.com/ Facebook开放平台:https://developers.facebook.com/ >> 向搜索引擎递交sitemap大全(网站地图): 腾讯搜搜:http://open.soso.com/sitemap/ 搜搜开放平台提供了提交sitemap的功能。 百度:http://sitemap.baidu.com/ 百度站长平台,期待很久了,可惜一直在内测中。暂时无法提交。 雅虎中国:http://sitemap.cn.yahoo.com/ 雅虎中国的站长工具很早就提供了提交sitemap的功能,还支持rss。 Google:https://www.google.com/webmasters/tools/ 可谓最强大的网站管理员工具,提交sitemap当然是最基本的。 Yandex:http://webmaster.yandex.com/ Yandex是俄罗斯最大的搜索引擎,相对于俄罗斯的百度。管理员工具提供了类似Google Webmaster的功能,非常强大。 Bing:http://www.bing.com/toolbox/webmaster/ 微软的强力产品,在美国市场占有一定搜索份额。管理员工具功能也很强大。 Yahoo!:https://siteexplorer.search.yahoo.com/ 雅虎英文站,因为同微软的bing合作关系,提交sitemap后提示已经提交给了微软。 Ask:http://submissions.ask.com/ping?sitemap=http://www.YourWebSite.com/sitemap.xml 修改红色部分的url为自己的sitemap地址,直接在浏览器提交。 最后,在robots.txt文件中添加sitemap,搜索引擎抓取robots.txt的时候就可以获取sitemap。方法非常简单,只要在robots.txt的第一行或者最后一行按以下格式加入sitemap地址即可。 Sitemap: http://www.example.com/sitemap.xml 网站被K申诉通道 百度网页申诉:http://zhanzhang.baidu.com/feedback 腾讯QQ电脑管家网站申诉:http://guanjia.qq.com/complaint.html Google网站申诉:http://www.google.com/webmasters/ 雅虎网站申诉:http://help.cn.yahoo.com/feedback.html?product=onesearch&source=1W5 知道创宇(Scanv)安全联盟申诉通道:http://www.scanv.com/seccenter/appeal/?domain= 360网盾申诉:http://wd.360.cn/appeal/appeal.html 金山云安全网站申诉:http://fish.ijinshan.com/Kws/appeal (注:搜狗浏览器遇到拦截,也可在金山申诉) 瑞星卡卡网站申诉:http://tool.ikaka.com/ssinfo.asp   收起阅读 »

解决phpcms 生成相关栏目列表、只生成前5页

  本文解决 解决phpcms 生成相关栏目列表、只生成前5页:   修改:phpcms/modules/content/classes/html.class.php 中 create_relation_html 方法:   修改后代码如下:/** * 生成相关栏目列表、根据catid pagesize算出最多生成N页 * @param $modelid 模型ID */ public function create_relation_html($catid,$modelid=1) { $this->content_db = pc_base::load_model('content_model'); $this->content_db->set_model($modelid); $pagesize = 20; //填写自己list页面的pagesize $number = $this->content_db->count(array('catid'=>$catid)); $number = ceil($number/$pagesize)+1; for($page = 1; $page < $number; $page++) { $this->category($catid,$page); } //检查当前栏目的父栏目,如果存在则生成 $arrparentid = $this->categorys[$catid]['arrparentid']; if($arrparentid) { $arrparentid = explode(',', $arrparentid); foreach ($arrparentid as $catid) { if($catid) $this->category($catid,1); } } }  在调用的时候传入相对应的参数。    
继续阅读 »
  本文解决 解决phpcms 生成相关栏目列表、只生成前5页:   修改:phpcms/modules/content/classes/html.class.php 中 create_relation_html 方法:   修改后代码如下:/** * 生成相关栏目列表、根据catid pagesize算出最多生成N页 * @param $modelid 模型ID */ public function create_relation_html($catid,$modelid=1) { $this->content_db = pc_base::load_model('content_model'); $this->content_db->set_model($modelid); $pagesize = 20; //填写自己list页面的pagesize $number = $this->content_db->count(array('catid'=>$catid)); $number = ceil($number/$pagesize)+1; for($page = 1; $page < $number; $page++) { $this->category($catid,$page); } //检查当前栏目的父栏目,如果存在则生成 $arrparentid = $this->categorys[$catid]['arrparentid']; if($arrparentid) { $arrparentid = explode(',', $arrparentid); foreach ($arrparentid as $catid) { if($catid) $this->category($catid,1); } } }  在调用的时候传入相对应的参数。     收起阅读 »

js 判断手机,pc 实现pc 手机端跳转

JS
  js 判断手机,pc 实现pc 手机端跳转:  前提:手机站和PC站URL一一对应:   http://www.fllo.cn/ -> http://www.fllo.cn/ http://www.fllo.cn/society/201708/2377.html -> http://m.fllo.cn/society/201708/2377.html 判断js代码如下(手机站中添加):   (function(){ var locatHref = location.href; if(IsPC() == true){ location.href = locatHref.replace('m.fllo.cn', 'www.fllo.cn'); } })(); function IsPC() { var userAgentInfo = navigator.userAgent; var Agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"]; var flag = true; for (var v = 0; v < Agents.length; v++) { if (userAgentInfo.indexOf(Agents[v]) > 0) { flag = false; break; } } return flag; } PC站中添加:   (function(){ var locatHref = location.href; if(IsPC() == false){ location.href = locatHref.replace('www.fllo.cn', 'm.fllo.cn'); } })(); function IsPC() { var userAgentInfo = navigator.userAgent; var Agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"]; var flag = true; for (var v = 0; v < Agents.length; v++) { if (userAgentInfo.indexOf(Agents[v]) > 0) { flag = false; break; } } return flag; } 演示效果见:   http://www.fllo.cn/   http://m.fllo.cn/
继续阅读 »
  js 判断手机,pc 实现pc 手机端跳转:  前提:手机站和PC站URL一一对应:   http://www.fllo.cn/ -> http://www.fllo.cn/ http://www.fllo.cn/society/201708/2377.html -> http://m.fllo.cn/society/201708/2377.html 判断js代码如下(手机站中添加):   (function(){ var locatHref = location.href; if(IsPC() == true){ location.href = locatHref.replace('m.fllo.cn', 'www.fllo.cn'); } })(); function IsPC() { var userAgentInfo = navigator.userAgent; var Agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"]; var flag = true; for (var v = 0; v < Agents.length; v++) { if (userAgentInfo.indexOf(Agents[v]) > 0) { flag = false; break; } } return flag; } PC站中添加:   (function(){ var locatHref = location.href; if(IsPC() == false){ location.href = locatHref.replace('www.fllo.cn', 'm.fllo.cn'); } })(); function IsPC() { var userAgentInfo = navigator.userAgent; var Agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"]; var flag = true; for (var v = 0; v < Agents.length; v++) { if (userAgentInfo.indexOf(Agents[v]) > 0) { flag = false; break; } } return flag; } 演示效果见:   http://www.fllo.cn/   http://m.fllo.cn/ 收起阅读 »

如何评价 暴风影音 “杀程序员祭天”?

  暴风影音在  5.2.6 版本更新中:   版本 5.2.6 中的新功能 支持几乎所有本地视频格式,聚合全网在线视频! 修复了闪退的bug,还杀了一个程序员祭天 1、长短视频详情页进行了改版,显示为信息流样式; 2、优化了搜索页面, 3、手势拖动快进功能优化     已在 12377 中举报。        
继续阅读 »
  暴风影音在  5.2.6 版本更新中:   版本 5.2.6 中的新功能 支持几乎所有本地视频格式,聚合全网在线视频! 修复了闪退的bug,还杀了一个程序员祭天 1、长短视频详情页进行了改版,显示为信息流样式; 2、优化了搜索页面, 3、手势拖动快进功能优化     已在 12377 中举报。         收起阅读 »

navicat 查询数据出现 lost connection to server during query

  navicat 查询数据出现 lost connection to server during query:   网上得出的结论都是修改mysql的配置:  net_write_timeout wait_timeout max_allowed_packet 而我发现我的这些数值本来就很大,所以说应该不是这个问题。   通过查阅 navicat 官网文档发现问题所在:   If you receive Lost connection to server during query error when running long query, please try: Control-click your connection and choose Connection Properties/Edit Connection.Under Advanced tab, set the Socket Timeout (sec) to a larger value.     上面的大致意思是,编辑连接属性将 套接字超时(秒)改为一个更大的值。   默认是30,我将它改为300,再执行查询语句,就没有问题了。   传送门:http://wiki.navicat.com/wiki/index.php/Lost_connection_to_server_during_query
继续阅读 »
  navicat 查询数据出现 lost connection to server during query:   网上得出的结论都是修改mysql的配置:  net_write_timeout wait_timeout max_allowed_packet 而我发现我的这些数值本来就很大,所以说应该不是这个问题。   通过查阅 navicat 官网文档发现问题所在:   If you receive Lost connection to server during query error when running long query, please try: Control-click your connection and choose Connection Properties/Edit Connection.Under Advanced tab, set the Socket Timeout (sec) to a larger value.     上面的大致意思是,编辑连接属性将 套接字超时(秒)改为一个更大的值。   默认是30,我将它改为300,再执行查询语句,就没有问题了。   传送门:http://wiki.navicat.com/wiki/index.php/Lost_connection_to_server_during_query 收起阅读 »

php fopen 写入文件 换行 demo

php
  php 使用 fopen 系列函数操作(写入)文件,实例:   代码如下:   $fp = fopen('./write.txt', 'w'); //打开文件 fwrite($fp, $content"\n"); //写入内容"\n"换行 fclose($fp); //关闭资源
继续阅读 »
  php 使用 fopen 系列函数操作(写入)文件,实例:   代码如下:   $fp = fopen('./write.txt', 'w'); //打开文件 fwrite($fp, $content"\n"); //写入内容"\n"换行 fclose($fp); //关闭资源 收起阅读 »

Linux 查看哪些进程占用的CPU内存资源最多

  linux下获取占用CPU资源最多的10个进程,可以使用如下命令组合:   ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head linux下获取占用内存资源最多的10个进程,可以使用如下命令组合:   ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head  
继续阅读 »
  linux下获取占用CPU资源最多的10个进程,可以使用如下命令组合:   ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head linux下获取占用内存资源最多的10个进程,可以使用如下命令组合:   ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head   收起阅读 »

Creating default object from empty value

php
  PHP 报错:   Creating default object from empty value 原因:   对象未声明。   解决办法:   声明一个空对象:   声明空对象: $empty_object=(object)array(); 或者 $empty_object=(object)null; 把数组转换为对象: $arr=array(‘a’,’b’); $empty_object=(object)$arr;
继续阅读 »
  PHP 报错:   Creating default object from empty value 原因:   对象未声明。   解决办法:   声明一个空对象:   声明空对象: $empty_object=(object)array(); 或者 $empty_object=(object)null; 把数组转换为对象: $arr=array(‘a’,’b’); $empty_object=(object)$arr; 收起阅读 »

js 识别人脸

JS
  发布一个纯js实现的应用:   功能: 识别人脸一键换脸趣味贴图颜值测试滤镜效果色彩调整   人脸识别效果(上传卡通图片,点击换脸提示为发现人脸):     趣味贴图(简易版美图秀秀功能):   演示地址:   js 人脸识别
继续阅读 »
  发布一个纯js实现的应用:   功能: 识别人脸一键换脸趣味贴图颜值测试滤镜效果色彩调整   人脸识别效果(上传卡通图片,点击换脸提示为发现人脸):     趣味贴图(简易版美图秀秀功能):   演示地址:   js 人脸识别 收起阅读 »

linux 删除 IDE workspace.xml

  网站安全扫描提示:   JetBrains IDE workspace.xml文件泄露   危害:   通过下载workspace.xml,可直接获取整个工程的目录结构,发现敏感文件,为渗透中收集信息、发现漏洞提供了极大的便利。   解决办法:   删除服务器上面的workspace.xml文件:   find ./ -type d -name ".idea"|xargs rm -rf 相关参考:   Nginx 禁止访问.svn和git的meta文件   linux下批量删除.svn目录的shell脚本   apache下禁止 .svn 被访问  
继续阅读 »
  网站安全扫描提示:   JetBrains IDE workspace.xml文件泄露   危害:   通过下载workspace.xml,可直接获取整个工程的目录结构,发现敏感文件,为渗透中收集信息、发现漏洞提供了极大的便利。   解决办法:   删除服务器上面的workspace.xml文件:   find ./ -type d -name ".idea"|xargs rm -rf 相关参考:   Nginx 禁止访问.svn和git的meta文件   linux下批量删除.svn目录的shell脚本   apache下禁止 .svn 被访问   收起阅读 »

解决PHP curl https时error 77(Problem with reading the SSL CA cert (path? access rights?))

  问题:   服务器环境为:CentOS,php-fpm,使用curl一个https站时失败,打开curl_error,捕获错误:Problem with reading the SSL CA cert (path? access rights?)   解决方案:   sudo yum install ca-certificates重启php-fpm,这步比较重要,更改底层的东西时一定要重启一下curl时设置:curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0)  
继续阅读 »
  问题:   服务器环境为:CentOS,php-fpm,使用curl一个https站时失败,打开curl_error,捕获错误:Problem with reading the SSL CA cert (path? access rights?)   解决方案:   sudo yum install ca-certificates重启php-fpm,这步比较重要,更改底层的东西时一定要重启一下curl时设置:curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0)   收起阅读 »

linux 下图片压缩shell脚本

  需要扩展库:imagemagick convert   功能:   # 查找目录及子目录的图片文件(jpg),将大于maxSize的图片进行压缩处理。 #-fuzz 12% 设置压缩比,经测试12%正好,fuzz值越大压缩比越大。   脚本如下:   #!/bin/bash # 查找目录及子目录的图片文件(jpg,gif,png),将大于某值的图片进行压缩处理 # Config #folderPath='/data/webdata/upload/'$(date +%Y/%m/%d) # 图片目录路径 maxSize='300k' # 图片尺寸允许值 maxWidth=1280 # 图片最大宽度 maxHeight=1280 # 图片最大高度 quality=85 # 图片质量 # 压缩处理 # Param $folderPath 图片目录 function compress(){ folderPath=$1 if [ -d "$folderPath" ]; then for file in $(find "$folderPath" \( -name "*.jpg" \) -type f -size +"$maxSize" ); do echo $file # 调用imagemagick resize图片 #convert {} -fuzz 12% -layers Optimize {}.gif -exec #$(convert -resize "$maxWidth"x"$maxHeight" "$file" -quality "$quality" -colorspace sRGB "$file") $(convert "$file" -fuzz 12% -layers Optimize "$file".'gif') $(rm -rf "$file") $(mv "$file".'gif' "$file") done else echo "$folderPath not exists" fi } # 执行compress compress "$folderPath" exit 0 配合定时任务,实现每日定时压缩网站上传的图片:   crontab -e 30 23 * * * /root/img.sh #每天23:30执行压缩图片shell
继续阅读 »
  需要扩展库:imagemagick convert   功能:   # 查找目录及子目录的图片文件(jpg),将大于maxSize的图片进行压缩处理。 #-fuzz 12% 设置压缩比,经测试12%正好,fuzz值越大压缩比越大。   脚本如下:   #!/bin/bash # 查找目录及子目录的图片文件(jpg,gif,png),将大于某值的图片进行压缩处理 # Config #folderPath='/data/webdata/upload/'$(date +%Y/%m/%d) # 图片目录路径 maxSize='300k' # 图片尺寸允许值 maxWidth=1280 # 图片最大宽度 maxHeight=1280 # 图片最大高度 quality=85 # 图片质量 # 压缩处理 # Param $folderPath 图片目录 function compress(){ folderPath=$1 if [ -d "$folderPath" ]; then for file in $(find "$folderPath" \( -name "*.jpg" \) -type f -size +"$maxSize" ); do echo $file # 调用imagemagick resize图片 #convert {} -fuzz 12% -layers Optimize {}.gif -exec #$(convert -resize "$maxWidth"x"$maxHeight" "$file" -quality "$quality" -colorspace sRGB "$file") $(convert "$file" -fuzz 12% -layers Optimize "$file".'gif') $(rm -rf "$file") $(mv "$file".'gif' "$file") done else echo "$folderPath not exists" fi } # 执行compress compress "$folderPath" exit 0 配合定时任务,实现每日定时压缩网站上传的图片:   crontab -e 30 23 * * * /root/img.sh #每天23:30执行压缩图片shell 收起阅读 »

删除win10历史账户头像

  win10账户头像设置:   开始菜单->选中账户头像->右键->更改账户设置   清除自定义的win10账户头像   清除win10历史账户头像。清除办法如下: 在地址栏中输入   %appdata%\Microsoft\Windows\AccountPictures   最终会进入:   C:\Users\noco\AppData\Roaming\Microsoft\Windows\AccountPictures   删除不需要的头像。        
继续阅读 »
  win10账户头像设置:   开始菜单->选中账户头像->右键->更改账户设置   清除自定义的win10账户头像   清除win10历史账户头像。清除办法如下: 在地址栏中输入   %appdata%\Microsoft\Windows\AccountPictures   最终会进入:   C:\Users\noco\AppData\Roaming\Microsoft\Windows\AccountPictures   删除不需要的头像。         收起阅读 »

PHP 高并发秒杀解决方案(有demo)

  本文提供 PHP 高并发秒杀解决方案(附加三个案例说明(普通流程,使用文件锁,使用redis消息队列)):   1:(正常流程,不做任何高并发处理),代码如下:  <?php $_mysqli = new mysqli('localhost','root','','secondkill'); if (mysqli_connect_errno()) { echo mysqli_connect_error(); exit(); } $_mysqli->set_charset('utf8'); $_sql = "select stock from goods where id=1"; $_result = $_mysqli->query($_sql); $_assoc = $_result->fetch_assoc(); if($_assoc['stock']>0){ $_sql = "UPDATE goods SET stock=stock-1 WHERE id=1"; $_mysqli->query($_sql); } $_mysqli->close(); ?> 1:(使用文件锁),代码如下:  <?php $_mysqli = new mysqli('localhost','root','','secondkill'); if (mysqli_connect_errno()) { echo mysqli_connect_error(); exit(); } $_mysqli->set_charset('utf8'); $_sql = "select stock from goods where id=2"; $_result = $_mysqli->query($_sql); $_assoc = $_result->fetch_assoc(); $fp = fopen("lock.txt", "w+"); if(!flock($fp,LOCK_EX | LOCK_NB)){ echo "系统繁忙,请稍后再试"; return; } if($_assoc['stock']>0){ $_sql = "UPDATE goods SET stock=stock-1 WHERE id=2"; if($_mysqli->query($_sql)){ flock($fp,LOCK_UN);//释放锁 } } fclose($fp); $_mysqli->close(); ?> 3:使用redis 消息队列,代码如下:  <?php $redis=new Redis(); $result=$redis->connect('127.0.0.1',6379); $_mysqli = new mysqli('localhost','root','','secondkill'); if (mysqli_connect_errno()) { echo mysqli_connect_error(); exit(); } $_mysqli->set_charset('utf8'); /* for($i=1;$i<=100;$i++){ $redis->lpush('goods_nums',$i); //秒杀开始前,先将库存数量存在队列,配合定时任务,暂定库存为100 } echo $redis->llen('goods_nums'); exit(); */ $check = $redis->lpop('goods_nums'); //echo $check; if($check){ echo "秒杀成功"; $_sql = "UPDATE goods SET stock=stock-1 WHERE id=3"; $_mysqli->query($_sql); return; } else { echo "秒杀失败"; } ?> 测试办法:(使用apache ab 测试工具模拟并发):  ./ab -n 6000 -c 5000 http://localhost/index.php //普通 ./ab -n 6000 -c 5000 http://localhost/file.php //文件锁 ./ab -n 6000 -c 5000 http://localhost/redis.php //redis消息队列 反复测试,得出结果如下:   id     stock 1    -2 2    0 3    0     PS: id 1   普通流程 id 2  使用文件锁 id 3  使用redis消息队列 最后附上表结构 sql:    
继续阅读 »
  本文提供 PHP 高并发秒杀解决方案(附加三个案例说明(普通流程,使用文件锁,使用redis消息队列)):   1:(正常流程,不做任何高并发处理),代码如下:  <?php $_mysqli = new mysqli('localhost','root','','secondkill'); if (mysqli_connect_errno()) { echo mysqli_connect_error(); exit(); } $_mysqli->set_charset('utf8'); $_sql = "select stock from goods where id=1"; $_result = $_mysqli->query($_sql); $_assoc = $_result->fetch_assoc(); if($_assoc['stock']>0){ $_sql = "UPDATE goods SET stock=stock-1 WHERE id=1"; $_mysqli->query($_sql); } $_mysqli->close(); ?> 1:(使用文件锁),代码如下:  <?php $_mysqli = new mysqli('localhost','root','','secondkill'); if (mysqli_connect_errno()) { echo mysqli_connect_error(); exit(); } $_mysqli->set_charset('utf8'); $_sql = "select stock from goods where id=2"; $_result = $_mysqli->query($_sql); $_assoc = $_result->fetch_assoc(); $fp = fopen("lock.txt", "w+"); if(!flock($fp,LOCK_EX | LOCK_NB)){ echo "系统繁忙,请稍后再试"; return; } if($_assoc['stock']>0){ $_sql = "UPDATE goods SET stock=stock-1 WHERE id=2"; if($_mysqli->query($_sql)){ flock($fp,LOCK_UN);//释放锁 } } fclose($fp); $_mysqli->close(); ?> 3:使用redis 消息队列,代码如下:  <?php $redis=new Redis(); $result=$redis->connect('127.0.0.1',6379); $_mysqli = new mysqli('localhost','root','','secondkill'); if (mysqli_connect_errno()) { echo mysqli_connect_error(); exit(); } $_mysqli->set_charset('utf8'); /* for($i=1;$i<=100;$i++){ $redis->lpush('goods_nums',$i); //秒杀开始前,先将库存数量存在队列,配合定时任务,暂定库存为100 } echo $redis->llen('goods_nums'); exit(); */ $check = $redis->lpop('goods_nums'); //echo $check; if($check){ echo "秒杀成功"; $_sql = "UPDATE goods SET stock=stock-1 WHERE id=3"; $_mysqli->query($_sql); return; } else { echo "秒杀失败"; } ?> 测试办法:(使用apache ab 测试工具模拟并发):  ./ab -n 6000 -c 5000 http://localhost/index.php //普通 ./ab -n 6000 -c 5000 http://localhost/file.php //文件锁 ./ab -n 6000 -c 5000 http://localhost/redis.php //redis消息队列 反复测试,得出结果如下:   id     stock 1    -2 2    0 3    0     PS: id 1   普通流程 id 2  使用文件锁 id 3  使用redis消息队列 最后附上表结构 sql:     收起阅读 »