破解原理
删除试用的本地注册信息,将试用期还原到第 0 天。
因为系统版本和设置不同,下面提供了三个脚本,每个都尝试运行一遍,找到适合自己系统的那个脚本即可。
注意要使用 sudo 执行。
本文将持续更新,将最新的脚本更新到这里,保持激活方案始终有效。
如果点击链接无法下载,复制链接在新窗口打开即可。
reset_navicat.sh
reset_navicat_new.sh
reset_navicat_52pojie.sh
删除试用的本地注册信息,将试用期还原到第 0 天。
因为系统版本和设置不同,下面提供了三个脚本,每个都尝试运行一遍,找到适合自己系统的那个脚本即可。
注意要使用 sudo 执行。
本文将持续更新,将最新的脚本更新到这里,保持激活方案始终有效。
如果点击链接无法下载,复制链接在新窗口打开即可。
reset_navicat.sh
reset_navicat_new.sh
reset_navicat_52pojie.sh
比如我在本地和服务端都使用 git 来管理代码,当本地代码修改过后,想将改动升级到服务端。这时,我应该先将本地的代码 commit、合并到发布分支、push,然后再 ssh 登录到服务器,在服务器上执行git pull,将代码拉下来。这个过程看似简单,但是如果每天需要执行多次的话,就非常麻烦了。
简单的实现一个 sh 脚本,比如下面
ssh -p 121 root@x.x.x.x
cd /www/wwwroot/xx.com
git pull
执行此脚本,会发现执行到第一行之后,终端会阻塞,因为 ssh 命令是一个阻塞命令,后续的命令将无法执行。
expect 可以实现:开启一个子进程,然后监控这个子进程的输出,按照输出的内容来决定下一步执行的命令。在上面的例子中,就是开启一个子的 ssh 登录的进程,然后监控这个子进程的输出,这样就可以根据输出来决定下面执行的命令啦。
先看一个简单的 expect 脚本。
echo '这是一个 shell 脚本'
/usr/bin/expect << eof
set timeout -1
spawn ssh -p 121 root@x.x.x.x
expect "root@*"
send "cd /www/wwwroot/xx/ \r"
expect "root@*"
send "mysqldump -uroot -h localhost -ppassword dbname > back.sql \r"
expect "root@*"
send "zip db.zip back.sql \r"
expect "root@*"
send "exit \r"
eof
echo 'shell 脚本结束'
/usr/bin/expect <<eof
和 eof
之间是 expect 脚本,而不是shell脚本。/usr/bin/expect
是 expect 的安装目录通过上面 几点估计你就可以很明白 expect 的工作逻辑了。上面的脚本实现了 ssh 登录一个服务器,然后导出一个数据库并将 导出的 sql 文件压缩。
使用大括号的语法发送的命令将异步执行,不使用大括号发送的命令将同步执行。等待同步执行结果后才执行expect匹配。如:
expect "root@*" {send "cd /www/dist/web/ \r"}
此命令将异步执行,如:
expect "root@*"
send "cd /www/dist/web/ \r"
expect "root@*"
此命令将同步执行,直到cd命令的结果返回才执行下一expect命令。
使用-d参数可以用调试模式执行命令,这在调试的时候非常有用。如:
/usr/bin/expect-d
<<eof
send执行的命令有超时限制,如果想设定为无限等待阻塞命令,可以使用timeout选项。如:
echo '🗂 dump 数据 并 zip '
/usr/bin/expect << eof
set timeout -1
spawn ssh -p 1222 root@x.x.x.x
send "cd /www/wwwroot/xxx.com\r"
expect "root@*"
send "zip db.zip db.sql \r"
expect "root@*"
send "xxxxx"
eof
echo done!
expect是一种编程语言,expect和send是此语言中两个独立的命令。一般来讲一行expect,一行send。
服务的自动化部署是一个常见的需求,尤其是当服务较多时。比如一个服务需要部署到多台服务器(负载均衡或者私有化部署)。这时手动部署就成了灾难。麻烦且不稳定,一个不留神就会导致不可预料的结果。此时有两种解决方案。
前者成本较低,但是功能较弱,适合小型项目。后者功能强大,但学习和部署成本较高,适合大型项目(当然如果有jenkens的部署经验,小项目也同样适用)。
https://cloud.shisu.edu.cn/v/link/view/ac71be7b531a420f85db45bfda62f73d
执行下方命令即可,如果命令无法执行,可以先下载到本地(https://raw.githubusercontent.com/jimye/OfficeUninstall/master/office_uninstaller.sh) ,保存到 sh 文件中执行即可。
sudo sh -c curl -s https://raw.githubusercontent.com/jimye/OfficeUninstall/master/office_uninstaller.sh | sh
OfficeMacStandard2022MultiLanguageMacX22-74226.iso
Microsoft_365_and_Office_16.76.23081101_BusinessPro_Installer
注意:本文基于php5.6
,不同版本的php对应不同版本的xdebug。对应的xdebug配置也不同。
参考另一篇文章,如何在linux上安装xdebug插件。
开启xdebug扩展,并且配置xdebug配置信息。
注意:不同版本的xdebug配置不同
host.docker.internal 是固定写法
[xdebug]
zend_extension=/www/server/php/56/lib/php/extensions/no-debug-non-zts-20131226/xdebug.so
xdebug.remote_enable = On
xdebug.remote_handler = dbgp
xdebug.remote_host= host.docker.internal
xdebug.remote_autostart=1
xdebug.remote_port = 9001
xdebug.idekey = PHPSTORM
按照下图所示步骤即可开启断点调试
注意:本文基于php8.2,不同版本的php对应不同版本的xdebug。对应的xdebug配置也不同。php5.6版本的配置在另一篇文章中。
请参考另一篇文章,如何在linux上安装xdebug插件。
开启xdebug扩展,并且配置xdebug配置信息。
zend_extension = xdebug(注意:不是extension = xdebug)
[xdebug]
zend_extension="/www/server/php/82/lib/php/extensions/no-debug-non-zts-20220829/xdebug.so"
xdebug.log=xdebug.log
xdebug.mode=debug
xdebug.start_with_request = yes
xdebug.remote_handler="dbgp"
xdebug.client_port = 9001
; 此配置值就是下面的固定字符串,不用替换为某个ip
xdebug.client_host= "host.docker.internal"
xdebug.idekey="PHPSTORM"
xdebug.discover_client_host=true
如下图端口配置为9001,请和php.ini中的端口保持一致,调试时,php中的xdebug插件会将调试信息通过此端口请求到phpstorm(xdebug为客户端,phpstorm为服务端,组成一个c/s结构,通讯协议为DBGp)
配置phpstorm的端口,需要和php.ini中的保持一致,phpstorm作为服务端将监听这个端口,接收来自xdebug的调试信息。
配置服务器路径和本机项目路径的map(映射),这样phpstorm才能将接收到的调试信息应用到本地的对应文件的代码中。
配置调试项目为php remote debug。
点击调试按钮,phpstorm将开始监听调试信息,命中断点。
Xdebug是第三方开发商开发的PHP扩展,并不在php源代码中,要到官网下载源码编译安装,不要试图下载php源代码然后像编译其他官方扩展一样编译安装xdebug。
在linux上安装xdebug非常简单,只需要将phpinfo信息提交到xdebug官网,分析后按照官网的安装不好走一步一步严格执行即可(请注意,严格的一步一步执行,不要跳过或者自己手动抄写命令,我就是因为安装完后大意,将php.ini文件中的zend_extension=xdebug写成了extension=xdebug导致怎么也无法命中调试断点,后来找了很长时间才定位到问题)只要是严格按照步骤走,整个安装过程会非常简单、非常快。
执行下方命令,复制输入内容,粘贴到 https://xdebug.org/wizard 中,点击分析按钮,然后严格按照指示的步骤来执行即可。
php -r 'phpinfo();' > phpinfo.txt
执行./configure命令时,可能会出现找不到php-config的错误,此文件一般都在php的安装目录下(php-config不是一个第三方的linux软件包,所以请不要试图使用yum install php-config的方法来解决此问题)。执行命令的时候指定php-config的路径即可,如下:
./configure --with-php-config=/www/server/php/82/bin/php-config
安装完之后,通过查看phpinfo来确定是否已经安装成功。下面是在宝塔中查看phpinfo的结果。
本文只讲解如何安装php的xdebug插件,关于配置xdebug的调试环境,请参考另一篇文章,具体讲如何实现使用xdebug远程调试docker中的项目。
本文基于mac平台。
因为要使用php8.2和laravel10来开发系统,在搭建开发环境的时候着实是废了不少劲。探索了不少方案,终于找到了一个最佳实践,这里做一个总结。
先说下尝试过的方案
mxsrvs,之前在开发php5.6和php7.4的系统时,都是使用的mxsrvs作为集成开发环境。问题是这个环境中不支持php8,尝试自己编译一个php8的版本适配到mxsrvs,最终因为遇到 https://segmentfault.com/q/1010000044189821?_ea=317144307 这个问题,导致无法在mxsrvs上使用php8,遂放弃此方案。另外已经和mxsrvs的作者取得联系,老哥已经停止维护此工具很久了,非常可惜。为了方案的可持续性,所以放弃mxsrvs。
phpstudy,当初在windows平台开发的时候,使用的就是phpstudy,下载了一个mac版本的phpstudy看了下,不支持php8,而且软件完成度很低,bug不少,不像是一个可用的东西,遂放弃此方案。
laravel herd,laravel自己开发的一个集成开发环境。这个项目在刚开始和快速迭代的阶段,功能完成度较低,无法方便的创建项目,无法管理php插件,遂放弃此方案。
mamp,此工具pro版本收费,但是可以找到破解版的,不好的地方是不能同时支持多个mysql版本,遂放弃此方案。
使用docker+堡塔的方式搭建开发环境。因为平时我服务器上使用的就是堡塔面板,所以对在宝塔中的各项操作都非常熟悉,加上docker可快速部署的特性,最后选择使用这个方案。在落地这个方案的时候也是遇到了不少的问题,但最终都一一克服,最终形成自己的这套最佳实践。本系列搭建php开发环境文章从各个环节来描述此方案的搭建过程,包括单元测试、xdebug调试如何实现等。
参考文章:https://blog.csdn.net/weixin_44467587/article/details/130265470
默认用户名:btpanel
默认密码:btpaneldocker
默认ssh密码:btpaneldocker
数据库root密码需要重置一下,否则无法创建数据库,应该是是做镜像的人没做好。