平原斑马, 埃托沙国家公园, 纳米比亚 (© Mogens Trolle/Shutterstock)

Welcom to 评论 - lizhenqiu blog!

    #229

    作者:180.136.225.154, 113
    GPS 经纬度格式转换 我们可以简单的把经纬度分为两种:WGS84 和 NMEA 格式。一般的地图系统都是采用 WGS84 这种国际 GPS 数据格式标准,由于兼容性问题,我们模块的定位指令输出的格式就 是这两种。只有AT+GPSLOC指令输出的是NMEA格式,其它基站定位指令比如AT+TKPOS, AT+ENBR 都是输出 WGS84 格式。 他们之间的转换关系大概如下: 从 NMEA 转换为 WGS84 格式 double nmea_ndeg2degree(double val) { double deg = ((int)(val / 100)); val = deg + (val - deg * 100) / 60; return val; } 从 WGS84 格式转换为 NMEA 格式: double nmea_degree2ndeg(double val) { double int_part; double fra_part; fra_part = modf(val, &int_part); val = int_part * 100 + fra_part * 60; return val; }
    Run code
    Cut to clipboard
      文章:GPS坐标转换php版本  发表时间:2022-01-15, 18:32:05  
      展开↯

      #230

      作者:180.136.225.154, 113
      GPS坐标转换经纬度及换算方法 GPS坐标和经纬度的算法和概率不太一样,但是我们可能会将他们互通起来用,下面先贴上我做的转换工具:http://map.yanue.net/gps.html。里面实现了gps到谷歌地图百度地图经纬度的转换。不含糊,下面将他们之间的联系。 GPS坐标系我本身不太了解它跟谷歌地图经纬度有多大区别,于是搜了一下,看看他们的区别: 地形图坐标系:我国的地形图采用高斯-克吕格平面直角坐标系。在该坐标系中,横轴:赤道,用Y表示;纵轴:中央经线,用X表示;坐标原点:中央经线与赤 道的交点,用0表示。赤道以南为负,以北为正;中央经线以东为正,以西为负。我国位于北半球,故纵坐标均为正值,但为避免中央经度线以西为负值的情况,将 坐标纵轴西移500公里。 北京54坐标系:1954年我国在北京设立了大地坐标原点,采用克拉索夫斯基椭球体,依此计算出来的各大地控制点的坐标,称为北京54坐标系。 GS84坐标系:即世界通用的经纬度坐标系。 经纬度表示:1884年国际经度会议规定,以通过英国伦敦格林威治天文台子午仪中心的经线为0°经线。从0°经线往东叫东经,往西叫西经,东、西各分180°。习惯 上以西经20°和东经160°为分界把地球分为东西两个半球。假如从地轴的正中间将地球切成南北两半,上边的一半叫北半球,下边的一半叫南半球。被切的这 个平面,叫赤道面。赤道面与地球表面相交的线叫赤道。纬线从赤道往两极越来越短,到了两极就缩小成一个点了。科学家们把赤道定为0°纬线,从赤道向两极各 分为90°,赤道以南叫南纬,赤道以北叫北纬。在计算机或GPS上经纬度经常用度、分、秒和度.度、分.分、秒.秒的混合方式进行表示,度、分、秒间的进 制是60进制,度.度、分.分、秒.秒的进制是100进制,换算时一定要注意。可以近似地认为每个纬度之间的距离是不变的111KM,每分间 1.85KM,每秒间31.8M。经度间的距离随纬度增高逐渐减小,可按以下公式计算: 经度1°长度=111.413cosφ一0.094cos3φ公里(纬度φ处)。 一般从GPS得到的数据是经纬度。经纬度有多种表示方法。 1.) ddd.ddddd, 度 . 度的十进制小数部分(5位)例如:31.12035º 2.) ddd.mm.mmm,度 . 分 . 分的十进制小数部分(3位)例如 31º10.335' 3.) ddd.mm.ss, 度 . 分 . 秒 例如 31º12'42" 地球上任何一个固定的点都可以用确定的经纬度表示出来。 关于经纬度坐标转换的方法 一、十进制转换成经纬度 把经纬度转换成十进制的方法很简 如下就可以了 Decimal Degrees = Degrees + minutes/60 + seconds/3600 例:57°55'56.6" =57+55/60+56.6/3600=57.9323888888888 114°65'24.6"=114+65/60+24.6/3600=结果自己算! 如把经纬度 (longitude,latitude) (205.395583333332,57.9323888888888) 转换据成坐标(Degrees,minutes,seconds)(205°23'44.1",57°55'56.6")。 步骤如下: 1, 直接读取"度":205 2,(205.395583333332-205)*60=23.734999999920 得到"分":23 3,(23.734999999920-23)*60=44.099999995200 得到"秒":44.1 采用同样的方法可以得到纬度坐标:57°55'56.6" 好大一篇,都是别的地方copy过来的,有兴趣就自己看看吧 The end
      Run code
      Cut to clipboard
        文章:GPS坐标转换php版本  发表时间:2022-01-15, 18:31:47  
        展开↯

        #231

        作者:116.252.135.227, 45.
        打开VB提示安装Office终极解决方法
        鉴于office安装问题太烦人,于是打算彻底干掉它。除了前面讲的用Open锁定msi.dll的方法外,还有更好的方法。 Open虽然简单,但会禁止msi文件,所以又找到一种新的不妨碍其它程序的办法。 方法是hook当前进程的ZwOpenFile(NtOpenFile),发现是msi.dll时跳过即可。 代码如下: '窗体 Option Explicit Private Sub Form_Load() Me.Move (Screen.Width - Me.Width) \ 2, (Screen.Height - Me.Height) \ 2 Me.Show End Sub Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) Unhook End Sub '模块 Option Explicit Private Declare Function GetCurrentProcess Lib "kernel32" () As Long Private Declare Function ZwOpenFile Lib "NTDLL.DLL" (ByRef Filehandle As Long, _ ByVal DesiredAccess As Long, _ ByRef ObjectAttributes As OBJECT_ATTRIBUTES, _ ByRef IoStatusBlock As IO_STATUS_BLOCK, _ ByVal ShareAccess As Long, _ ByVal OpenOptions As Long) As Long Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSrc As Any, ByVal ByteLen As Long) Private Const STATUS_OBJECT_NAME_NOT_FOUND = &HC0000034 Private Type IO_STATUS_BLOCK Status As Long Information As Long End Type Private Type OBJECT_ATTRIBUTES length As Long RootDirectory As Long ObjectName As Long Attributes As Long SecurityDescriptor As Long SecurityQualityOfService As Long End Type Private MyHook As cls_HookApi '自定义hook Sub Main() App.TaskVisible = False Set MyHook = New cls_HookApi MyHook.HookApi "ntdll.dll", "ZwOpenFile", GetFunAddr(AddressOf ZwOpenFileCallback), GetCurrentProcess Load frm_Main End Sub 'NtOpenFile回调 Public Function ZwOpenFileCallback(Filehandle As Long, ByVal DesiredAccess As Long, ObjectAttributes As OBJECT_ATTRIBUTES, IoStatusBlock As IO_STATUS_BLOCK, ByVal ShareAccess As Long, ByVal OpenOptions As Long) As Long Dim lRetVal As Long MyHook.HookStatus False 'Debug.Print ObjectAttrToName(ObjectAttributes) If LCase(ObjectAttrToName(ObjectAttributes)) Like LCase("*msi.dll") Then lRetVal = STATUS_OBJECT_NAME_NOT_FOUND '返回值改为对象不存在 Else lRetVal = ZwOpenFile(Filehandle, DesiredAccess, ObjectAttributes, IoStatusBlock, ShareAccess, OpenOptions) End If MyHook.HookStatus True ZwOpenFileCallback = lRetVal End Function '得到文件名称 Private Function ObjectAttrToName(ObjectAttr As OBJECT_ATTRIBUTES) As String Dim bytCode() As Byte Dim dwName As Long Dim dwLength As Integer CopyMemory dwLength, ByVal ObjectAttr.ObjectName, 2 If dwLength > 0 Then CopyMemory dwName, ByVal ObjectAttr.ObjectName + 4, 4 ReDim bytCode(dwLength - 1) CopyMemory bytCode(0), ByVal dwName, dwLength ObjectAttrToName = StrConv(StrConv(bytCode, vbUnicode), vbFromUnicode) ObjectAttrToName = Replace(ObjectAttrToName, "\??\", "") End If Erase bytCode End Function Public Function GetFunAddr(lngFunAddr As Long) As Long GetFunAddr = lngFunAddr End Function Sub Unhook() Set MyHook = Nothing End Sub '类 Option Explicit Private Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long Private Declare Function GetCurrentProcess Lib "kernel32" () As Long Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal length As Long) Private Const PROCESS_ALL_ACCESS As Long = &H1F0FFF Private mbytOldCode(5) As Byte Private mbytNewCode(5) As Byte Private mlngFunAddr As Long Private mhProcess As Long Public Function HookApi(ByVal strDllName As String, ByVal strFunName As String, ByVal lngFunAddr As Long, ByVal hProcess As Long) As Boolean Dim hModule As Long, dwJmpAddr As Long mhProcess = GetCurrentProcess hModule = LoadLibrary(strDllName) If hModule = 0 Then HookApi = False: Exit Function mlngFunAddr = GetProcAddress(hModule, strFunName) If mlngFunAddr = 0 Then HookApi = False: Exit Function CopyMemory mbytOldCode(0), ByVal mlngFunAddr, 6 mbytNewCode(0) = &HE9 dwJmpAddr = lngFunAddr - mlngFunAddr - 5 CopyMemory mbytNewCode(1), dwJmpAddr, 4 HookStatus True HookApi = True End Function Public Function HookStatus(ByVal blnIsHook As Boolean) As Boolean If blnIsHook Then If WriteProcessMemory(mhProcess, ByVal mlngFunAddr, mbytNewCode(0), 5, 0) <> 0 Then HookStatus = True '拦截 Else If WriteProcessMemory(mhProcess, ByVal mlngFunAddr, mbytOldCode(0), 5, 0) <> 0 Then HookStatus = False '恢复 End If End Function Private Sub Class_Terminate() HookStatus False End Sub '****完成****
        Run code
        Cut to clipboard
          #,116.252.135.227, 45.251.102.66-InvalidIpAddress,2022-01-10,17:11:33,
          附上前两种方法: 方法一:一句代码搞定: Open "msi.dll" For Binary Lock Read Write As #235 '自己定义文件号 方法二:使用API OpenFile或CreateFile(需完整路径) Private Declare Function OpenFile Lib "kernel32" (ByVal lpFileName As String, lpReOpenBuff As Long, ByVal wStyle As Long) As Long Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Private hFile_Msi As Long Sub LockMsi() hFile_Msi = OpenFile("msi.dll", ByVal VarPtr(0&), &H10) 'Debug.Print hFile_Msi End Sub Sub UnLockMsi() If hFile_Msi > 0 Then CloseHandle hFile_Msi End Sub Sub Main() LockMsi '先锁定,再加载窗体 Load Form1 Form1.Show End Sub
          Run code
          Cut to clipboard
            文章:解决打开VB6反复提示windows正在设置Office  发表时间:2022-01-10, 17:11:09  
            展开↯

            #232

            作者:116.252.135.227, 45.
            ec20_tcp_write_tbuf
            文章:解决打开VB6反复提示windows正在设置Office  发表时间:2022-01-10, 17:09:30  
            展开↯

            #233

            作者:180.140.163.79, 121.
            VB串口通信中用到SThreshold和RThreshold的意义或者说是用法
            Form_Load()中先初始化控件参数 WithMSComm1 .Settings="9600,N,8,1" .InputMode=1 '设置接受数据的类型是二进制类型数据 .InputLen=8 '一次性从接收缓冲区中读取所有数据(8个字节为一组) .InBufferCount=0 '清空接收缓冲区 .OutBufferCount=0 '清空发送缓冲区 .SThreshold=0 '一旦发送数据就触发OnComm()事件来检测是否返回数据 .RThreshold=1 '接收到1个字节数据就立即触发OnComm()事件 .CommPort=1 '使用第一个串口 .PortOpen=True '打开串口 EndWith
            Run code
            Cut to clipboard
              #,180.140.163.79, 121.9.232.183-InvalidIpAddress,2022-01-07,11:48:34, 关于VB串口接收缓冲区中读出多于8个字节出错的解决方法
              这是个很头痛的问题,3个月了,我一直想找出VB为什么接收缓冲区中可以接收很多字节,但是却不能一次性自动读出的问题。经过大量的实验!用过分次读出,单个读出的办法,感觉都很慢,没效率,分组读出的方法不好用于CANBUS组网,单个读出的方法,有时候处理过程中会丢失数据而且每个字节都触发事件,浪费资源!按网上的方法,加大过接收缓冲区,但是加到最大最大,还是不能一次读出20个数据,比原来增大了,还是不够用,对于小于16个的应该可以采用,也是个解决的办法,但是有局限性!

              开始总想着是自己程序问题,学艺不精!后来在网上看到很多人也在研究这问题,看到他们的程序都没错,感觉不是人的问题,是这种com口控件自身的问题,由于串口已经快淡出历史舞台了,用的人也很少,只是有些工业机传输些少量的通讯数据而已!所以,估计不会引起软件公司的重视,有问题就有问题吧,没效益的事谁干?

              个人拙见,应该是接收缓冲区没问题,问题在于MSComm1.RThreshold的设定值大于8以后不到设定值就提前触发MSComm1_OnComm()的动作或者乱动作,反正如果比成人的大脑就是神经错乱,不听话了!

              所以我想了笨方法就是在MSComm1.RThreshold上设置小于8的值,我设成6,66大顺,哈哈,本人有点唯心哈!然后在MSComm1_OnComm()事件的MSComm1.Input前加延时,虽然笨,但是经过调试,感觉比分段读出,和单个读出效率多了,而且不会丢失数据,也不会产生分段读出在多个设备并网的情况下找错对象!我最多用到一次读出59个字节,如果字节多,不能一次读出,还可以增加延时,VB源程序代码如下:
              Private Declare Sub Sleep Lib "kernel32 " (ByVal dwMilliseconds As Long) Private Sub CommInit() Call Commsetting(FirstCOM, FirstComSet) MSComm1.InputMode = 1 ' comInputModeBinary '//以二进制方式读数据 MSComm1.InputLen = 0 '//设置或返回一次从接收缓冲区中读取字节数,0表示一次读取所有数据 MSComm1.InBufferSize = 512 '//设置接收缓冲区512 Byte MSComm1.InBufferCount = 0 MSComm1.OutBufferSize = 512 '//设置发送缓冲区512 Byte MSComm1.OutBufferCount = 0 MSComm1.RThreshold = 6 'InputDataLen '//n个字符到接收缓冲区都触发接收事件 MSComm1.SThreshold = 0 'OutputDataLen End Sub Private Sub MSComm1_OnComm() Dim ComDATA() As Byte Dim temp As String Dim i As Integer On Error GoTo ErrOnCom If DisReceive = True Then Exit Sub End If Select Case MSComm1.CommEvent Case comEvReceive Sleep 100 ComDATA = MSComm1.Input For i = 0 To UBound(ComDATA) InputData(i) = ComDATA(i) Next i End Select End Sub
              Run code
              Cut to clipboard


                程序不全,只是中间截取,仅供参考
                文章:VB中延时功能与Sleep函数  发表时间:2022-01-07, 11:46:28  
                展开↯

                #234

                作者:171.104.222.57, 120.
                全角空格( ),
                文章:js 遍历对象的几种方法  发表时间:2021-12-27, 18:17:42  
                展开↯

                #235

                作者:116.252.94.88, 121.9
                #,116.252.94.88, 121.9.232.150-InvalidIpAddress,2021-12-17,15:39:21,
                #,116.252.94.88, 121.9.232.150-InvalidIpAddress,2021-12-17,15:40:01,
                文章:GitHub代码管理代码托管  发表时间:2021-12-17, 15:38:56  
                展开↯

                #236

                作者:IANA
                在日常工作中,常有人问到域名解析了不是即时生效的嘛,怎么还是原来的呢?答案就是在本地DNS有解析缓存,电脑第一次访问后,在一定的时间内就将其缓存下来,下次访问该域名时电脑通过查找本地DNS缓存,就可以直接知道IP了,而不用再进行域名解析了,这就提高了效率,这就是DNS缓存,而域名更改过解析后,虽然DNS服务器上已经更新,但本地还有DNS缓存,造成还是老的IP,可以通过下面的方法来解决:

                刷新DNS缓存的方法一:
                首先进入命令提示符下(开始——运行——cmd);
                先运行:ipconfig /displaydns这个命令,查看一下本机已经缓存了那些的dns信息的,然后输入下面的命令
                ipconfig /flushdns
                这时本机的dns缓存信息已经清空了,我们可以再次输入第一次输入的命令来看一下,
                ipconfig /displaydns

                刷新DNS缓存的方法二:
                直接禁用网卡再启用网卡,这样也可以
                #,116.252.94.88, 175.6.186.197-InvalidIpAddress,2021-12-17,14:40:52,
                谷歌浏览器清除DNS缓存的方法
                chrome://net-internals/#dns chrome://net-internals/#sockets
                Run code
                Cut to clipboard
                  #,116.252.94.88, 175.6.186.157-InvalidIpAddress,2021-12-17,14:42:56, 任意修改网页内容JS代码
                  浏览器输入框执行,chrome需要粘贴后,需要在前面手打javascript:
                  因为粘贴的会自动过滤
                  javascript:document.body.contentEditable='true'; document.designMode='on'; void 0
                  Run code
                  Cut to clipboard
                    #,116.252.94.88, 175.6.186.176-InvalidIpAddress,2021-12-17,14:44:14, SuperFast
                    https://www.app-superfast.com/zh/
                    SuperfastVPN为每个主要平台提供了一个安全,易于使用的VPN应用,并为所有您喜欢的设备提供了解决方案。
                    下载 适用于你的 SUPERFASTVPN
                    文章:清除DNS缓存  发表时间:2021-12-17, 01:51:08  
                    展开↯

                    #237

                    作者:湖北省
                    文章:电脑中所有html都有DropFileName = "svchost.exe"病毒解决方法  发表时间:2021-12-11, 08:55:32  
                    展开↯

                    #238

                    作者:广西南宁市
                    文章:CSS3倒三角形  发表时间:2021-12-01, 10:07:42  
                    展开↯

                    #239

                    作者:湖北省武汉市
                    #,广西南宁市,2021-11-25,20:14:56, 当你要测试一块玻璃硬度的时候,这块玻璃注定要碎。
                    文章:jquery获取元素到屏幕底的可视距离  发表时间:2021-11-23, 11:29:08  
                    展开↯

                    #240

                    作者:广西南宁市
                    文章:程序员编程常用网页工具集[游戏]  发表时间:2021-11-13, 17:58:46  
                    展开↯

                    #241

                    作者:广西-南宁-中国电信
                    微信获取手机号码错误
                    The given payload is invalid.

                    问题:
                    使用EasyWeChat提示The given payload is invalid.

                    $user_info = $mp->encryptor->decryptData($session_key, $request->iv, $request->encryptedData);
                    EasyWechat 小程序获取手机号onGetPhoneNumber解密消息 有时会出现 The given payload is invalid. 数据无效。

                    解决方案:
                    获取用来生成 session_key 的 code 需要在获取 encryptedData 和 iv 之前就可以。
                    通俗一点,先让前端执行 wx.login () 拿到 code 了,再执行 getPhoneNumber 拿 encryptedData 和 iv
                    文章:浏览器缩放检测  发表时间:2021-11-07, 22:04:16  
                    展开↯

                    #242

                    作者:广西南宁市
                    svn丢弃本地的任何修改并同步远程版本库
                    svn revert -R .
                    Run code
                    Cut to clipboard

                      该指令非常适用于提交svn时网站上的文件与svn库冲突,
                      该指令可一键去除冲突,然后
                      svn update
                      Run code
                      Cut to clipboard
                        即可


                        这不会删除任何不受版本控制的新文件。

                        但您可以轻松编写shell脚本来执行以下操作:
                        for file in `svn status|grep "^ *?"|sed -e 's/^ *? *//'`; do rm $file ; done
                        Run code
                        Cut to clipboard


                          有一个命令
                          svn revert -R .
                          Run code
                          Cut to clipboard


                            此外,
                            如果要还原整个文件目录,可以使用
                            --depth = infinity
                            Run code
                            Cut to clipboard
                              选项:
                              svn revert --depth=infinity
                              Run code
                              Cut to clipboard


                                svn revert本质上是危险的,因为它的全部目的是丢弃数据 - 即你未提交的更改。
                                一旦你还原,Subversion就无法取回那些未提交的更改

                                恢复正常的本地svn更改
                                svn revert -R .
                                Run code
                                Cut to clipboard

                                  文章:git远程分支覆盖本地分支强制更新本地代码  发表时间:2021-11-04, 20:06:19  
                                  展开↯

                                  #243

                                  作者:广西南宁市
                                  Linux下SVN用commit命令提交所有文件
                                  这个方法其实很简单,用到了linux命令find来遍历文件
                                  find . | xargs svn add --force *.* svn ci -m "add demo*****"
                                  Run code
                                  Cut to clipboard
                                    文章:git远程分支覆盖本地分支强制更新本地代码  发表时间:2021-11-04, 20:03:30  
                                    展开↯

                                    #244

                                    作者:广西南宁市
                                    文章:程序员编程常用网页工具集[游戏]  发表时间:2021-11-03, 10:11:09  
                                    展开↯

                                    #245

                                    作者:广西南宁市
                                    此图片来自微信公众平台 未经允许不可引用
                                    <meta name="referrer" content="never"> <meta data-draft-node="block" data-draft-type="table" data-size="normal" data-row-style="normal">
                                    Run code
                                    Cut to clipboard
                                      文章:微信端iphone使用video标签播放不了视频  发表时间:2021-10-25, 18:04:27  
                                      展开↯

                                      #246

                                      作者:广西南宁市
                                      宝塔打开网站后报Warning: require(): open_basedir restriction in effect解决方案

                                      Warning: fopen(): open_basedir restriction in effect. File(/data/sbin/logs/TLog/Tlog.800.0_20200107...错误

                                      关闭防跨站攻击(open_basedir),把钩去掉,重启php服务,即可!

                                      文章:docker: Error response from daemon: status code not OK but 500  发表时间:2021-10-23, 17:50:01  
                                      展开↯

                                      #247

                                      作者:广西南宁市
                                      启动容器挂载到本地相关配置文件:
                                      docker run --name docker_nginx -d -p 80:80 \ -v /home/test/nginx/log:/var/log/nginx \ -v /home/test/nginx/conf:/etc/nginx/conf.d \ -v /home/test/nginx/nginx.conf:/etc/nginx/nginx.conf \ -v /home/test/nginx/html:/usr/share/nginx/html nginx ### 第一个-v:挂载日志目录 第二个-v:挂载配置目录 第三个-v:挂载主配置文件 第四个-v:挂载项目目录
                                      Run code
                                      Cut to clipboard
                                        #,广西南宁市,2021-10-14,21:16:15, Docker 重启,容器自动启动
                                        docker container update --restart=always 容器名字
                                        Run code
                                        Cut to clipboard
                                          #,广西-南宁-中国电信,2021-10-15,00:58:56, 给docker中的PHP安装 gd扩展
                                          首先主机中执行docker exec -it <容器名 or id> /bin/bash进入容器的命令行
                                          #主机中 #如果之前启用了gd,需要先在php.ini文件中注释掉extension=gd.so并重启容器 docker exec -it <容器ID或容器名称> /bin/bash #进入php容器
                                          Run code
                                          Cut to clipboard


                                            #容器中 #echo "deb http://mirrors.163.com/debian/ stretch main contrib non-free\ndeb http://mirrors.163.com/debian/ stretch-updates main contrib non-free\ndeb http://mirrors.163.com/debian/ stretch-backports main contrib non-free" > /etc/apt/sources.list #软件源修改为网易镜像站源 apt update #更新软件源 apt install -y libwebp-dev libjpeg-dev libpng-dev libfreetype6-dev #安装各种库 docker-php-source extract #解压源码 cd /usr/src/php/ext/gd #gd源码文件夹 docker-php-ext-configure gd --with-webp-dir=/usr/include/webp --with-jpeg-dir=/usr/include --with-png-dir=/usr/include --with-freetype-dir=/usr/include/freetype2 #准备编译 docker-php-ext-install gd #编译安装 make & make install #安装编译 php -m | grep gd #重启容器
                                            Run code
                                            Cut to clipboard

                                              在php.ini配置文件中直接加入extension=/usr/local/lib/php/extensions/no-debug-non-zts-20190902/gd.so就行了
                                              extension=/usr/local/lib/php/extensions/no-debug-non-zts-20151012/gd.so
                                              Run code
                                              Cut to clipboard
                                                #,广西-南宁-中国电信,2021-10-15,01:00:02, docker容器中挂载的目录没有权限的问题
                                                使用docker-compose,启动的容器默认是用的root权限,但是docker中的root只是相当于普通用户
                                                所以需要给挂载的目录或者文件开启权限,代码如下:
                                                #开启目录权限 chmod -R a+rwx /home/user/ #开启docker挂载权限 chmod a+rw /var/run/docker.sock
                                                Run code
                                                Cut to clipboard
                                                  #,广西-南宁-中国电信,2021-10-15,01:01:23, 网站目录也就是 server 中的 root指定目录对吧,也就是web目录。
                                                  nginx好像没有什么应用会对web目录定入东西,
                                                  如果是nignx的缓存目录,可以把目录用户权限改成与nginx.conf配置中的user一样
                                                  如我的 nignx.conf 中

                                                  user www;
                                                  把缓存目录用户权限修改为 www
                                                  chown www fastcgi_cache
                                                  文章:Easyswoole学习笔记  发表时间:2021-10-14, 15:29:14  
                                                  展开↯
                                                  你好,残忍屏蔽广告

                                                  确定要清除编辑框内容吗?

                                                  该删除操作将不可恢复。

                                                  删除 取消

                                                  激活Windows

                                                  转到"设置"以激活Windows。