有时候我们在服务器上执行某个脚本的时候执行时间会很长,如果ssh中断了连接,那么任务也会随之退出。 总不能一直守在电脑屏幕跟前看着吧,为了避免任务执行到一半因为网络问题突然中断的情况,我们需要把任务放入后台运行。使用如下方式执行脚本即可解决这个问题。 使用执行laravel框架中的命令举例: 这里使用php 执行了 laravel框架中的artisan脚本 ,传入了要执行的具体的业务命令”get-data” ,并且携带了”get-data”命令需要的参数”–data-type=a” [crayon-67680…
安装完swoole之后,执行php-m报错的处理方式
使用swoole官网提供的pecl方式安装swoole,中间遇到过缺少依赖类库,根据提示安即可。 安装完成之后把在php.ini文件中添加extension=swoole,然后执php -m看看是否成功加载swoole扩展。 结果报错了。。
1 2 |
$ php -m PHP Warning: PHP Startup: Unable to load dynamic library 'swoole.so' (tried: /usr/lib64/php/modules/swoole.so (/usr/lib64/php/modules/swoole.so: undefined symbol: curl_CURLFile_class), /usr/lib64/php/modules/swoole.so.so (/usr/lib64/php/modules/swoole.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 |
看起来这个错误的意思是没找到curl库。 ??? 但是明明已经安装了curl啊。然后在php.ini文件中找是否开启了curl,结果发现没有extension=curl。 甚至php -m中列出来的所有扩展,在php.ini文件中都没有列出extension。 这是什么情况?。 然…
centos yum安装PHP或者解决版本冲突
当使用yum安装PHP或者PHP的一些扩展的时候遇到版本不一致问题,比如类似下面这种错误
1 2 3 |
# yum install -y php-pear Requires: php-common(x86-64) = 5.4.16-48.el7 Installed: php-common-7.4.33-4.el7.remi.x86_64 (@remi-php74) |
或者
1 2 3 4 5 6 |
#yum install php-devel Processing Conflict: php74-cli-7.4.30-1.el7.ius.x86_64 conflicts php-cli < 7.4.30-1.el7.ius --> Processing Conflict: php74-common-7.4.30-1.el7.ius.x86_64 conflicts php-common < 7.4.30-1.el7.ius --> Processing Conflict: php74-json-7.4.30-1.el7.ius.x86_64 conflicts php-json < 7.4.30-1.el7.ius --> Processing Conflict: php74-pecl-zip-1.19.0-1.el7.ius.x86_64 conflicts php-pecl-zip < 1.19.0-1.el7.ius |
上面两个示例是在安装PHP扩展php-pear 和PHP的开发工具包php-devel的时候报错了,提示的就是PHP版本导致的软件包冲突。 这种问题产生的原因可能是因为系统默认有一个PHP 5.4的版本,后来又使用yum安装了php7.4的版本,但是yum里面不知道什么原因,还是只认php5.4 .. 。 所以出现这种问题的时候就很恶心。 解决方式如下: remi源…
Windows使用gcc编译C语言代码中文出现乱码的现象
因为gcc默认是不支持中文输出的,所以在编译的时候指定编码格式即可。
1 |
gcc -fexec-charset=gbk main.c |
laravel日志中的时间加上微秒
有时候在一些场景下,想看看日志写入的毫秒甚至微秒数,但是laravel的日志中记录的时间默认最小单位只到秒,如下示例:
1 2 3 |
for ($i=1; $i < 100; $i++) { Log::info($i); } |
1 2 3 4 5 6 7 8 9 10 11 |
[2022-12-09 15:49:29] local.INFO: 1 [2022-12-09 15:49:29] local.INFO: 2 [2022-12-09 15:49:29] local.INFO: 3 [2022-12-09 15:49:29] local.INFO: 4 [2022-12-09 15:49:29] local.INFO: 5 [2022-12-09 15:49:29] local.INFO: 6 [2022-12-09 15:49:29] local.INFO: 7 [2022-12-09 15:49:29] local.INFO: 8 [2022-12-09 15:49:29] local.INFO: 9 [2022-12-09 15:49:29] local.INFO: 10 ... |
如果要加上微秒只需要改动一下config/logging.php配置文件即可,我们以daily示例。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
'daily' => [ 'driver' => 'daily', 'path' => storage_path('logs/laravel.log'), 'level' => env('LOG_LEVEL', 'debug'), 'days' => 14, //日志里面的时间增加微妙 'formatter' => Monolog\Formatter\LineFormatter::class, 'formatter_with' => [ 'dateFormat' => 'Y-m-d H:i:s.u', //框架默认日志内容格式,如有需求在改动。 //'format' => "[%datetime%] %channel%.%level_name%: %message% %context% %extra%\n", //加上微秒之后,如果日志中不打印context和extra字段的话,默认会显示两个空白的大括号[],下面两个为true可以控制两个空白大括号默认不显示。 'allowInlineLineBreaks' => true, 'ignoreEmptyContextAndExtra' => true, ], ], |
根据上面示例,在daily里面加上formatter , formatter_with即可。 最后写出来的日志效果: [crayon-6768090a680f3064138123/…
手动申请 Let’s Encrypt 通配符证书
如果想弄成自动续签的证书 还要把阿里云的apikey配置上, 个人感觉不太安全,就不弄了。就手动申请吧, 也不费事。 执行下面的命令,然后会进入交互界面。
1 |
sudo certbot certonly --manual --preferred-challenges=dns-01 --register-unsafely-without-email |
1 2 3 |
certonly --manual #这两个参数代表进入交互模式 --preferred-challenges=dns-01 #这个代表使用dns验证 --register-unsafely-without-email #如果不加这个参数,需要你输入邮箱。 反正是自己用,就不加邮箱了。 |
当出现:Please enter the domain name(s) you would like on your certificate (comma and/or space separated) (Enter ‘c’ to cancel) 的时候,就输入要申请证书的域名, 如果要…
MYSQL配置文件的加载顺序
一直没仔细了解过mysql的配置文件加载策略,然后看了下文档。 https://dev.mysql.com/doc/refman/5.7/en/option-files.html 在windows上和linux上加载的顺序分别是从上到下: windows读取顺序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
1.%WINDIR%\my.ini, %WINDIR%\my.cnf 2.C:\my.ini, C:\my.cnf 3.BASEDIR\my.ini, BASEDIR\my.cnf 4.defaults-extra-file 用指定的文件 --defaults-extra-file(如果有) 5.%APPDATA%\MySQL\.mylogin.cnf %WINDIR%代表Windows目录的位置C:\WINDOWS,用下面的命令可以从WINDIR环境变量的值确定其确切的位置 C:\> echo %WINDIR% %APPDATA%表示Windows应用程序数据目录的值。使用以下命令从APPDATA环境变量的值确定其确切位置 C:\> echo %APPDATA% BASEDIR表示MySQL基本安装目录 |
在Unix和类似Unix的系统上读取顺序
1 2 3 4 5 6 7 8 9 10 11 12 |
1./etc/my.cnf 2./etc/mysql/my.cnf 3.SYSCONFDIR/my.cnf 4.$MYSQL_HOME/my.cnf 特定于服务器的选项(仅适用于服务器) 5.defaults-extra-file 用指定的文件 --defaults-extra-file(如果有) 6.~/.my.cnf 7.~/.mylogin.cnf 用户特定的登录路径选项(仅客户端) “~”表示用户的家目录($HOME的值) SYSCONFDIR表示在构建MySQL时SYSCONFDIR 使用CMake选项指定的目录。默认情况下,这是etc位于内置安装目录下的目录。 MYSQL_HOME是一个环境变量,其中包含服务器特定my.cnf文件所在目录的路径。如果 MYSQL_HOME未设置,并且使用mysqld_safe程序启动服务器,则 mysqld_safe将其设置 BASEDIR为MySQL基本安装目录。 |
如果某选项在多个配置文件中都存在,那么后面的配置会覆盖之前的,除非使用 -defaults-file 指定文件 可以用下面这个命令查看mysql加载…
php的超全局环境变量$_ENV是空的?
出于好奇 打印了下 $_ENV[“USER”] ,结果告诉我没有USER这个环境变量, 然后我在终端执行了一下 env , 明明看到有的 USER=hunter 然后我用 getenv(“USER”) , 妥妥的没问题,可以获取到。 那是怎么回事 ? 查了一下, 看到是因为 $_ENV受到php.ini文件中 variables_order这个选项的控制,这个选项的默认值是GPCS,把它改成EGPCS就可以了。
1 |
variables_order = "EGPCS" |
EGPCS的意思是: E:ENV G:GET P:POST C:COO…
LINUX文件和目录权限
linux的文件和目录都有 rwx的权限 ,老忘记这三个权限对应着文件和目录的哪些操作 ,所以就记一下。 首先我们知道linux有用户和用户组的概念,所以一个文件或者目录的权限分别对应着三种不同的角色:文件拥有者的权限,同群组的权限,其他组的权限。 比如一个文件的权限是 rwxr-xr– 我们把上面这个权限拆分为三组,[rwx] [r-x] [r–] 第一组代表:文件拥有者的权限 第二组代表:相同群组的权限 第三组代表:其他组的权限 其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。这三个权限的位置不会改变,…
【Docker系列】单独部署nginx容器和php-fpm容器容易忽略的问题
以往大部分时间都是习惯了nginx 和php-fpm在同一台机器上,当在docker把ngnx 和php-fpm单独分成各自的容器以后还是有些细节要注意。 1.运行nginx容器的时候并且加了-v挂载配置文件目录的时候要先把配置文件copy出来 ,否则nginx会启动失败, 因为挂在了配置文件目录, 但是你的宿主机上并没有这些配置。 copy方法就是 先临时启动一个nginx容器, 比如 docker run -d –name tmp-nginx nginx:latest 。然后docker cp tmp-nignx:/xxx /宿主机的目录 xxx一定是配置文件的目录 ,…