PHP框架的目的: 区割代码 管理逻辑 降低成本 达成共识 片段冶理 防冶腐败 降低耦合 协同开发 默契达成 抵御安全
Atom扩展: https://github.com/liexusong/atom

git clone https://github.com/liexusong/atom.git
cd atom/
phpize
./configure
make && make install

cp -rf  /usr/local/php/lib/php/extensions/no-debug-non-zts-20180731/atom.so /usr/local/php/ext/.

cat /usr/local/php/etc/php.d/atom.ini
extension=atom.so
[atom]
atom.datacenter = integer
atom.worker = integer
atom.twepoch = uint64




#php atom.php
540899828998078464
2020-02-01 14:22:48

能反解。

来自:https://mp.weixin.qq.com/s/bagOgzdwLyZv_ITNVnYfoQ?
最开始编辑器是用的sublime的,后来因为phpstome的强大功能换用的phpstome,但带的主题实在看不惯,就有了这片文章。

闲话少说,开始正文。

一、先要下载Monokai-Sublime主题文件,如下网盘链接。
https://pan.baidu.com/s/1jPDYISHdQmwSkdoRmOSbAQ

PhpStorm ,找到 file,setting,Color Scheme(快捷键 Ctrl+Alt+S)
Import Scheme。。。导入:Monokai_Sublime.icls,选:Monokai-Sublime Copy。



MacOS系统上,JetBrains诸如PhpStorm、IntelliJ IDEA、PyCharm等各种IDE在编辑器上默认不显示横向滚动条。当设置的字体比较大,需要向右滑动时很可能因为没有横向滚动条而大为恼火。

解决方法有两个:

滚动条受系统全局设置影响,因此我们可以设置总是显示滚动条。操作方法如下:打开系统设置-》通用,“显示滚动条”选项选“始终”;
滚动鼠标滑轮时按shift,此时是滚动横向滚动条。
注意::IDE中的"wrap on typing"指的是超过多少个字符自动换行,与横向滚动条不冲突。例如设置大号字体,60个字符横向显示不了,故而需要滚动条;但此时一行未超过80(或120)个字符,不会自动换行。
#mv libzip.so.5 /tmp/.
mv: overwrite ‘/tmp/./libzip.so.5’? y

[root@rpmbuild_server_bj_yz_10_10_0_158:/usr/local/libzip/lib]
#ls
libzip  libzip.a  libzip.la  libzip.so  libzip.so.5.0.0  pkgconfig

[root@rpmbuild_server_bj_yz_10_10_0_158:/usr/local/libzip/lib]
#ls
libzip  libzip.a  libzip.la  libzip.so  libzip.so.5.0.0  pkgconfig

[root@rpmbuild_server_bj_yz_10_10_0_158:/usr/local/libzip/lib]
#ldconfig  -v|grep libzip
ldconfig: Can't stat /libx32: No such file or directory
ldconfig: Path `/usr/lib' given more than once
ldconfig: Path `/usr/lib64' given more than once
ldconfig: Can't stat /usr/libx32: No such file or directory
/usr/local/libzip/lib:
        libzip.so.5 -> libzip.so.5.0.0 (changed)

=========================================
CentOS 7编译安装PHP 7.4提示 libzip 版本问题:
https://blog.csdn.net/tan88881111/article/details/121599297

报错提示非常明显,配置程序没有找到libzip库,你用yum安装libzip-devel的话,安装的版本是0.10,版本达不到要求。所以,此时我们需要卸载掉yum安装的libzip然后手动安装新版。
/usr/local/libzip/lib:
        libzip.so.5 -> libzip.so.5.0.0

[root@rpmbuild_server_bj_yz_10_10_0_158:/tmp/php-7.3.16]
#cd /usr/local/libzip/lib

[root@rpmbuild_server_bj_yz_10_10_0_158:/usr/local/libzip/lib]
#ls
libzip  libzip.a  libzip.la  libzip.so  libzip.so.5  libzip.so.5.0.0  pkgconfig


checking libzip... yes

Please reinstall the libzip distribution
checking for libzip... not found
configure: error: Please reinstall the libzip distribution

vim ./configure
追踪$LIBZIP_LIBDIR,发现它是一个lib库:
  save_old_LDFLAGS=$LDFLAGS
  ac_stuff="
      -L$LIBZIP_LIBDIR
    "

再向上查找:


再向上找这个LIBZIP_LIBDIR变量的来源:





checking libzip... =================
echo $LIBZIP_LIBDIR



PHP旧版本,我这编译php55/   php56/   php7/   php71/  php72/ 都没有出现这个问题,php73出现了这个问题。


