问题:用Co\System::exec()执行了一个不存在的命令时,错误信息会直接打印到屏幕,而不是返回错误信息。
怎么办:实际上Swoole提供的System::exec()行为上与PHP的shell_exec是完全一致的,我们写一个shell_exec的同步阻塞版本,执行后发现同样拿不到标准错误流输出的内容,会被直接打印到屏幕。
答案:  使用proc_open+hook实现。
现象:


==================================================================
#php tt.php
PHP Warning:  shell_exec() has been disabled for security reasons in /data/www/testswoole/tt.php on line 2
NULL

估计整成错误输出了,于是用:
php tt.php >/dev/null 2>&1

果然,怎么办?加入管道,将此错误指向新的文件描述符。



前置:打开php.ini里面的proc_open禁用函数。
#cat t.php


#php t.php
array(3) {
  [0]=>
  resource(4) of type (stream)
  [1]=>
  resource(5) of type (stream)
  [2]=>
  resource(6) of type (stream)
}
string(31) "sh: unknown: command not found
"
command returned 32512

代码来自rango:https://mp.weixin.qq.com/s/z7SPy-tV3hsQqLXZ-tKlZw
背景:央视网发声明:“中央电视台网”严重侵权,已向相关部门举报,这是不可辩驳的事实。但是我对这个中文域名技术实现的原理有点兴趣,于是问一下技术人员和自己查了下。了解到早些年关于中文域名被好多网络公司买的如火如荼,也养活了好多网络公司多少年,在这里我们不讨论中文是否有价值,我们这里讨论一下中文域名的工作原理,下面是RFC文件。

      RFC3490
      (Request For Comments (RFC),是一系列以编号排定的文件。文件收集了有关因特网相关资讯,以及UNIX和因特网社群的软件文件。目前RFC文件是由Internet Society(ISOC)所赞助发行。)
      Internationalizing   Domain   Names   in   Applications   (IDNA)    
      用户输入国际化域名后,由应用程序完成本地码到Unicode编码的转换,然后再完成Unicode编码到7位Punycode编码的转换,然后由解析器(Resolver)发给DNS服务器进行解析。DNS服务器里存储的不是八位编码的Unicode字符串,而是经过Punycode算法处理的7位编码字符串。    
      IDNA中应用程序对IDN进行ToASCII和ToUnicode操作的时候会调用Punycode算法完成七位和八位数据的转换操作。    
      ToASCII和ToUnicode过程参见RFC3490   4.1和4.2小节  
      一个八位Unicode表示的域名字段的字符串将会被转化成为七位字母数字表示的字符串,并添加前缀“xn--”以便与其他英文域名区分,表示这个域名字段是IDN。  

      按照上面的解释,我们以侵权域名“中央电视台网.网址”为例,软件环境为ie7简体中文版


中央电视台网.网址. ==>Punycode编码转换. ===>  Punycode编码转换后:
xn--fiq53l90e917a0tk4ip.xn--ses554g

点击在新窗口中浏览此图片

www.中央电视台网.网址. =怎么编码变为下面这串的呢?=>
http://www.xn--fiq53l90e917a0tk4ip.xn--ses554g/

于是在浏览器里输入这个“中央电视台网”侵权事宜的域名:
www.中央电视台网.网址. =怎么编码变为下面这串的呢?===我们在ie7的状态栏中看到==》
http://www.xn--fiq53l90e917a0tk4ip.xn--ses554g/



在ie6的时代,是不支持中文域名的使用的,为什么现在ie7就支持了呢,我们理解一下RFC3490的内容
      “由应用程序完成...”,“程序”这里是指ie7,或者更高浏览器,或者其它浏览器,“完成”指的是浏览器中内置了Punycode的转换,意思是浏览器里面主动加入了中文域名自动转码。ie7简体中文内置了自动转码工具,其它的就不知道了,说白了就是浏览器厂商将这个功能加上去,我们就能用,不加我们就用不起来。
      “解析器”也是浏览器内置的。
      “DNS服务器解析”我们在网络配置中选择了“自动获得DNS服务器”,我们在这里将DNS服务器改掉,改成了美国的DNS服务器,如:8.8.8.8. 网站是无法打开,这就说明我们选择国外的DNS服务器,中文域名是无法使用的。

      从上面的内容中,我们可以总结出,在目前好多浏览器在国内支持中文域名是因为cnnic和浏览器开发商之间进行了合作,让浏览器内置Punycode编码转换。所以来讲应该只有中文版的浏览器才能支持中文域名,
      再从DNS服务器解析来讲,只有在国内,或者说是使用国内的DNS服务器才能支持中文域名。



