分类 技术分享 下的文章

我的CEPH OSD因为列阵卡不支持直通是基于RAID0的,最近ceph性能不足,排查过程iostat观察发现有一些盘r_await或w_await持续1000多,这就需要换盘了。ceph存储一份数据如果是默认3副本,那么就会3份副本写完才会完成写入,如果有1个osd延迟很高,就会影响整体写入速度。

首先可以运行 ceph-volume lvm list 查看osd对应的盘符,如果是bcache,则需要再运行lsblk查看在哪个盘符下。然后查看是哪个盘符,以及盘位,进行更换重建。

- 阅读剩余部分 -

公司有台10个盘组的RAID10的服务器列阵挂了,坏了3个盘,超过了RAID10的容错,已经无法通过列阵恢复数据了。同时挂3个是很小几率的,所以也有一定可能刚开始挂了1-2个不知道,直到第3个挂了down机了才发现。

因为机器很多,人工每天检查一次会比较耗时,每周检查也许又会太长。所以写了个py小脚本,可以定时1小时检查次,出现故障可以立即通知到技术立即去进一步检查、换盘,避免悲剧发生。

1、安装MegaCLI

# wget https://raw.githubusercontent.com/crazy-zhangcong/tools/master/MegaCli8.07.10.tar.gz && tar -zxf MegaCli8.07.10.tar.gz && cd MegaCli8.07.10/Linux/ && rpm -ivh Lib_Utils-1.00-09.noarch.rpm MegaCli-8.02.21-1.noarch.rpm && ln -s /opt/MegaRAID/MegaCli/MegaCli64 /usr/local/bin/MegaCli && MegaCli -v 

- 阅读剩余部分 -

in_array 函数只针对一维数组,经过简单的构造,就可以查询多维数组。

$arr = array(  
    array('a', 'b'),  
    array('c', 'd')  
);  

in_array('a', $arr); // 此时返回的永远都是 false  
deep_in_array('a', $arr); // 此时返回 true 值  

function deep_in_array($value, $array) {   
    foreach($array as $item) {   
        if(!is_array($item)) {   
            if ($item == $value) {  
                return true;  
            } else {  
                continue;   
            }  
        }   

        if(in_array($value, $item)) {  
            return true;      
            } else if(deep_in_array($value, $item)) {  
            return true;      
        }  
    }   
    return false;   
}

转自:http://www.phpfensi.com/php/20140710/3731.html

PHP中用foreach()循环中,想要在循环的时候,当满足某个条件时,想要跳出本次循环继续执行下次循环,或者满足某个条件的时候,终止foreach()循环,分别会用到:continue 与 break

$arr= array('le','yang','jun','code','life','a','b','c');
$html= '';
foreach($arr as $key => $value){
    if($value == 'a'){
      $html.= $value;
    }
    if($value =='b'){
        $html.= $value;
        continue;// 当 $value为b时,跳出本次循环
    }
    if($value =='c'){
        $html.= $value;
        break;// 当 $value为c时,终止循环
    }
    //$html.= $value;
}
echo $html; // 输出: abc 

可以使用json_decode函数

$object = json_decode($array); //得到的是 object 数据类型。
$array = json_decode($object, ture); //得到的则是数组。

php从以前到现在一直都是单继承的语言,无法同时从两个基类中继承属性和方法,为了解决这个问题,php出了Trait这个特性

用法:通过在类中使用use 关键字,声明要组合的Trait名称,具体的Trait的声明使用Trait关键词,Trait不能实例化

如下代码实例:

<?php
trait Dog{
    public $name="dog";
    public function bark(){
        echo "This is dog";
    }
}
class Animal{
    public function eat(){
        echo "This is animal eat";
    }
}
class Cat extends Animal{
    use Dog;
    public function drive(){
        echo "This is cat drive";
    }
}
$cat = new Cat();
$cat->drive();
echo "<br/>";
$cat->eat();
echo "<br/>";
$cat->bark();
?>

输出

- 阅读剩余部分 -

本文实例讲述了php计算两个日期相差天数的方法。分享给大家供大家参考。具体实现方法如下:

实例一:

