风火家人开发记要

技术总结精华贴

Year: 2019

原创, 服务器, , ,

使用docker的那些坑

依然是拿建网站来说明docker搭建mysql,php,nginx。使用PHP搭建起来的网站,自然 nginx要依赖php, php要依赖mysql,先看下所需容器 1.首先docker一个mysql,我使用的是mysql8.0,获取就不说了,这里直接docker –name 是为新容器起的名字, -p 本地端口:容器端口  -v 本地路径:容器路径, -v可设置很多路径映射,配置信息,日志信息,数据库存放路径,等等,记得还要同步本地时间哦,不然东八区的总差8小时, -e 环境变量,这个ROOT password 可以让我们避免首次登陆时去log查询初始密码的麻烦。 如果发现docker启动不起来,可以使用下面命令查看原因。 因为上面命令是我反复测试得到的命令,每次删除container后都可以直接使用则个命令启动,也不用担心重新配置信息或者数据丢失。出来下面的目录设置配置外,其他几个自定义目录都可以留空 通过下面的命令进入到 mysql8的容器中,使用上面的初始密码登录,需要提醒的是mysql8授权用户的时候,需要先创建相关用户,在赋予权限,不可一次执行。 安装mysql8还可以通过 docker-compose文件,配置如下 docker-compose.yml 现在我已经能正常使用数据库了,接下来是docker php-fpm。使用下面的命令创建php-fpm的容器,拉取php的fpm的最新版就行了 /data/www是我部署的网站,里面含有好几个站点,这里直接全部映射过去,php/extensions的相关扩展需要在启动docker后,进入docker中安装,比如下面是进入php的docker中安装pdo_mysql的扩展命令,最好在进入安装前,先打开php.ini中相应的扩展,如果不打开,创建后会在一个子目录下创建一个相应配置文件,并设置为开启,虽然结果都一样,但最好还是能统一在php.ini中配置。 这个docker命令中 我们使用 –link mysql8:mysql来把 mysql的网络段和php的网络段打通,我们可以进入php的docker中查看 /etc/hosts 里面会帮我们绑定mysql的IP,这样php就能够正常访问到mysql的网络中,以便访问数据库。 这里面的坑就是很多时候我们访问访问php地址的时候都是找不到文件,这个时候就需要你确保是否将网站路径映射到php docker中的正确位置了, 可以看到我使用了两次 -v /data/www的映射,这是因为才安装好的php docker 默认访问网站根目录是/etc/nginx/html, 我/data/www/中有html文件夹,所以我只绑定了前面, 而 -v /data/www:/data/www 则是因为我自定义了其他站点配置信息里面的目录都使用的/data/www/zizhandian的方式。 现在我们已经配置了几个php站点,需要使用nginx开启这些站点了,这里我们需要 –link下 php-fpm 这样就能让nginx正常访问到 php docker的网络段。 经过上面几条命令 我们已经能够正常访问php的站点了,php也能正常访问数据库了。 现在出现了另外一个问题,我有些服务是在 宿主机上开启的,那docker 容器怎么正常和宿主机通信呢? 当我查找这方面资料时,都是一些配置 iptable 防火墙策略,或者别名lo网络,真的有那么麻烦吗,我也被折腾了好几天,其实很简单。 docker 容器里面定义的网络段首个地址就是主机IP。这个我之所以被折腾很久,就是因为所谓的内网地址作怪。 我当前这台服务器内外IP是 172.17.1.4,我们分别进入 docker php-fpm 和 nginx80中查看hosts就会发现他们里面也绑定了,172.17.1.2 mysql,172.17.1.3 php-fpm, 172.17.1.4 nginx80 怎么回事呢,如果我们连主机内网IP 172.17.1.4却连到了nginx80上, 这里我们必须理解在 docker中的网络段他们都是相互独立的,当我们使用–link后 他们之间会通过host 绑定并且会在同一个网段呢, 那么我们的宿主机在docker里就是 172.17.1.1 这个初始IP,所以如果想连主机的IP,需要配置docker网络段的其实IP,不是127.0.0.1 也不是内网地址172.17.1.4。 这次docker学习的心得差不多就这些了。 另外一篇关于使用 Dockerfile 生成 PHP:FPM镜像的,并安装其他扩展的:使用php:fpm制作docker镜像并添加扩展redis,pdo_mysql等 (132)

