gitlab安装、汉化、完全卸载

作者: 分类: php 时间: 2018-01-18 评论: 暂无评论

[官方版]

sudo yum install -y curl policycoreutils-python openssh-server cronie
sudo lokkit -s http -s ssh
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash
sudo EXTERNAL_URL="http://xx.xx.xx.xx" yum -y install gitlab-ee
sudo gitlab-ctl reconfigure 
sudo gitlab-ctl start

此方法可以更新到最新个人版10.3.3,但是汉化补丁8.8.5还没更新到最新版,所以推荐用第二种,安装指定版本
[清华大学源]

wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el6/gitlab-ce-8.8.5-ce.1.el6.x86_64.rpm
rpm -ivh gitlab-ce-8.8.5-ce.1.el6.x86_64.rpm

[docker版本]

https://hub.docker.com/r/denghui/gitlab-ce-zh/

先安装docker..自行百度

docker pull twang2218/gitlab-ce-zh  #可能是阿里云的公共gitlab 仓库找到的镜像,忘了
docker run  --detach --restart=always  --publish 10443:443 --publish 8080:80 --publish 10022:22 --name gitlab --volume /home/gitlab/etc:/etc/gitlab --volume /home/gitlab/log:/var/log/gitlab --volume /home/gitlab/data:/var/opt/gitlab twang2218/gitlab-ce-zh
需要进入docker修改external_url 

[修改配置文件]

vim /etc/gitlab/gitlab.rb  #修改完配置需要执行 gitlab-ctl reconfigure 

external_url 'http://localhost'修改成 external_url 'http://你的gitLabIP'

sudo gitlab-ctl reconfigure

[安装最新版git]
地址 http://vocp.cn/git/17.html
[查看本地gitlab版本]

cat /opt/gitlab/embedded/service/gitlab-rails/VERSION 或者rpm -q gitlab-ee

[安装补丁]

cd ~
git clone https://gitlab.com/larryli/gitlab.git
cd  gitlab
git fetch
git branch -a
git checkout -b 8-8-stable remotes/origin/8-8-stable
git checkout -b 8-8-zh remotes/origin/8-8-zh
git diff 8-8-stable 8-8-zh > /tmp/8.8.diff
cd /opt/gitlab/embedded/service/gitlab-rails
git apply /tmp/8.8.diff  

[卸载]

sudo gitlab-ctl stop
sudo gitlab-ctl uninstall
sudo gitlab-ctl cleanse
sudo rm -rf /opt/gitlab
rpm -e gitlab-ce

[520错误]
1.内存至少要2g,太小安装完成后会返回502。可以设置下虚拟内存。
2.gitlab-ctl tail 查看错误 网上查找是权限不够问题

   chmod -R o+x /var/opt/gitlab/gitlab-rails/sockets

PHP 常用函数整理——字符串

作者: 分类: php 时间: 2017-08-12 评论: 暂无评论

