安装php5.3.29的时候加入了–with-curlwrappers运用curl工具打开url流这个参数
导致使用file_get_contents和copy这两个系统函数的时候返回空字符,可是系统没有任何错误提示,可是使用ip方式是可以的,导致我以为是因为dns解析问题,或者防火墙问题,后来同一台服务器使用了另外一个php5.6的版本没有问题,查找了半天最终网上有人提到了。整个过程没有错误真是盲人摸象,去掉这参数然后重新编译安装即可。
安装php5.3.29的时候加入了–with-curlwrappers运用curl工具打开url流这个参数
导致使用file_get_contents和copy这两个系统函数的时候返回空字符,可是系统没有任何错误提示,可是使用ip方式是可以的,导致我以为是因为dns解析问题,或者防火墙问题,后来同一台服务器使用了另外一个php5.6的版本没有问题,查找了半天最终网上有人提到了。整个过程没有错误真是盲人摸象,去掉这参数然后重新编译安装即可。
今天想安装个Percona Toolkit简称pt工具来优化mysql索引,系统环境centos6。
官方网址https://www.percona.com/downloads/percona-toolkit/LATEST/
找到percona-toolkit-3.2.1-1.el6.x86_64.rpm,复制下载地址
想直接安装,不行。
[root@hl-img-m ~]# yum -y install https://www.percona.com/downloads/percona-toolkit/3.2.1/binary/redhat/6/x86_64/percona-toolkit-3.2.1-1.el6.x86_64.rpm
Loaded plugins: security
Setting up Install Process
Cannot open: https://www.percona.com/downloads/percona-toolkit/3.2.1/binary/redhat/6/x86_64/percona-toolkit-3.2.1-1.el6.x86_64.rpm. Skipping.
Error: Nothing to do
直接下载下来安装
wget https://www.percona.com/downloads/percona-toolkit/3.2.1/binary/redhat/6/x86_64/percona-toolkit-3.2.1-1.el6.x86_64.rpm
提示缺少依赖包
[root@hl-img-m software]# rpm -ivh ./percona-toolkit-3.2.1-1.el6.x86_64.rpm
warning: ./percona-toolkit-3.2.1-1.el6.x86_64.rpm: Header V4 RSA/SHA256 Signature, key ID 8507efa5: NOKEY
error: Failed dependencies:
perl(DBI) >= 1.13 is needed by percona-toolkit-3.2.1-1.el6.x86_64
perl(DBD::mysql) >= 1.0 is needed by percona-toolkit-3.2.1-1.el6.x86_64
perl(IO::Socket::SSL) is needed by percona-toolkit-3.2.1-1.el6.x86_64
perl(Term::ReadKey) is needed by percona-toolkit-3.2.1-1.el6.x86_64
安装依赖包方式:
yum install perl-DBI perl-DBD-MySQL perl-Digest-MD5 perl-IO-Socket-SSL perl-TermReadKey
自动安装依赖包:
yum install -y percona-toolkit-3.2.1-1.el6.x86_64.rpm
成功;
看看使用
[root@hl-img-m software]# pt-duplicate-key-checker –user=root -password=root –socket=/tmp/mysql.sock
忘记不是在测试数据库上了,将就看看。
今天发现安装了ElasticSearch的服务器最近cpu占用率经常超过100%,实在受不了了。
如果安装了elasticsearch/plugins/marvel插件,查看是否因为索引文件过大导致的。
curl http://localhost:9200/_cat/indices?v
发现一个37G的超大数据索引,删除它。
curl -XDELETE http://localhost:9200/myindex*
这时候你在top查看cpu占用率,自然下降了。
因为公司有不同的项目存在于php不同版本下开发,重新全部维护修改起来成本太高了,而服务器使用的是centos6的系统,docker版本只能是1.7.1,低版本docker太多功能限制了,连参数-ip指定都不能用。尝试安装成功后发现不够稳定,维护也不方便,又不是做整体微服务。但单单为php搞去升级centos7,所有环境需要重新配置过也太烦了,直接centos6安装多版本php其实也不麻烦,反而更简单好维护。
上官网查找下载各个php版本
https://www.php.net/releases/
https://www.php.net/distributions/php-5.3.29.tar.gz
https://www.php.net/distributions/php-5.6.40.tar.gz
https://www.php.net/distributions/php-7.3.21.tar.gz
首先安装php5.3,进入源文件目录
export PHP_AUTOCONF=/usr/local/autoconf-2.13/bin/autoconf
export PHP_AUTOHEADER=/usr/local/autoconf-2.13/bin/autoheader
tar zxvf php-5.3.29.tar.gz
cd php-5.3.29/
./configure –prefix=/usr/local/php53 –with-config-file-path=/usr/local/php53/etc –enable-fpm –with-fpm-user=www –with-fpm-group=www –with-mysql=mysqlnd –with-mysqli=mysqlnd –with-pdo-mysql=mysqlnd –with-iconv-dir –with-freetype-dir –with-jpeg-dir –with-png-dir –with-zlib –with-libxml-dir=/usr –enable-xml –disable-rpath –enable-magic-quotes –enable-safe-mode –enable-bcmath –enable-shmop –enable-sysvsem –enable-inline-optimization –with-curl –enable-mbregex –enable-mbstring –with-mcrypt –enable-ftp –with-gd –enable-gd-native-ttf –with-openssl –with-mhash –enable-pcntl –enable-sockets –with-xmlrpc –enable-zip –enable-soap –without-pear –with-gettext –disable-fileinfo
make ZEND_EXTRA_LIBS=’-liconv’
make install
这里不做详细安装出现问题,顺利话就会在/usr/local/php53安装好php5.3.29
这里举例php5.3.29,5.3因为没有自带缓存加速需要另外单独安装个ZendGuardLoader,其它版本不需要,其它同样照做就可以了。
ln -s /usr/local/php/bin/php /usr/bin/php
ln -s /usr/local/php/bin/phpize /usr/bin/phpize
ln -s /usr/local/php/sbin/php-fpm /usr/bin/php-fpm
复制php系统自带管理脚本文件,可以操作启动、停止等一些系列操作。
cp /php-5.3.29/sapi/fpm/init.d.php-fpm /etc/init.d/php53-fpm
chmod +x /etc/init.d/php53-fpm
同时要编辑php53-fpm文件里面对应的调用php文件,应该都不是按默认的安装,有php53 php56 php73路径问题
本地宿主建议使用sock方式启动性能更高效,只要sock文件名称不同即可,其它文件对应修改单独路径即可,如果使用ip方式也可以,只要修改不同端口,就看你喜欢用哪种。
[global]
pid = /usr/local/php53/var/run/php-fpm.pid
error_log = /data/logs/php/php53-fpm.log
log_level = notice
/usr/local/php53/etc/php-fpm.conf
[www]
;listen = 127.0.0.1:9000
listen = /tmp/php53-cgi.sock
user = www
group = www
listen.owner = www
listen.group = www
如果没设置www组,很有可能就会出现和我同样的502问题
cp php.ini-production /usr/local/php/etc/php.ini
如果扩展so路径不同,记得也在php.ini修改成对应的路径。
最后就是启动了[root@hl-qy ~]# /etc/init.d/php53-fpm restart
Last_SQL_Errno: 1594
Last_SQL_Error: Relay log read failure: Could not parse relay log event entry. The possible reasons are: the master’s binary log is corrupted (you can check this by running ‘mysqlbinlog’ on the binary log), the slave’s relay log is corrupted (you can check this by running ‘mysqlbinlog’ on the relay log), a network problem, or a bug in the master’s or slave’s MySQL code. If you want to check the master’s binary log or slave’s relay log, you will be able to know their names by issuing ‘SHOW SLAVE STATUS’ on this slave.
这个还比较好处理,停止同步,重新设置下主从同步信息。
stop slave;
change master to master_host = ’10.x.x.x’,master_port = 3306,master_user = ‘xxx’,master_password=’xxx’,master_auto_position = 1;
start slave;
环境centos6.10,version: 1.7.1
修改docker默认存储路径防止镜像太多太大,也方便管理。
[root@hl-qy ~]# docker info
Containers: 0
Images: 0
Storage Driver: devicemapper
Pool Name: docker-253:1-1033069-pool
Pool Blocksize: 65.54 kB
Backing Filesystem: extfs
Data file: /dev/loop0
Metadata file: /dev/loop1
Data Space Used: 305.7 MB
Data Space Total: 107.4 GB
Data Space Available: 24.51 GB
Metadata Space Used: 729.1 kB
Metadata Space Total: 2.147 GB
Metadata Space Available: 2.147 GB
Udev Sync Supported: true
Deferred Removal Enabled: false
Data loop file: /var/lib/docker/devicemapper/devicemapper/data
Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata
Library Version: 1.02.117-RHEL6 (2016-12-13)
Execution Driver: native-0.2
Logging Driver: json-file
Kernel Version: 2.6.32-358.6.2.el6.x86_64
Operating System: <unknown>
CPUs: 1
Total Memory: 1.96 GiB
Name: hl-qy
ID: CMYG:IGVE:WZM3:U22U:5S56:JQH3:VZO2:CH3G:WHBZ:XXRY:UXDR:ZP5A
[root@hl-qy ~]# yum list installed | grep docker
docker-io.x86_64 1.7.1-2.el6 @epel
[root@hl-qy ~]# docker version
Client version: 1.7.1
Client API version: 1.19
Go version (client): go1.4.2
Git commit (client): 786b29d/1.7.1
OS/Arch (client): linux/amd64
Server version: 1.7.1
Server API version: 1.19
Go version (server): go1.4.2
Git commit (server): 786b29d/1.7.1
OS/Arch (server): linux/amd64
查到默认的信息后接下来修改
# mkdir /data
# /etc/init.d/docker stop
# cd /var/lib
# cp –rf docker /data
# rename ./docker/ ./docker_old ./docker/
# ln –s /data/docker docker
# /etc/init.d/docker start
重启后再查询下
# docker info
Data loop file: /data/docker/devicemapper/devicemapper/data
Metadata loop file: /data/docker/devicemapper/devicemapper/metadata
恭喜已经修改成功
laravel使用Application对象直接输出version属性。
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\User; use Illuminate\Foundation\Application; class TestController extends Controller { public function index() { echo Application::VERSION; exit; } }
文件在扩展文件夹:vendor/laravel/framework/src/Illuminate/Foundation/Application.php
最近写个yii2编辑器扩展用到了官方图片处理扩展,这里顺便说下。
首先安装:composer require –prefer-dist yiisoft/yii2-imagine
prefer-dist参数本地保存缓存,重新添加缓存读取。
扩展目录添加2个新目录
vendor/imagine
vendor/yiisoft/yii2-imagine
使用先引入:
use yii\imagine\Image;
$image=’@webroot/test-image.jpg’;
$quality=75;
//图片水印
Image::watermark($image, ‘@webroot/watermark.png’, [0, 0])->save($image, [‘quality’ => $quality]);
//文字水印
Image::text($image, ‘netpc.com.cn测试’, ‘@vendor/netpc/yii2-ueditor/assets/fonts/Alibaba-PuHuiTi-Heavy.otf’, [0,0], [‘color’ => ‘#000000’, ‘size’ =>16])->save($image, [‘quality’ => $quality]);
//修改尺寸
$image = Image::resize($image, 600, 0)->save($image, [‘quality’ => $quality]);
//裁剪
Image::crop($image, 120 , 120, [0, 0])->save($image, [‘quality’ => $quality]);
//略图
Image::thumbnail($image, 120, 120 ,\Imagine\Image\ManipulatorInterface::THUMBNAIL_INSET)->save($image, [‘quality’ => $quality]);
//旋转
Image::frame($image, 5, ‘666’, 0)->rotate(-8)->save($image, [‘quality’ => $quality]);
其它可以参考我的写的composer require netpc/yii2-ueditor扩展或查看官方源码
今天使用class_exists检查是否安装yii2官方扩展yiisoft/yii2-imagine类的时候
if(class_exists('Image')){}
这样无论怎么检查都是flash
原来框架里需要使用完整命名空间路径
use yii\imagine\Image; if(class_exists('yii\imagine\Image')){}
这样才能正确检查类是否有效。
今天yii2表格GridView使用kartik扩展yii2-export导出excel文档的时候需要在表格内容前面或后面加一些说明内容,结果官方文档说明也不是很清楚,查看vendor\kartik-v\yii2-export\src\ExportMenu.php源码发现有contentBefore和contentAfter两个属性可以用,尝试下果然可以,代码如下:
<?php echo ExportMenu::widget([ 'dataProvider' => $dataProvider, 'columns' => $columns, 'showColumnSelector' => false, 'asDropdown' => false, 'exportConfig' => [ ExportMenu::FORMAT_HTML => false, ExportMenu::FORMAT_CSV => false, ExportMenu::FORMAT_TEXT => false, ExportMenu::FORMAT_PDF => false, ExportMenu::FORMAT_EXCEL => false, ExportMenu::FORMAT_EXCEL_X => [ 'icon' => '', 'iconOptions' => ['class' => ''], 'label' => '<button id="download">导出</button>', 'options' => ['class' => 'btn btn-primary', 'style' => 'display:none'], ], ], //导出excel内容前面加内容 'contentBefore' => [ ['value' => 'v1'], ['value' => 'v2'], ], //导出excel内容后面加内容 'contentAfter' => [ ['value' => 'v1'], ['value' => 'v2'], ], 'filename' => date('YmdHi'), ]);