附中文域名编码转换工具:http://tools.jb51.net/punycode/index.php?decoded=%E4%B8%AD%E5%A4%AE%E7%94%B5%E8%A7%86%E5%8F%B0%E7%BD%91.%E7%BD%91%E5%9D%80&encoded=&encode=%E7%BC%96%E7%A0%81


cctv央视网侵权申明:https://news.cctv.com/2020/10/23/ARTIALUGD9zJSrbdIBxuC4gE201023.shtml
背景:自已写了一个简单的命令行打开网页的go程序。运行时传入参数出现:
./chrome http://gitlab.xx.xxxx.xx/irdcops/k8s.xx.xxxx.xx/-/merge_requests/new?merge_request%5Bsource_branch%5D=xiangdong
zsh: no matches found: http://gitlab.xx.xxxx.xx/irdcops/k8s.xx.xxxx.xx/-/merge_requests/new?merge_request%5Bsource_branch%5D=xiangdong


搜索了一下,找到出现的原因如下:
在 zsh 下使用 find 命令查找指定目录下所有头文件时出现问题:

find . -name *.h
1
no matches found: *.h

后来查看了一些资料才知道,这是由于zsh导致的。

具体原因:

因为zsh缺省情况下始终自己解释这个 *.h,而不会传递给 find 来解释。

解决办法:

在~/.zshrc中加入:
setopt no_nomatch, 然后进行source .zshrc命令


来自:https://blog.csdn.net/u012675539/article/details/52079013
当时方便用一下虚拟机并用暴风激活,发现注入了主页劫持病毒,出现浏览器首页被重定和到:
jn4.dhtz999.top



下载360系统急救箱V5.1.64.1255 ,http://www.360.cn/jijiuxiang/,发现驱动级木马,重启变为360的推荐主页了,不知算不算解决了?
也有人说:
360所谓的主页修复什么的,根本没用,这次是遇到真流氓了,希望及时升级吧。还有就是,火绒也是了,没用,没用。

参考来自:https://ruhetouzi.com/t/topic/101241
https://zhuanlan.zhihu.com/p/115822262
linux tmux/screen rz/sz 文件卡死快速退出方法
按住Ctrl键, 再按五次x键 (强行终断传输)
怎么在screen下用rz/sz传输文件?
screen 可以用zmodem模式传输文件
同时按 CTRL和A键 然后输入 :zmodem pass
回车即可
tmux 未找到rz/sz传输文件办法

From:https://blog.csdn.net/qq_34104669/article/details/105231853
经研判断:默认是英文的设置更好!!搜索:“让英文(美国)在上面开机输入法就是英语(美国)”就是讲这个的。
在远程桌面中:默认是英语,可手工换在五笔上,打字时可以shift进行临时换成英语,后输入完成后,再shift换回。

最终我知道了:
Windows显示语言
中文(中华人民共和国)