1.explode(separator,string,limit)
separator 必需。规定在哪里分割字符串。
string 必需。要分割的字符串。
limit 可选。规定所返回的数组元素的数目。0是1个,-1去掉最后一个
2.implode(separator,array)
separator 可选。规定数组元素之间放置的内容。默认是 ""(空字符串)。
array 必需。要组合为字符串的数组。
3.str_split(string,length) 函数把字符串根据长度length分割成数组。
4.str_pad(string,length,pad_string,pad_type)
string 必需。规定要填充的字符串。
length 必需。规定新的字符串长度。如果该值小于字符串的原始长度,则不进行任何操作。
pad_string 可选。规定供填充使用的字符串。默认是空白。
pad_type
可选。规定填充字符串的哪边。
可能的值:
STR_PAD_BOTH - 填充字符串的两侧。如果不是偶数,则右侧获得额外的填充。
STR_PAD_LEFT - 填充字符串的左侧。
STR_PAD_RIGHT - 填充字符串的右侧。默认
5.strlen(string str) 字符串长度
6.substr ( string string, int start [, int length] ) 截取字符串
7.strpos(string,find,start) 查找字符串在另一字符串中第一次出现的位置,大小写敏感。 stripos()大小写不敏感
string 必需。规定要搜索的字符串。
find 必需。规定要查找的字符串。
start 可选。规定在何处开始搜索。
8.strrpos(string,find,start)函数查找字符串在另一字符串中最后一次出现的位置,大小写敏感。 strripos()大小写不敏感
string 必需。规定被搜索的字符串。
find 必需。规定要查找的字符。
start 可选。规定在何处开始搜索。
9.strstr(string,search,before_search) 返回出现那个字符串及之后的所有字符// stristr()大小写不敏感
string 必需。规定被搜索的字符串。
search 必需。规定要搜索的字符串。如果该参数是数字,则搜索匹配该数字对应的 ASCII 值的字符。
before_search 可选。默认值为"false"的布尔值。如果设置为 "true",它将返回 search参数第一次出现之前的字符串部分。
10.substr_replace(string,replacement,start,length)
string 必需。规定要检查的字符串。
replacement 必需。规定要插入的字符串。
start 必需。规定在字符串的何处开始替换
正数 - 在字符串中的指定位置开始替换
负数 - 在从字符串结尾的指定位置开始替换
0 - 在字符串中的第一个字符处开始替换
length 可选。规定要替换多少个字符。默认是与字符串长度相同。
正数 - 被替换的字符串长度
负数 - 表示待替换的子字符串结尾处距离 string 末端的字符个数。
0 - 插入而非替换
11.ucfirst() 函数把字符串中的首字符转换为大写。lcfirst() - 把字符串中的首字符转换为小写
12.strtolower() - 把字符串转换为小写 strtoupper() - 把字符串转换为大写
13.ucwords() - 把字符串中每个单词的首字符转换为大写
14.round(x,prec) 函数对浮点数进行四舍五入。
x 可选。规定要舍入的数字。
prec 可选。规定小数点后的位数。
15.ceil() 函数向上舍入为最接近的整数 floor()函数向下舍入为最接近的整数。
16.parse_str(string,array) 将字符串解析成变量 id=1&&key=dk //ps 可以用 $_SERVER['QUERY_STRING'] 获取url参数
string 必需。规定要解析的字符串。
array 可选。规定存储变量的数组的名称。该参数指示变量将被存储到数组中。$arr['id']=1;

17.sprintf(format,arg1,arg2,arg++)
format 必需。规定字符串以及如何格式化其中的变量。
可能的格式值:
%% - 返回一个百分号 %
%b - 二进制数
%c - ASCII 值对应的字符
%d - 包含正负号的十进制数(负数、0、正数)
%e - 使用小写的科学计数法(例如 1.2e+2)
%E - 使用大写的科学计数法(例如 1.2E+2)
%u - 不包含正负号的十进制数(大于等于 0)
%f - 浮点数(本地设置) 常用
%F - 浮点数(非本地设置)
%g - 较短的 %e 和 %f
%G - 较短的 %E 和 %f
%o - 八进制数
%s - 字符串 常用
%x - 十六进制数(小写字母)
%X - 十六进制数(大写字母)
附加的格式值。必需放置在 % 和字母之间(例如 %.2f):

  • (在数字前面加上 + 或 - 来定义数字的正负性。默认情况下,只有负数才做标记,正数不做标记)
    ' (规定使用什么作为填充,默认是空格。它必须与宽度指定器一起使用。例如:%'x20s(使用 "x" 作为填充))
  • (左调整变量值)
    [0-9] (规定变量值的最小宽度)

.[0-9] (规定小数位数或最大字符串长度)
注释:如果使用多个上述的格式值,它们必须按照以上顺序使用。
arg1 必需。规定插到 format 字符串中第一个 % 符号处的参数。
arg2 可选。规定插到 format 字符串中第二个 % 符号处的参数。
arg++ 可选。规定插到 format 字符串中第三、四等 % 符号处的参数。
格式:
eg: sprintf("%-'x8.2f",1234) //1234.00x
%s = %符号和后面属性符号(s)总称为插入标记组合,也就是把后面准备进行格式化的值(%s)替换在这个位置
$是代表有多个值准备格式化
'(补位值) 表示补位
8.2 总宽度3 ,小数2位 小数点算一位,-号表示从右边开始补位
eg: printf("[%'x4.2s]",1234) //%x.ys这里是截取字符串 显示4位,前面补充2位xx

[转]MySQL MyISAM 和InnoDB 区别

作者: 分类: php 时间: 2017-08-01 评论: 暂无评论