查看全文
PHP, 原创,

PHPOffice\PHPPresentation添加背景格式(图案填充)功能

使用PHPPresentation时我们发现,该开源软件竟然不支持图案填充功能,于是就自己补充了下,(本想将自己代码贡献给PHPOffice官方,因下载下来的开发版本无法通过单元测试,只能暂时写到此处供参考) 以下方式可以使PHPPresentation支持背景图案填充。 1.首先创建背景填充类文件 PHPOffice/PHPPresentation/src/PhpPresentation/Slide/Background/FillType.php 代码如下 <?php/** * Created by chenxue4076@163.com. * User: chenxue4076@163.com * Date: 2019/02/27 * Time: 14:46 * File name: FillType.php */namespace PhpOffice\PhpPresentation\Slide\Background;use PhpOffice\PhpPresentation\Slide\AbstractBackground;use PhpOffice\PhpPresentation\Style\Fill as StyleFill;class FillType extends AbstractBackground{ const FILL_PATTERN_BACKGROUND = array( “cross”, “dashDnDiag”, //dashed downward diagonal 下对角虚线 “dashHorz”, //dashed horizontal 横虚线 “dashUpDiag”, //dashed upward diagonal 上对角虚线 “dashVert”, //dashed vertical 竖虚线 “diagBrick”, //diagonal brick 对角砖型 “diagCross”, “divot”, //divot 草皮 “dkDnDiag”, //dark downward diagonal 深色下对角线 “dkHorz”, //dark horizontal 深色横线 “dkUpDiag”, //dark upward diagonal 深色上对角线 “dkVert”, //dark vertical 深色竖线 “dnDiag”, “dotDmnd”, //dotted diamond 点式菱形 “dotGrid”, //dotted grid 虚线网格 “horz”, “horzBrick”, //horizontal brick 横向砖型 “lgCheck”, //large checker board 大棋盘 “lgConfetti”, //large confetti 大纸屑 “lgGrid”, //large grid 大网格 “ltDnDiag”, //light downward diagonal 浅色下对角线 “ltHorz”, //light horizontal 浅色横线 “ltUpDiag”, //light upward diagonal 浅色上对角线 “ltVert”, //light vertical 浅色竖线 “narHorz”, //narrow horizontal 窄横线 “narVert”, //narrow vertical 窄竖线 “openDmnd”, //open diamond 轮廓式菱形? “pct5”, //5% “pct10”, //10% “pct20”, //20% “pct25”, //25% “pct30”, //30% “pct40”, //40% “pct50”, //50% “pct60”, //60% “pct70”, //70% “pct75”, //75% “pct80”, //80% “pct90”, //90% “plaid”, //plaid 苏格兰方格 “shingle”, //shingle卵石 瓦形 “smCheck”, //small checker board 小棋盘 “smConfetti”, //small confetti 小纸屑 “smGrid”, //small grid 小网格 “solidDmnd”, //solid diamond 实心菱形 “sphere”, //ball 球体 “trellis”, //trellises 棚架 “upDiag”, “vert”, “wave”, //wave 波浪 “wdDnDiag”, //wide downward diagonal

查看全文
PHP, 原创

phpExcel生成的Excel背景填充色变黑

最近有同事在处理PHPExcel生成的Excel文件时,总会生成一片黑背景。 具体样式我就不截图了, 直接说修改方式。 找到文件 PHPExcel/Writer/Excel2007/Stype.php, 找到函数方法 writePatternFill 将下面信息 $objWriter->writeAttribute(‘rgb’, $pFill->getStartColor()->getARGB()); 替换为 if( $pFill->getStartColor()->getARGB() == ‘FF000000’ && $pFill->getEndColor()->getARGB() == ‘FF000000’) { $objWriter->writeAttribute(‘rgb’, ’00FFFFFF’);} else { $objWriter->writeAttribute(‘rgb’, $pFill->getStartColor()->getARGB());} 原因解析:此函数中 startColor为前景色,endColor为背景色, 通过PHP生成的PHPExcel中会多出 前景色和背景色都为黑色FF000000的FILL, 这个应该是PHPExcel的BUG,这时候我们强制设置前景色(字体颜色)为透明的白色,因为都是空行,这样做并没有问题哦。 通过上面的操作我们就可以生成正常的Excel文件了。 (1151)

查看全文