configure: error: Please reinstall the libzip distribution
rpm -ql libzip-devel|grep -v man
/usr/include/zip.h
/usr/include/zipconf-64.h
/usr/include/zipconf.h
/usr/lib64/libzip
/usr/lib64/libzip.so
/usr/lib64/libzip/include
/usr/lib64/libzip/include/zipconf.h
/usr/lib64/pkgconfig/libzip.pc
出现:
configure: error: Please reinstall the libzip distribution

于是:
yum install -y libzip-devel

编译PHP时出现新问题:
checking for libzip... configure: error: system libzip must be upgraded to version >= 0.11
error: Bad exit status from /root/rpmbuild/tmp/rpm-tmp.gsrSs0 (%build)
经过源码安装是最新的版本,解决办法:


再重新编译PHP7.3,后终于成功完成编译。


cat /usr/local/lib/pkgconfig/libzip.pc


find /usr/local/include/ -name "zip.h"
/usr/local/include/zip.h

rpm -qf /usr/local/include/zip.h
file /usr/local/include/zip.h is not owned by any package

rpm -qf /usr/local/include/zipconf.h
file /usr/local/include/zipconf.h is not owned by any package


ldd /usr/local/php/bin/php |grep libzip   #php 7.3.12
        libzip.so.5 => /usr/local/lib/libzip.so.5 (0x00007f3be1b38000)

旧的php,PHP 7.1.6,无任何返回:ldd /usr/local/php/bin/php |grep libzip


以上实践摘取自 :https://www.php.cn/php-weizijiaocheng-414091.html
https://blog.csdn.net/liuyeluoqing/article/details/81697954
https://blog.qzze.com/820.html


CentOS6.X上rpmbuild  -ba memcache-php73-4.0.5.el6.x86_64.spec
出现error: Autoconf version 2.64 or higher is required  :
https://blog.51cto.com/11736068/2110670
type用法,查找对应命令的返回值:
type cwww
cwww is an alias for cd /data/www/

k8s里的shell代码运行:


函数检测:

有一个n位数,它的各位数字翻转以后组成新的n位数,原来的n位数是新n位数的n倍,求所有可能的n位数。
如:
8712/4 = 2,178


鸟哥的代码:

#make calcnumber
cc     calcnumber.c   -o calcnumber

#./calcnumber
0 = 0 / 1
1 = 1 / 1
2 = 2 / 1
3 = 3 / 1
4 = 4 / 1
5 = 5 / 1
6 = 6 / 1
7 = 7 / 1
8 = 8 / 1
9 = 9 / 1
2178 = 8712 / 4
108901089 = 980109801 / 9
109999989 = 989999901 / 9


http://live.aulddays.com/tech/11/linux-shell-too-great-base-error.htm


我用shell写了一个:
#cat *.sh
#!/bin/bash
for i in {1000..9999} ;do
    rev=$(echo $i | rev)
    div=$(echo "$rev/4" | bc)
    if [[ "10#$i" -eq "10#$div" ]];then
      echo "result="$i;
    fi
done

sh calcnumber.sh
result=1997  #这个是小数四舍五入后相等的,shell在处理小数这方面有些弱,得靠BC。
result=2178
xargs的作用在于,大多数命令(比如rm、mkdir、ls)与管道一起使用时,都需要xargs将标准输入转为命令行参数。
echo "one two three" | xargs mkdir
上面的代码等同于mkdir one two three。如果不加xargs就会报错,提示mkdir缺少操作参数。

一)xrags删文件提示确认:
使用xargs命令以后,由于存在转换参数过程,有时需要确认一下到底执行的是什么命令。
-p参数打印出要执行的命令,询问用户是否要执行。

echo 'one two three' | xargs -p rm -rf
rm -rf one two three ?...y
上面的命令执行以后,会打印出最终要执行的命令,让用户确认。用户输入y以后(大小写皆可),才会真正执行。

-t参数则是打印出最终要执行的命令,然后直接执行,不需要用户确认。
echo 'one two three' | xargs -t rm -rf



二)文本里的多行目录名建立成文件夹:
如果xargs要将命令行参数传给多个命令,可以使用-I参数。

-I指定每一项命令行参数的替代字符串。
$ cat foo.txt
one
two
three

$ cat foo.txt | xargs -I file sh -c 'echo file; mkdir file'
one
two
three

$ ls
one two three
上面代码中,foo.txt是一个三行的文本文件。我们希望对每一项命令行参数,执行两个命令(echo和mkdir),使用-I file表示file是命令行参数的替代字符串。执行命令时,具体的参数会替代掉echo file; mkdir file里面的两个file。


来自:http://www.ruanyifeng.com/blog/2019/08/xargs-tutorial.html
利用 Redis 事务特征
redis 事务是原子操作,可以保证订单处理的过程中数据没有被其它并发的进程修改。
示例代码:

使用 ab 测试
$ ab -t 20 -c 10 http://192.168.1.104:9509/

经测试结果对比,redis 事务方式优于文件排他锁方式,而文件排他锁方式中,非阻塞模式优于阻塞模式。

更多,来自:https://199508.com/post/2054


echo strrpos("jack.txt",".");
4

如果你有一个文件名,你需要从PHP中删除扩展名(extension),有很多方法可以做到这一点。这里有三种方法。


substr(strrchr($file, '.'), 1);

https://www.cnblogs.com/justdoityangbo/p/11113579.html

使用pathinfo()函数

pathinfo()函数返回一个包含dirname,basename,extension和filename的数组。或者,您可以传递一个PATHINFO_常量,并返回完整文件名的那一部分:

$filename ='filename.html';
$without_extension = pathinfo($filename, PATHINFO_FILENAME);
如果文件名包含完整路径,则仅返回不带扩展名的文件名。


使用basename()函数

如果扩展名是已知的并且对于所有文件名是相同的,则可以将第二个可选参数传递给basename()以告诉它从文件名中删除该扩展名:

$filename ='filename.html';
$without_extension = basename($filename,'.html');
如果文件名包含完整路径,则仅返回不带扩展名的文件名。

使用substr和strrpos

$filename ='filename.html';
$without_extension = substr($filename, 0, strrpos($filename, "."));
如果文件名包含完整路径,则返回没有扩展名的完整路径和文件名。您可以使用basename()来删除路径,例如:

basename(substr($filename, 0, strrpos($filename, ".")));
尽管它比使用pathinfo慢。

速度比较

使用PHP 5.4在Mac上以10,000,000次循环运行其中的每一个:

pathinfo:10.13秒
basename:7.87秒
substr / strrpos:6.05秒
basename(substr / strrpos):11.98秒
如果文件名不包含完整路径,或者如果它不重要,那么substr / strrpos选项似乎是最快的。

如果文件名包含路径并且您不想要路径但确实知道要删除的扩展名是什么,那么basename似乎是最快的。

如果文件名包含路径,则不需要路径,也不知道扩展名是什么,那么使用pathinfo()选项。

结论

还有很多其他方法可以做到这一点,有些可能会更快。在很多情况下,速度可能并不那么重要(运行pathinfo的10秒钟毕竟是10万次)。这篇文章的目的是展示一些用PHP从文件名中删除扩展名的方法。


来自:http://www.webkaka.com/tutorial/php/2019/050857/
路径含有空格导致误删文件
史上最经典的要数下面这个bumblebee项目了,这个项目本来不出名,不过,程序在其安装脚本install.sh里的一个bug让这个项目一下子成了全世界最瞩目的项目。



那我们该如何防范这种问题呢?

(1)良好的编程习惯:变量加引号防止扩展

path="/usr/local /sbin"

# rm -rf $path

rm -rf "$path"



那我们该如何防范这种问题呢?

(1)良好的编程习惯:变量加引号防止扩展

rm -rf "~"

(2)如果不确定,删除之前 echo 或 find 一下,看变量被扩展成啥了

echo rm -rf "~"

rm -rf ~

echo rm -rf ~

rm -rf /home/work



cd 切换目录失败,导致文件被误删

cd ooxx_path_not_exsit

rm -rf *.exe


5、终极解决方案



不要使用 root 操作系统资源,这样至少不会删除系统文件。

6、在登录 shell 下使用友好的提示符

友好的命令提示符能时刻提醒操作者当前在哪个路径下,避免错误的路径下操作文件。


来自:https://mp.weixin.qq.com/s/_aRRFK4fwnp4uSLQ4tOOhA
#VAR1="2323232"
#VAR2="VAR1"

#eval echo \$$VAR2
2323232
这个用法的确可行,但是看起来十分的不舒服,很难只管的去理解,我们并不推荐。而且事实上我们本身就不推荐使用eval这个命令。
比较舒服的写法是下面这样:
#echo ${!VAR2}
2323232

From:
https://mp.weixin.qq.com/s/U1KirpXB4G82mqa0H9ylKQ


二)Centos安装shellcheck的方法
shellcheck
shellcheck是用来检查shell脚本的工具。
采用haskell语言开发。
在ubuntu中,可以直接采用apt install shellcheck安装完成
但是在Centos,yum是没有shellcheck的包的,因此,需要另一种方法安装

Centos安装shellcheck
由于shellcheck是haskell语言开发的,

因此,会想到使用haskell的包管理工具cabal来安装。

yum install cabal-install
这样,就可以使用cabal install 来安装东西了

在cabal install shellcheck之前还有些功夫要做。

注意,以下指令都会安装在~/.cabal/bin目录下