MyISAM 和InnoDB 讲解
  InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持以及外部键等高级数据库功能。
  以下是一些细节和具体实现的差别:
  ◆1.InnoDB不支持FULLTEXT类型的索引。
  ◆2.InnoDB 中不保存表的具体行数,也就是说,执行select count() from table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count()语句包含 where条件时,两种表的操作是一样的。
  ◆3.对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。
  ◆4.DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。
  ◆5.LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用。
  另外,InnoDB表的行锁也不是绝对的,假如在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如update table set num=1 where name like “%aaa%”
  两种类型最主要的差别就是Innodb 支持事务处理与外键和行级锁。而MyISAM不支持.所以MyISAM往往就容易被人认为只适合在小项目中使用。
  作为使用MySQL的用户角度出发,Innodb和MyISAM都是比较喜欢的,如果数据库平台要达到需求:99.9%的稳定性,方便的扩展性和高可用性来说的话,MyISAM绝对是首选。
  原因如下:
  1、平台上承载的大部分项目是读多写少的项目,而MyISAM的读性能是比Innodb强不少的。
  2、MyISAM的索引和数据是分开的,并且索引是有压缩的,内存使用率就对应提高了不少。能加载更多索引,而Innodb是索引和数据是紧密捆绑的,没有使用压缩从而会造成Innodb比MyISAM体积庞大不小。
  3、经常隔1,2个月就会发生应用开发人员不小心update一个表where写的范围不对,导致这个表没法正常用了,这个时候MyISAM的优越性就体现出来了,随便从当天拷贝的压缩包取出对应表的文件,随便放到一个数据库目录下,然后dump成sql再导回到主库,并把对应的binlog补上。如果是Innodb,恐怕不可能有这么快速度,别和我说让Innodb定期用导出xxx.sql机制备份,因为最小的一个数据库实例的数据量基本都是几十G大小。
  4、从接触的应用逻辑来说,select count(*) 和order by 是最频繁的,大概能占了整个sql总语句的60%以上的操作,而这种操作Innodb其实也是会锁表的,很多人以为Innodb是行级锁,那个只是where对它主键是有效,非主键的都会锁全表的。
  5、还有就是经常有很多应用部门需要我给他们定期某些表的数据,MyISAM的话很方便,只要发给他们对应那表的frm.MYD,MYI的文件,让他们自己在对应版本的数据库启动就行,而Innodb就需要导出xxx.sql了,因为光给别人文件,受字典数据文件的影响,对方是无法使用的。
  6、如果和MyISAM比insert写操作的话,Innodb还达不到MyISAM的写性能,如果是针对基于索引的update操作,虽然MyISAM可能会逊色Innodb,但是那么高并发的写,从库能否追的上也是一个问题,还不如通过多实例分库分表架构来解决。
  7、如果是用MyISAM的话,merge引擎可以大大加快应用部门的开发速度,他们只要对这个merge表做一些select count(*)操作,非常适合大项目总量约几亿的rows某一类型(如日志,调查统计)的业务表。
  当然Innodb也不是绝对不用,用事务的项目就用Innodb的。另外,可能有人会说你MyISAM无法抗太多写操作,但是可以通过架构来弥补。
转至 http://blog.csdn.net/xifeijian/article/details/20316775

PHP ReflectionClass 反射类

作者: 分类: php 时间: 2017-07-30 评论: 暂无评论
$reflection = new \ReflectionClass($moduleName);  //new 一个反射类ReflectionClass
$reflection->hasMethod($actionName))  //是否存在$actionName 方法
$method = $reflection->getMethod($actionName);  //new 一个反射方法类  ReflectionMethod
$handle = $reflection->newInstance(); //new 一个$moduleName
data = $method->invokeArgs($handle, array($param)); //调用方法 

Lravel 容器实践

作者: 分类: laravel,php 时间: 2017-04-25 评论: 暂无评论
<?php
interface Model{
    public function run();
}


class SuperMan{
    public $model;
    public function __construct(Model $mode)
    {
        $this->model=$mode;
    }
}
class XPower implements Model{
    public function run(){
        echo '发射X-射线';
    }
}



class Container{
    protected $binds;//绑定
    protected $instances;//实例化

    /**
     * 绑定模块
     * @param $abstract  模块关键字
     * @param $concrete  闭包函数 或 实例
     */
    public function bind($abstract,$concrete)
    {
        //如果是闭包函数
        if($concrete instanceof Closure){
            $this->binds[$abstract]=$concrete;
        }else{
            $this->instances[$abstract]=$concrete;
        }
    }
    //模块实例化脚本
    public function make($abstract,$parameters=[])
    {
        if(isset($this->instances[$abstract])){
            return $this->instances[$abstract];
        }
        array_unshift($parameters,$this);
        return call_user_func_array($this->binds[$abstract],$parameters);
    }
}

$container=new Container(); //模块工厂
// 工厂初始化
$container->bind('superman', function($container, $moduleName) {
    return new SuperMan($container->make($moduleName));
});
$container->bind('x-power',function($container){
    return new XPower;
});
echo '<pre>';
$superman = $container->make('superman', ['x-power']);
var_dump($superman);
echo '</pre>';
Top ↑