/**
 * 求两个日期之间相差的天数
 * (针对1970年1月1日之后,求之前可以采用泰勒公式)
 * @param string $date1
 * @param string $date2
 * @return number
 */
function diff_date($date1, $date2){
    if($date1>$date2){
        $startTime = strtotime($date1);
    $endTime = strtotime($date2);
    }else{
    $startTime = strtotime($date2);
    $endTime = strtotime($date1);
    }
    $diff = $startTime-$endTime;
    $day = $diff/86400;
    return intval($day);
}

- 阅读剩余部分 -

Laravel 5.6 中文文档
http://laravelacademy.org/laravel-docs-5_6
http://laravelacademy.org/post/8900.html
http://laravelacademy.org/post/8851.html
注:想要快速上手?只需要在新安装的 Laravel 应用下运行 php artisan make:auth 和 php artisan migrate,这两个命令会生成用户登录注册所需要的所有东西,然后在浏览器中访问 http://your-app.dev/register 即可。

php artisan make:auth
php artisan migrate

创建用户模块 以及数据库

友情提示:新建的用于登录认证的模型类需要继承 Illuminate\Foundation\Auth\User 基类,不然后面就会出现不能认证的窘况。

use Illuminate\Foundation\Auth\User;
php artisan make:model Admin -m

模型Admin.php(参考app\User.php)

- 阅读剩余部分 -

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>利用jquery制作滚动到指定位置触发动画</title>
<script type="text/javascript" src="http://apps.bdimg.com/libs/jquery/1.9.1/jquery.min.js"></script>
<style type="text/css">
*{ margin:0px; padding:0px;}
.gs{
position:relative;
top:100px; 
background-color:#099; 
left:150px; width:80px; 
}
.xz{
animation:roate 2s;
animation-fill-mode:forwards;
animation-direction:alternate;
}
@keyframes roate{
    from { transform:rotate(0deg);
    width:100px;
  height:100px; }
    to{transform:rotate(360deg);
    width:200px;
  height:200px;
    }}
.xs{ width:50px; float: left; height:30px; background-color: #F90; position:fixed; left:700px; top:0px;}
</style>
</head>
 
<body>
<script type="text/javascript">
/*var a,b,c;
a=$("#dh").offset().top;//元素相对于窗口的距离
b=$(window).scrollTop(); //监控窗口已滚动的距离;
c=$(document).height();//整个文档的高度
d=$(window).height();//浏览器窗口的高度
element  标签
cssname  动画
offset  相对于窗口的距离
*/
function scrollnumber(element,cssname,offset){
    var a,b,c,d;
    d=$(element).offset().top;
    a=eval(d + offset);
    b=$(window).scrollTop(); 
    c=$(window).height();
    if(b+c>a){
        $((element)).addClass((cssname));
    }
}
 
function scrollfun(){
    scrollnumber("#dh1",'xz',100);
    scrollnumber("#dh2",'xz',100);
    scrollnumber("#dh3",'xz',100);
    scrollnumber("#dh4",'xz',100);
}
    
$(document).ready(function(e) {
    scrollfun();
    $(window).scroll(function(){
        scrollfun();
    });
});
</script>
 
<div style="height:auto; background-color:#999; width:500px; margin: 0 auto;">
    <div class="com" style="height: 500px;background-color: darkgray;position: relative;">
        <div id="dh1" class="gs" >触发动画111</div>
    </div>
    <div style="height: 600px;background-color: cadetblue;" ></div>
    <div class="com" style="height: 500px;background-color: darkgray;position: relative;">
        <div id="dh2" class="gs" >触发动画222</div>
    </div>
    <div style="height: 600px;background-color: darkseagreen;" ></div>
    <div class="com" style="height: 500px;background-color: darkgray;position: relative;">
        <div id="dh3" class="gs" >触发动画333</div>
    </div>
    <div style="height: 600px;background-color: cadetblue;" ></div>
    <div class="com" style="height: 500px;background-color: darkgray;position: relative;">
        <div id="dh4" class="gs" >触发动画444</div>
    </div>
</div>
</body>
</html>

https://blog.csdn.net/yaoyyl/article/details/51396891