首选语言(它下面可以加上英文、中文。。。下面才是输入法,均遵循:首选语言得有两个才能删一个,输入法也得有两个才能删。同时English(United States)下面也能有中文的输入法:

同时发现:上面的任何一种语言,如果只有一个输入法。就直接在右下角嵌入,而没有出现下图的菜单:
点击在新窗口中浏览此图片

大于两个输入法才会出现上面的菜单,得证如下:
点击在新窗口中浏览此图片
只要大于一个就会是菜单格式的。

以上办法来自:
https://www.kancloud.cn/digest/windowssolution/141133
利用系统的一点小BUG,如图添加英文(美国)这个语言(普通用户别选 Apple 那个),建议像我那样设置,让英文(美国)在上面开机输入法就是英语(美国): AddTime:2024-01-26 15:19
点击在新窗口中浏览此图片

最后,
Windows 8/8.1/10 删除微软拼音、微软五笔输入法的方法:(添加英语,利用微软的Bug删掉自带的中文输入法)
https://www.kancloud.cn/digest/windowssolution/141133
下载地址:
http://ys-j.ysepan.com/261539224/910275670/u3J3K3K7J45OKSiuLfgc6/%E8%BE%93%E5%85%A5%E6%B3%95%E7%AE%A1%E7%90%86%E5%99%A8.rar?lx=xz


之前研究如下:
首先,要添加一个输入法,才能删掉微软拼音输入法。否则,删除按钮是disable灰色的状态。
     win10系统怎么删除默认的输入法步骤:
1、在打开的设置面板中点击点击“其他日期、时间和区域设置”,进入下一步。没有?入口2:
     就到桌面的输入法处-》语言首选项-》就有一个区域和语言,新的版本是区域和语言分开的,到语言。

2、首选语言:
     +添加语言
     中文(简体,中国)
     英文(美国)
     上面这个随便点一个,会显示:[选项]  [删除],点选项。
     有一个中文(中华人民共和国)显示语言:在上面点鼠标左键,才会显示出选项,我就是一直没找到这个,原来在这儿要点一下,这个细节要注意。


3、进去语言选项:中文(简体,中国),键盘:就是设置了里面的键盘,就有添加键盘,同2一样点微软自己的输入法后,会显示删除两字(如果只有一个微软输入法删除按钮变灰),再新加一个输入法后,再回到微软拼音上点一下,其下面[选项][删除]就能删掉自带的微软输入法了。


参考:https://blog.csdn.net/qq_40907977/article/details/107866250
验证器:
https://www.bookstack.cn/read/easyswoole-3.x-zh/Components-validate.md
App/HttpController/Index.php



App/HttpController/BaseController.php



统一验证:
class Index  extends BaseController
{
    function index()
    {
        $this->response()->write("123");
    }

  /**
     * 验证
     *
     * {@inheritdoc}
     * @see \App\HttpController\Index\Index::validateRule()
     */
    protected function validateRule(?string $action): ?Validate
    {
        $v = new Validate();
        $params = $this->request()->getRequestParam();
        echo "Here:\n";
        var_dump($action);
        switch ($action) {
            case 'index':
                {
                    $v->addColumn('title', '竞赛标题')
                        ->required('不能为空')
                        ->notEmpty();
                    $v->addColumn('limit', '每页条数')
                        ->integer();
                    $v->addColumn('page', '当前页码')
                        ->integer();
                    if (isset($params['recommend_status'])) {
                        $v->addColumn('recommend_status', '推荐状态')->integer();
                    }
                    if (isset($params['act_status'])) {
                        $v->addColumn('act_status', '活动状态')->integer();
                    }
                    break;
                }
            case 'searchActivity':
                {
                    $v->addColumn('title', '竞赛标题')
                        ->required('不能为空')
                        ->notEmpty();
                    $v->addColumn('limit', '每页条数')
                        ->integer();
                    $v->addColumn('page', '当前页码')
                        ->integer();
                    if (isset($params['recommend_status'])) {
                        $v->addColumn('recommend_status', '推荐状态')->integer();
                    }
                    if (isset($params['act_status'])) {
                        $v->addColumn('act_status', '活动状态')->integer();
                    }
                    break;
                }
            case 'getRobotAnswer':
                {
                    $v->addColumn('topic_id', '题目id')
                        ->required('不能为空')
                        ->integer();
                    $v->addColumn('score', '积分')
                        ->integer();
                    break;
                }
            case 'saveActivity':
                {
                    $v->addColumn('title', '竞赛标题')
                        ->required('不能为空')
                        ->notEmpty();
                    $v->addColumn('type', '展示模式')
                        ->required('不能为空')
                        ->integer();
                    $v->addColumn('description', '竞赛描述')
                        ->required('不能为空')
                        ->notEmpty();
                    $v->addColumn('start_time', '开始时间')
                        ->required('不能为空')
                        ->integer();
                    $v->addColumn('end_time', '结束时间')
                        ->required('不能为空')
                        ->integer();
                    $v->addColumn('paper_status', '试卷状态')
                        ->required('不能为空')
                        ->integer();
                    $v->addColumn('act_status', '活动状态')
                        ->required('不能为空')
                        ->integer();
                    if (isset($params['act_id'])) {
                        $v->addColumn('act_id', '竞赛id')->integer();
                    }
                    if (isset($params['recommend_status'])) {
                        $v->addColumn('recommend_status', '推荐状态')->integer();
                    }
                    if (isset($params['recommend_index'])) {
                        $v->addColumn('recommend_index', '推荐序号')->integer();
                    }
                    break;
                }
            case 'delActivity':
                {
                    $v->addColumn('act_id', '竞赛id')
                        ->required('不能为空')
                        ->integer()
                        ->min(0);
                    break;
                }
            case 'getActivity':
                {
                    $v->addColumn('act_id', '竞赛id')
                        ->required('不能为空')
                        ->integer();
                    break;
                }
            case 'getActivityList':
                {
                    $v->addColumn('recommend_status', '推荐状态')
                        ->required('不能为空')
                        ->integer();
                    $v->addColumn('limit', '列表数')
                        ->required('不能为空')
                        ->integer();
                    break;
                }
            case 'getPaper':
                {
                    $v->addColumn('act_id', '竞赛id')
                        ->required('不能为空')
                        ->integer();
                    $v->addColumn('paper_nums', '试卷题量')
                        ->required('不能为空')
                        ->integer();
                    break;
                }
            case 'addPaperTopic':
                {
                    $v->addColumn('act_id', '竞赛id')
                        ->required('不能为空')
                        ->integer();
                    $v->addColumn('topic_id', '题目id')
                        ->required('不能为空')
                        ->notEmpty();
                    $v->addColumn('topic_title', '题目标题')
                        ->required('不能为空')
                        ->notEmpty();
                    $v->addColumn('topic_label', '题目标签')
                        ->required('不能为空')
                        ->notEmpty();
                    break;
                }
            case 'delPaperTopic':
                {
                    $v->addColumn('act_id', '竞赛id')
                        ->required('不能为空')
                        ->integer();
                    $v->addColumn('topic_id', '题目id')
                        ->required('不能为空')
                        ->notEmpty();
                    break;
                }
            case 'updatePaper':
                {
                    $v->addColumn('act_id', '竞赛id')
                        ->required('不能为空')
                        ->integer();
                    $v->addColumn('type', '答题类型')
                        ->required('不能为空')
                        ->integer();
                    $v->addColumn('nums', '题量')
                        ->required('不能为空')
                        ->integer();
                    break;
                }
            case 'updateScoreSet':
                {
                    $v->addColumn('per_score', '答对得分')
                        ->required('不能为空')
                        ->integer();
                    $v->addColumn('win_score', '获胜得分')
                        ->required('不能为空')
                        ->integer();
                    $v->addColumn('fail_score', '失败得分')
                        ->required('不能为空')
                        ->integer();
                    break;
                }
        }
        return $v;
    }


App/HttpController/BaseController.php


ls -lt /dirname/ | grep filename | head -n 1 |awk '{print $9}'



逐条解释:

ls -lt /dirname/

列出此目录下的所有文件并按照时间先后排序

grep filename

过滤出包含关键字的文件

head -n 1

查看排名第一的文件

awk '{print $9}'

打印出第九字段,此处为文件名

来自:https://www.cnblogs.com/echo-valley/p/8268527.html
这是老式编程语bai言里的标签跳转, 相当于C语言du里面的goto语句
可以实现 分支选择zhi, 循环等功能
sed '/^AA/ba;s/$/ NO/;b;:a;s/$/ YES/' 解读如下dao
sed是逐行扫描的
/^AA/ba;s/$/ NO/ 意思是如果当前行句首是AA
则跳转到标签a,执行s/$/ YES/ 即在行末插入YES (这里使用替换s命令实现插入)
否则执行s/$/ NO/, 在行末插入NO
对所有行都执行这种操作, 大功告成




echo 1 2 3 4 5 6 7 8 9 10 | perl -p -e 's#(\d+) #\1\n#g' | sort -n -k 1 | sed -e :a -e '$d;N;2,3ba' -e 'P;D'

3ba表示去掉最后3行,你要保留最新的5个,那就是5ba好了


sed -n '/^Handle/{:a;N;/\n$/!{$!ba};s/.*Range Size: \([^\n]*\).*/\1/p}' file
[解析]
文本就3个段落,2个空行为分割,用sed首先想到肯定是以空行为分割,把一整段文本读取在一起,然后统一进行匹配和替换,特别注意N读取内容匹配空行是 /\n$/ ,而不是一般的 /^$/  ,另一个问题是到了尾行因为没有下面的空行来激活,所以我们要在前面加个尾行的匹配跳转。这样就可以成功替换以Handle开头的段落内容,如果没匹配到也当然不会打印。


sed -n 'H;/^$/!{$!b};x;s/\nHandle.*Range Size: \([^\n]*\).*/\1/p' file
[解析]
因为是以空行为分割,H 追加到 hold space ,后面的替换只对空行或者最后一行才执行,否则都会跳过,也只有符合关键字的才会被替换打印。其他的行则因为 -n 的原因不会被输出。


From:https://blog.csdn.net/woshizhangliang999/article/details/53379158
教你用iPhone 通过 USB 让macbook电脑实现上网,这个简单,直接打开热点就行,Win的电脑可以参考:
https://jingyan.baidu.com/article/93f9803f7c2a4ae0e56f557b.html





在mac上

$ brew install bash-completion
$ source $(brew --prefix)/etc/bash_completion
$ source <(kubectl completion bash)


来自:https://juejin.im/entry/6844903678898356237
Mac: https://i4t.com/3245.html
断掉电源,摁着平时开机旋转的部分,向右手方向旋转,直到进风滤网旋转到正前方,上下两个滤网,每个两个摁扣,一颗螺丝,拆下!
清洗过滤网;直接用水冲洗或用毛刷刷。
安装滤网及面板,恢复原状。

二)滤网清洗是为了解决酸味,洗后还是没有得到解决,酸味还是有,还一阵一阵的:
我这个自己洗了过滤网还是有酸味,网上有人说:烯酸树脂固话工艺没做好产生酸味??明后天问下客服?找工程师上门??
就是一种化学的酸味:http://feng.ifeng.com/c/7xOtKsMwnoN
这里的URL是什么?  有两种可能大一点:
浏览器在查询本地缓存,时间长比如本地出了问题比如硬盘什么的
网络问题,抓包吧你还可以试试其它地方查询网页是否有类似问题------------------------------前段时间看到了一个长时间的 stalled 状态,   查了, 发现是 因为 dns 服务器对于该域名查询没有响应, 重试很久才成功.   我估计 stalled 多半是一些网络问题,  比如 dns ,  服务器不可达,  tcp reset 之类的问题.  chrome 的几个阶段,  一些导致连接不上的问题, 可能会被算到 stalled 阶段

作者:深蓝加菲
链接:https://www.zhihu.com/question/37087918/answer/142205707
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

有个兄弟试图写明白,值得看看:https://www.cnblogs.com/jpfss/p/8963766.html
最近几天我在 mac 命令终端下粘贴 URL 出现了反斜杠,带&符号的就会在前面出现一个反斜杠
有人遇到么?怎么解决?

那是 oh-my-zsh 的 feature ,不是 bug ,见:
参考: http://stackoverflow.com/questions/25614613/how-to-disable-autocomplete-with-backslak-in-zsh

如果你不想看到这个反斜杠,就在粘贴网址之前打一个引号,单引号就行,粘贴完再打一个:
1)直接粘贴:
~/scdh2020/public   master  http://partner.xxx.xxxx.com/scdh2020/index.php\?name\=xiangdong
2)先加一个单引号或者双引号直接粘贴,还是会有反斜杠:
"http://partner.xxx.xxxx.com/scdh2020/index.php\?name\=xiangdong
3)自己输入是正常的。但是我想要粘贴也没有反斜杠怎么办?


