202017
 

官方最新的mysql版本是mysql5.7.18。那么在centOS下,怎么编译安装呢。安下边步骤一步一步的来。

1,找到源码地址,并下载,解压。 https://dev.mysql.com/downloads/mysql/

在大多数情况下,你只需要安装MySQL-server和MySQL-client安装包就可以安装上一个标准功能的MySQL。对于一个标准安装来说,其他的安装包不是必需的。这里选择下载RPM Bundle包,它包含mysql的所有功能(server,client,test)。确定要下载的版本后,需要登录才能出最后的下载按钮。 Continue reading »

202017
 

centos是服务器的一种常见系统。对于新手,用yum安装程序当然是比较效率,可靠。如果对于成长,还是源码安装的好。源码安装会让你踩很多很多的坑。下边就有一丢没一丢的说下遇到的问题。

1,环境变量问题。这个在win下也有。在终端中,想要全局直接调用命令,就要写到环境变量中。要不只能走到安装目录对应文件那里。centos的环境变量设置。
在/etc/profile文件中添加变量(对所有用户,永久生效)。就拿nginx为例。

       vi /etc/profile
       #然后在末尾添加以下信息
       PATH=$PATH:/data/server/nginx/sbin
       export PATH
       #保存(:wq)
       #source一下。只有source了才能生效。
       source /etc/profile
       #打印出环境设置的环境变量
       echo $PATH
       #查看nginx版本
       nginx -v
添加好环境变量后,就可以全局调用了。不过,注意点,编写path的时候,$PATH一定要带上。如果没带,source了,你最终添加进去的只是你最后添加的那一条,会丢失其他环境变量。导致很多命令用不了。比如,你想vi用不了,source也用不了。等等。这个时候 ,你得手动export原本的那些位置。比如:
EXPORT PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/
            bin:/root/bin
这个时候,vi回来了,赶快去修改/etc/profile,然后source。
刚才那种在终端直接export的方法,只对当前会话有效。以上种种,都是自己亲自体验,经历过的。参考文章如下:
http://edbiji.com/doccenter/showdoc/78/nav/995.html
http://www.cnblogs.com/whoamme/p/4039998.html

2, 常用的rpm命令(参数往往是组合的)。

    rpm -ivh xxxx.rpm
手动安装rpm包。参数:
–force 即使覆盖其他包的文件也没强迫安装
–nodeps 即使依赖包没安装,也被强制安装

    rpm -e --nodeps xxxxx
强制卸载包

    rpm -qa|grep nginx
查找nginx的rpm包

    rpm -qpi xxxx.rpm
查看rpm包信息。

    rpm -qpR xxxx.rpm
查看rpm包依赖。

    rpm -qlp xxxx.rpm
查看rpm包中包含哪些文件(可以加grep限制)

3, 查看系统中运行的所有socket。

    find / -type s

4,列出所有的my.cnf文件

    locate my.cnf

5,查找某个程序的rpm包。

    #这里以mysql为例。如果,通过 yum remove mysql卸载了mysql。
     并不一定卸载了所有的mysql组件。这个时候通过这个命令可以找到遗留。
    rpm -qa|grep mysql

6,cat命令。查看文本内容。加上grep,查看相关的。

    #查看mysqld.log中的password
    cat /var/log/mysqld.log |grep password

7, 检查端口号。

   netstat -anp|grep "LISTEN"

8,ps显示进程。

   #显示所有进程
   ps -ef
   #显示 ams的所有进程
   ps -ef|grep ams

9, chkconfig 输出所有服务列表,检查开机是否自启动(不包裹系统的,也就是不显示系统的)。

   #显示所有的开机自启动程序状态。
   chkconfig --list
   #显示ams的开机自启动状态
   chkconfig --list|grep ams
   #启动状态分七个级别。如果都是off,表示不会自启动。这个时候需要改变状态。
   # 将httpd状态设置成自动启动了。再看状态会看到3,4,5级别都是on。
   chkconfig httpd on 
   #如果想关闭自启动,就用off了。
   chkconfig httpd off
   #当然,你可以对具体状态级别进行设置on或off。
   chkconfig --level 35 httpd on
   #如果服务列表中没有对应程序,可以添加。
   chkconfig --add httpd
   #还可以从服务列表中删除对应程序。
   chkconfig --del httpd

最后看看这七个级别代表的意义。
   0-6 分别表示的是

   等级0表示:表示关机
   等级1表示:单用户模式
   等级2表示:无网络连接的多用户命令行模式
   等级3表示:有网络连接的多用户命令行模式
   等级4表示:不可用
   等级5表示:带图形界面的多用户模式
   等级6表示:重新启动

10,复制,移动文件。

   #显示文件路径
   pwd

182017
 

ci的日志功能默认是关闭的。想要使用ci的日志功能,要做到以下几点。

1,在application/config/config.php中将日志的级别打开。默认0是关闭。1记录错误消息。2记录调试消息,3记录一般消息,4记录所有的。
2,配置的log日志目录必须是可写的。系统的目录权限如果是只读,一样不会有日志。

当然,你可以设置日志的路径,命名format等。

    $config['log_threshold'] = 1;
    $config['log_path'] = FCPATH .'static/logs/';
    $config['log_date_format'] = 'Y-m-d H:i:s';

官方错误处理:http://codeigniter.org.cn/user_guide/general/errors.html
Continue reading »

182017
 