cabal update
cabal install cabal
cabal install shellcheck
cabal install cabal的意思是安装必要的cabal库,否则安装shellcheck时会报错,必须的。

有意思的是,在A用户安装了以上的东西,
su到B用户,以上的步骤还得来一次,呵呵

来自:https://www.cnblogs.com/wenxingxu/p/9547611.html
https://www.cnblogs.com/zqb-all/p/10054594.html
find . -name "jack.txt" -exec vim {} \;    # 这个没有问题

s |xargs vim
Vim: Warning: Input is not from a terminal   #终端卡了,应该是标准输入被截断了。
3 files to edit



失败:
find . -name "jackxiang.txt" |vim -  #里面是文件名,不是读取文件。
=======================================

vim 本身没有直接从 stdin 读入信息。而 - 参数相当于一个开关,表示从标准输入读入信息。而管道的功能就是把前一个程序的 stdout 作为下一个程序的 stdin

Many commands use a hyphen (-) in place of a filename as an argument to indicate when the input should come from stdin rather than a file.

man vim
- The file to edit is read from stdin. Commands are read from stderr, which should be a tty.

Cmd | vim -
参考 VIM USER MANUAL 26.4 Using Vim from a shell script
cmd | vim -
- 表示vim开启从stdin读数据  #我想作为文件名传入呢???
====================================================================================

ls | xargs vim # 同时打开多个文件
:n [file_name] #切换文件





From:https://www.v2ex.com/t/61163
用ls直接显示文件名称和grep -rl .一样,
man ls 之后 你 /-1 搜索 , -1     list one file per line :
ls -1

/tmp/yaml
$ls -1
jack.txt
jackxiang.txt
xiang.txt

/tmp/yaml
$for i in $(ls -1); do echo $i;cat $i;done
jack.txt
jack
jackxiang.txt
jackxiang
xiang.txt
xiang

加一个换行:
for i in `ls -1`;do echo $i;cat $i;echo;done


Q:public function getLabel(): ?string;

弱弱的问一下,php函数名后带个 ?string是什么用法啊?

A:这个是7.1 加入的类型声明,指示返回类型是string,问号表示可null。
https://www.php.net/manual/en/functions.returning-values.php#functions.returning-values.type-declaration
如下所示,文件hello.txt中有5行数据,要将这5行数据在一行中显示出来,并用空格分隔。

jie$ cat hello.txt
1
2
3
4
5

从下方法均可实现:
方法1.

$ echo `cat hello.txt`
1 2 3 4 5

cat hello.txt | xargs
1 2 3 4 5

$a=$(cat hello.txt)
cat "$a"
1
2
3
4
5

原文:https://blog.csdn.net/guoyajie1990/article/details/73692526
背景:前些天安全说是OpenSSL在CentOS6.X里面有漏洞,于是乎,就更新了OpenSSL,没有想到会在PHP-FPM里调用譬如 七牛的SSL出现问题PHP Problem with the SSL CA cert (path? access rights?),说白了就是得重启一下php-fpm一下,其它的也还好,如果是Nginx出现这样的问题,处理办法一样。
关于这方面的知识有:
1)厉害了,一篇漫画终于让我看懂了HTTPS协议的学习笔记。图解ssl 图文https。:  https://jackxiang.com/post/10110/

2)rpm -q --changelog openssl | grep CVE-2014-0160  
- fix CVE-2014-0160 - information disclosure in TLS heartbeat extension  参考:
https://jackxiang.com/post/9882/


以下摘录自网络:
开发遇到问题,直接使用系统的curl命令正常,使用php的curl模块报错

错误:PHP Problem with the SSL CA cert (path? access rights?)

解决方法:

1.安装

yum reinstall openssl ca-certificates -y

2.重启php


来自:https://cloud.tencent.com/developer/article/1097683



===========================根本原因是没有没有重新启动PHP-FPM========================
问题背景:
早上起床收到短信提醒,WEB服务器集群发现漏洞,于是更新服务, 其中一条是: yum update openssl

问题现象:
1. 命令行直接使用系统的curl命令一切正常

2. LAMP环境中调用curl则报错: Curl Problem with the SSL CA cert (path? access rights?)

问题原因:
更新openssl后, 证书也跟着更新了, 但是apache容器【旧进程】无法正确读取到新的证书以及权限

解决方案:
1. yum reinstall openssl ca-certificates -y && service httpd restart

From:http://www.blogdaren.com/post-2357.html
xhprof不维护了,用的是另一个,格式和xhprof一样,还兼容swoole 协程。
---------------------------------------------------------------阅读全文
分页: 2/26 第一页 上页 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 下页 最后页 [ 显示模式: 摘要 | 列表 ]