成功解决办法:
在`~/.zshrc`中加入一句`ISABLE_MAGIC_FUNCTIONS=true`(需要放在 source $ZSH/oh-my-zsh.sh 前面)
vi ~/.zshrc

DISABLE_MAGIC_FUNCTIONS=true
source $ZSH/oh-my-zsh.sh
secureCRT拖动上传,SFTP拖动上传文件到家目录:
https://blog.csdn.net/kxj19980524/article/details/85246778
一)ps在FreeBSD中截断的列宽:
ps aux | grep php
在zsh中,例如,输出
root  50282   0.0  1.4  49512 29584  -  Ss   23:03          0:00.05 php-fpm: master process (/usr/local/

您可以看到它在屏幕上运行并在结束时被截止.

在FreeBSD中,如何查看完整输出?

最佳答案 使用-w选项(必要时重复).尝试:

ps auxwww|grep php    
root  50282   0.0  1.4  49512 29584  -  Ss   23:03          0:00.06 php-fpm: master process (/usr/local/php7/etc/php-fpm.conf) (php-fpm)

有关更多信息,请参见the manual page


二)linux ps命令显示完整命令:
在linux上执行ps命令,输出往往被截断
ps -f -p5457
UID        PID  PPID  C STIME TTY          TIME CMD
root      5457  5449  0 4月26 pts/1   00:00:00 Worker***: master process  start_file=/data/www/manage.**


可以使用以下形式,显示完整的命令

ps -w -w -f -p5457
UID        PID  PPID  C STIME TTY          TIME CMD
root      5457  5449  0 4月26 pts/1   00:00:00 Worker***: master process  start_file=/data/www/manage.****.***.cn/********/GatewayWorker/start.php
或者
ps -f  -p5457|cat
UID        PID  PPID  C STIME TTY          TIME CMD
root      5457  5449  0 4月26 pts/1   00:00:00 Worker***: master process  start_file=/data/www/manage.****.***.cn/********/GatewayWorker/start.php
分页: 6/339 第一页 上页 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 下页 最后页 [ 显示模式: 摘要 | 列表 ]