http_build_query() 生成 url-encoded 之后的请求字符串描述(用于将数组转化为url查询字符串)。 string http_build_query ( array formdata [, string numeric_prefix] )

   $data = array('time'=>1492493886, 'key'=>'lovephp');
   echo 'http://www.vinixiu.com/?'.http_build_query($data);
   //输出: http://www.vinixiu.com/?time=1492493886&key=lovephp

parse_str() 把查询字符串解析到变量中。parse_str(string,array)

    parse_str('time=1492493886&key=lovephp', $arr);
    echo $arr;
    //输出: Array ( [time] => 1492493886 [key] => 'lovephp' )

Continue reading »

172017
 

此刻,客户端游戏直播已经司空见惯。那么手游的直播呢。如果靠摄像头捕捉录像来达到手游直播的目的,我觉得是不现实的。前几天玩陌陌,发现有人已经直播手游王者荣耀了。于是,好奇,就找了下直播手游的方法。众多方法中,感觉下边的方法比较靠谱。因为在主播直播王者荣耀的时候,很多小伙伴就问主播,王者荣耀咋直播的呢。主播口述回答的方式和下边的方法比较吻合。

陌陌直播手游直播教程:
Continue reading »

172017
 

举个例子:
A想要从自己的帐户中转1000块钱到B的帐户里。那个从A开始转帐,到转帐结束的这一个过程,称之为一个事务。在这个事务里,要做如下操作:
1. 从A的帐户中减去1000块钱。如果A的帐户原来有3000块钱,现在就变成2000块钱了。
2. 在B的帐户里加1000块钱。如果B的帐户如果原来有2000块钱,现在则变成3000块钱了。
如果在A的帐户已经减去了1000块钱的时候,忽然发生了意外,比如停电什么的,导致转帐事务意外终止了,而此时B的帐户里还没有增加1000块钱。那么,我们称这个操作失败了,要进行回滚。回滚就是回到事务开始之前的状态,也就是回到A的帐户还没减1000块的状态,B的帐户的原来的状态。此时A的帐户仍然有3000块,B的帐户仍然有2000块。
我们把这种要么一起成功(A帐户成功减少1000,同时B帐户成功增加1000),要么一起失败(A帐户回到原来状态,B帐户也回到原来状态)的操作叫原子性操作。
如果把一个事务可看作是一个程序,它要么完整的被执行,要么完全不执行。这种特性就叫原子性。
Continue reading »

172017
 

redis基础使用教程: http://www.cnblogs.com/taceywong/p/5840163.html

php中的使用redis简单实例。

    if(FALSE == $this->redis->get('seeNums'))
    {
	$this->redis->set('seeNums', 1);
	$this->redis->expire('seeNums', 60 * 60 * 24);
    }
    else
    {
	$this->redis->incrby('seeNums', 1);
    }
    $seeNums = $this->redis->get('seeNums');

redis易百教程:http://www.yiibai.com/redis/strings_incr.html

redis与php结合的应用场景:
Continue reading »

142017
 

rtmp延时低,但是累计延时就不一定低。随着播放时间的久远以及网络状况的变化。rtmp延时会比较严重,甚至达到几十秒的延时。这个时候,直播的体验会很差很差。这就是rtmp的一个缺点。rtmp是基于tcp,不会丢包。所以当网络状态差时,服务器会将包缓存起来。待网络状况好了,就一起发给客户端。

对于NetStream,有一个属性叫bufferTimeMax。指定实时流内容的最大缓冲区长度(以秒为单位)。默认值为 0。由于网络和设备问题(如发送方和接收方之间存在时钟偏移),缓冲区长度可随时间不断增加。设置此属性可使实时应用(如会议和监视)的缓冲区长度最大化。当 bufferTimeMax > 0,并且 bufferLength >= bufferTimeMax 时,将加快音频的播放速度,直到 bufferLength 达到 bufferTime。如果实时流仅包含视频,则视频播放较快,直到 bufferLength 达到 bufferTime。Flash Player 将捕捉速率控制在 1.5% 和 6.25% 之间,具体取决于播放延迟量(bufferLength 和 bufferTime 差异)。如果流中包含音频,通过缩减频率域采样,使音频失真最小化,可以加快播放。设置 bufferTimeMax 属性可在以下情况下启用实时缓冲流追赶:
1,以数据流的方式从 Flash Media Server 传输实时介质。
2,以数据流的方式在数据生成模式 (NetStream.appendBytes()) 下传输实时介质。

本来以为只要设置下bufferTimeMax就可以了。使用方式(上边两点)限制了bufferTimeMax的作用。

那么,遇到问题,总要解决问题的。可以手动加一个定时器,间隔可以根据需要来做。每个这个间隔,就去检查bufferLentgh的大小。bufferLength的值越大,表示离真实的实时时间越远。实时性约差。当bufferLength的大小超过了预期的值,就对NetStream做pause和resume处理。用来释放数据。来达到及时同步的目的。当然,你也可以初始化重连,但这样容易引起黑屏。

这个方法,也是迫于无奈。公司项目用推流工具推流,客户端通过rtmp连接观看。两者之间,没加入其他的沟通环节。不知道客户端此时的流与真实流的状况。

072017
 

重启nginx。

    /etc/init.d/nginx restart

重启mysql

    /etc/init.d/mysql restart

修改了php.ini后,重启php

    /etc/init.d/php-fpm restart

重启ams服务器

    /etc/init.d/ams restart

另外,说下pm2,pm2可以后台运行你的程序。比如node.js默认情况下,当运行窗体关闭了(我用的是XShell5),node.js的服务也停止了。当用pm2启动的node.js的程序的时候,关掉XShell5窗体,程序一样在运行。

网站地图