PHP/MYSQL/SHELL

<?php
function password_strength($password){
  $strength = 0;
  
  // 小写字母
  if(preg_match("/([a-z]+)/", $password)) $strength++;
  
  // 大写字母
  if(preg_match("/([A-Z]+)/", $password))  $strength++;
  
  // 数字
  if(preg_match("/([0-9]+)/", $password))  $strength++;
  
  // 非任意(文字和数字)字母和下滑线的字符
  if(preg_match("/(\W+)/", $password))  $strength++;
  
  // 密码的长度
  if (strlen($password) < 7) $strength--;
  else $strength++;

  switch($strength) {
    case 0:
    case 1:
      $text = '密码强度太弱';
      break;
    case 2:
      $text = '密码强度弱';
      break;
    case 3:
      $text = '密码强度高';
      break;
    case 4:
    case 5:
      $text = '密码强度很高';
      break;
  }
  
  return $text;
}

echo password_strength('123aZ456*'); //密码强度很高
?>
简单的笔记一下
select id,tags,(if(locate('人类',tags),2,0)+if(locate('暴力',tags),2,0)+if(locate('美学',tags),2,0)+if(locate('生物学',tags),2,0)+if(locate('机关枪',tags),2,0)) as zh from details order by zh desc
引用
官方给出的参考解决方法应该是首选检查的:
1、UCenter 应用 ID 需要和 UCenter 后台的 ID 一致;
2、UCenter 通信密钥需要和 UCenter 后台的通信密钥一致;
3、UCenter 访问地址查看是否是正确的地址;
4、UCenter IP 地址查看是否是 UCenter 所在的 MySQL 服务器的 IP 地址。


一一检查,并没有发现以上所提到的情况,这问题困扰了我相当长的一段时间了,我决定不解决誓不摆休。

后来按照http://www.discuz.net/thread-1388614-1-1.html上面的方法,顺藤摸瓜,找到了真正的原因。

原来是php5.3.x以后对set_magic_quotes_runtime函数默认不支持导致的问题。

//解决办法:找到api/uc.php
第32号:set_magic_quotes_runtime(0);
改为:@set_magic_quotes_runtime(0);
这个功能需求来自于网站运营策略,举倒子:
在一个排行列表中,默认有以下元素,顺序有一定的依据,假设是按下载次数排列。


$rows = array(
  array('name'=>'QQ2010'),
  array('name'=>'QQ2009'),
  array('name'=>'迅雷5'),
  array('name'=>'飞信2010'),
  array('name'=>'Kugoo2010'),
  array('name'=>'TTplayer'),
  array('name'=>'Firefox4.0'),
  array('name'=>'美图秀秀'),
  array('name'=>'360safe'),
  array('name'=>'Chrome6')
);


如果有一个客户[可牛杀毒]想买花10元/元下我们第二个位置,可以大家想,直接把QQ2009替换掉不就完事了吗。不,那样的话用户体验并不好,明明QQ2009是一个下载次数比较多的软件,为什么在列表中却没有了呢。

其实我们真正的需求是把QQ2009以下的单元都往后推,腾出第二个位置来给[可牛杀毒]。如果页面中只能显示10个单元,那倒霉的就是[Chrome6]了,谁叫他们付费买我们的位置呢,呵呵。

再说到程序原理上来吧,PHP要实现这个需求,挺简单,用数组函数array_splice就可以了,具体用法参照PHP手册。

给一个完整的例子吧:


<?php
$rows = array(
  array('name'=>'QQ2010',),
  array('name'=>'QQ2009',),
  array('name'=>'迅雷5',),
  array('name'=>'飞信2010',),
  array('name'=>'Kugoo2010',),
  array('name'=>'TTplayer',),
  array('name'=>'Firefox4.0',),
  array('name'=>'美图秀秀',),
  array('name'=>'360safe',),
  array('name'=>'Chrome6',),
);

$pop = array(
  '2'=>array('name'=>'可牛杀毒'),
  '5'=>array('name'=>'金山词霸2010'),
);

foreach($pop as $key=>$p){
  array_splice($rows, $key-1, 0, array($p));
}

var_dump($rows);
?>


最近的结果是:

array(12) {
  [0]=>
  array(1) {
    ["name"]=>
    string(6) "QQ2010"
  }
  [1]=>
  array(1) {
    ["name"]=>
    string(8) "可牛杀毒"
  }
  [2]=>
  array(1) {
    ["name"]=>
    string(6) "QQ2009"
  }
  [3]=>
  array(1) {
    ["name"]=>
    string(5) "迅雷5"
  }
  [4]=>
  array(1) {
    ["name"]=>
    string(12) "金山词霸2010"
  }
  [5]=>
  array(1) {
    ["name"]=>
    string(8) "飞信2010"
  }
  [6]=>
  array(1) {
    ["name"]=>
    string(9) "Kugoo2010"
  }
  [7]=>
  array(1) {
    ["name"]=>
    string(8) "TTplayer"
  }
  [8]=>
  array(1) {
    ["name"]=>
    string(10) "Firefox4.0"
  }
  [9]=>
  array(1) {
    ["name"]=>
    string(8) "美图秀秀"
  }
  [10]=>
  array(1) {
    ["name"]=>
    string(7) "360safe"
  }
  [11]=>
  array(1) {
    ["name"]=>
    string(7) "Chrome6"
  }
}
在使用swfupload上传文件的时候,老提示302。大概知道原因是因为验证失败自动跳转了。

swfuplaod在上传时,会新开一个进程,和原来的进程不一致,要解决这个问题,需要指定session_id,然后在登录页面判断,如果有post过来的session_id,那么就用函数session_id( $_POST['PHP_SESSIONID'])指定一下。

上传页的JS里面,可以获取当前的SESSION_ID的。

例如上传页的JS中:

post_params: {"PHPSESSID": "<?php echo session_id(); ?>"},


在验证的判断页中:


if (isset($_POST["PHPSESSID"])) {
    session_id($_POST["PHPSESSID"]);
}


(这一段是网上的注释:在带有Session验证的网站后台中SWFUpload无法正常工作,这是因为SWFUpload在上传时相当于重新开辟了一个新的Session 进程,因此无法与原有程序的Session保持一致,这就需要在上传时传递原有程序的SessionID,根据它来“找回”其应有的Session。)

特别感谢:妖怪、膘叔、觉醒。
分页: 1/17 第一页 1 2 3 4 5 6 7 8 9 10 下页 最后页 [ 显示模式: 摘要 | 列表 ]