① php新手如何成为PHP大牛
不知道你的php技术怎么样,如果是完全零基础的新手,建议你最需要做的就是快速入门。
编程其实就是一门手艺活,这和其他行业的道理是一样的。现在的社会都讲求匠人精神,但我们的传统文化其实一直不缺匠人精神,还记得曾经学过的那篇叫卖油翁的文章吗?卖油翁说的一句话就道出了精髓,无他唯手熟而,说的直白点就是练的多了。编程这种东西其实也一样,你练的多了自然就能悟出其中的道理,别人看上去非常神奇,但在你看来简直轻而易举。
当达到这种境界的时候,你也就是真正的高手了。而成为高手后,只要举一反三,其他编程语言也是同样的道理。
② 502 Bad Gateway的可能原因,及解决方法
一:可能的原因是php-fpm未开启,查看php-fpm状态,若未开启,开启后重试
开启php-fpm,查看状态
systemctl start php73-php-fpm
systemctl status php73-php-fpm
重新打开网页
第二次遇到502
第二次遇到502,上面的方法试了,但是问题没有解决
感觉有可能是配置问题,最终参照 https://blog.csdn.net/ucmir183/article/details/80240112 的解决方法,解决了
我的配置里面是这样的
location ~* \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
输入命令 netstat -tlnp | grep 9000 并没有监听9000的程序
Nginx和PHP-FPM的进程间通信有两种方式,一种是TCP,一种是UNIX Domain Socket.
其中TCP是IP加端口,可以跨服务器.而UNIX Domain Socket不经过网络,只能用于Nginx跟PHP-FPM都在同一服务器的场景.用哪种取决于你的PHP-FPM配置:
方式1:
php-fpm.conf: listen = 127.0.0.1:9000
nginx.conf: fastcgi_pass 127.0.0.1:9000;
方式2:
php-fpm.conf: listen = /tmp/php-fpm.sock
nginx.conf: fastcgi_pass unix:/tmp/php-fpm.sock;
在配置文件中看了一下,发现初始化时就有一个文件
查阅了自己以前的配置,以前使用php7.2与php7.3时是没有这个文件的
于是把这个文件删除是了一下,重启nginx报错
好奇心驱使,进入文件看了一下
于是进入自己配置的文件中,修改
重启nginx服务器,问题解决
参考地址:https://blog.csdn.net/ucmir183/article/details/80240112
③ 一键安装并启用 telnet服务
通过telnet方式连接到其他机器,进行远程操作
本文实现了一键安装,并开启telnet服务。
默认情况下,telnet连接不能用root账号登陆,需要用普通用户的账号连接
2.1 安装服务包
安装xinted,telnet,telnet-server三个包
2.2 开启xinetd
Cent OS 6
service xinetd restart
CentOS7
systemctl restart xinetd
2.3 开启telnet
如果以上的telnet已经安装,但是还是如果出现如下报错
[root@localhost ~]#telnet 172.18.50.62
Trying 172.18.50.62...
telnet: connect to address 172.18.50.62: Connection refused
应该是服务没有启用
主要是要查看23端口是否有被打开
可以用 netstat -ntulp | grep 23查看
解决办法
CentOS6
chkconfig --list 查看telnet是否是on状态,如果状态为off,
用命令 chkconfig telnet on设置开机启动。centOS6不需要重启telnet服务,只需要确保这个状态是开启的就可以,因为该进程是有xinet监听,如果telnet已经是on状态,可以尝试重启xinet服务
CentOS7
查看telnet-server 是否已经启动
systemctl status telnet.socket
如果显示inactive则表示没有打开请执行
systemctl enable telnet.socket 加入开机启动
启动telnet 服务 systemctl start telnet.socket 注意7这边是telnet.socket,和6不一样
如果打了以下的命令,就会出现模块不存在的报错,因为命令打错了,telnet少了socket这个后缀
[root@localhost ~]#systemctl start telnet
Failed to start telnet.service: Unit not found.
3 一键安装脚本如下
将yum源配置好,且可用的前提下,可以直接运行以下脚本,实现一键安装和启用服务的功能
rpm -q xinetd &>/dev/null || yum -y install xinetd &>/dev/null
rpm -q telnet &>/dev/null || yum -y install telnet &>/dev/null
rpm -q telnet-server &>/dev/null || yum -y install telnet-server &>/dev/null
iptables -I INPUT -p tcp --dport 23 -jACCEPT
iptables -I INPUT -p udp --dport 23 -jACCEPT
os_version=`cat /etc/system-release | grep -o " [0-9]"| cut -d " " -f2`
grep_port (){
read -p "please input which port you want check: " port
if netstat -nutlp | grep ":$port " &>/dev/null;then
echo "Telnet service is open now,the host can be telnet now"
else
echo "Telnet port $port is not open,please check"
fi
};
case $os_version in
6)
chkconfig xinetd on;
chkconfig telnet on;
service xinetd restart;
grep_port
;;
7)
systemctl enable telnet.socket;
systemctl start telnet.socket;
systemctl enable xinetd;
systemctl restart xinetd;
grep_port
;;
*)
echo "Please check your system version,it not 6 or 7"
exit
;;
esac
4 附录
本文的编写,参考以下两个链接。如需更详细信息,建议查看以下两个文章
http://www.linuxdiyf.com/viewarticle.php?id=422702
https://yq.aliyun.com/articles/58310
④ workerman有什么用
Workerman是一款纯PHP开发的开源高性能的PHP socket 服务框架。 (推荐学习: workerman教程)
Workerman不是重复造轮子,它不是一个MVC框架,而是一个更底层更通用的socket服务框架,你可以用它开发tcp代理、梯子代理、做游戏服务器、邮件服务器、ftp服务器、甚至开发一个php版本的redis、php版本的数据库、php版本的nginx、php版本的php-fpm等等。
Workerman可以说是PHP领域的一次创新,让开发者彻底摆脱了PHP只能做WEB的束缚。
实际上Workerman类似一个PHP版本的nginx,核心也是多进程+Epoll+非阻塞IO。
Workerman每个进程能维持上万并发连接。由于本身常住内存,不依赖Apache、nginx、php-fpm这些容器,拥有超高的性能。
同时支持TCP、UDP、UNIXSOCKET,支持长连接,支持Websocket、HTTP、WSS、HTTPS等通讯协以及各种自定义协议。拥有定时器、异步socket客户端、异步Mysql、异步Redis、异步Http、异步消息队列等众多高性能组件。
Workerman的一些应用方向如下:
1、即时通讯类 例如网页即时聊天、即时消息推送、微信小程序、手机app消息推送、PC软件消息推送等等 [示例 workerman-chat聊天室 、 web消息推送 、 小蝌蚪聊天室]
2、物联网类 例如Workerman与打印机通讯、与单片机通讯、智能手环、智能家居、共享单车等等。 [客户案例如 易联云、易泊时代等]
3、游戏服务器类 例如棋牌游戏、MMORPG游戏等等。[示例 browserquest-php]
4、SOA服务化 利用Workerman将现有业务不同功能单元封装起来,以服务的形式对外提供统一的接口,达到系统松耦合、易维护、高可用、易伸缩。[示例 workerman-json-rpc、 workerman-thrift]
5、其它服务器软件 例如 GatewayWorker,PHPSocket.IO,http代理,sock5代理,分布式通讯组件,分布式变量共享组件,消息队列、DNS服务器、WebServer、CDN服务器、FTP服务器等等
6、中间件 例如异步MySQL组件,异步redis组件,异步http组件,异步消息队列组件,异步dns组件,文件监控组件,还有很多第三方开发的组件框架等等
⑤ Linux系统下wget命令的使用教程
一、Linux wget简介
wget是linux上的命令行的下载工具。这是一个GPL许可证下的自由软件。Linux wget支持HTTP和FTP协议,支持代理服务器和断点续传功能,能够自动递归远程主机的目录,找到合乎条件的文件并将其下载到本地硬盘上;如果必要,Linux wget将恰当地转换页面中的超级连接以在本地生成可浏览的镜像。由于没有交互式界面,Linux wget可在后台运行,截获并忽略HANGUP信号,因此在用户推出登录以后,仍可继续运行。通常,Linux wget用于成批量地下载Internet网站上的文件,或制作远程网站的镜像。
二、实例
下载下载192.168.1.168首页并且显示下载信息Linux wget -d http://192.168.1.168下载192.168.1.168首页并且不显示任何信息wget -q http://192.168.1.168下载filelist.txt中所包含的链接的所有文件wget -i filelist.txt
下载到指定目录wget -P/tmp ftp://user:passwd@url/file把文件file下载到/tmp目录下。Linux wget是一个命令行的下载工具。对于我们这些 Linux 用户来说,几乎每天都在使用它。下面为大家介绍几个有用的 Linux wget 小技巧,可以让你更加高效而灵活的使用 Linux wget。
*
复制代码代码如下:$ wget -r -np -nd http://example.com/packages/这条命令可以下载 http://example.com 网站上 packages 目录中的所有文件。其中,-np 的作用是不遍历父目录,-nd 表示不在本机重新创建目录结构。*
复制代码代码如下:$ wget -r -np -nd --accept=iso http://example.com/centos-5/i386/与上一条命令相似,但多加了一个 --accept=iso 选项,这指示Linux wget仅下载 i386 目录中所有扩展名为 iso 的文件。你也可以指定多个扩展名,只需用逗号分隔即可。*
复制代码代码如下:$ wget -i filename.txt此命令常用于批量下载的情形,把所有需要下载文件的地址放到 filename.txt 中,然后 Linux wget就会自动为你下载所有文件了。*
复制代码代码如下:$ wget -c http://example.com/really-big-file.iso这里所指定的 -c 选项的作用为断点续传。*
复制代码代码如下:$ wget -m -k (-H) http://www.example.com/该命令可用来镜像一个网站,Linux wget将对链接进行转换。如果网站中的图像是放在另外的站点,那么可以使用 -H 选项。三、参数
代码:
复制代码代码如下:$ wget --helpGNU Wget 1.9.1,非交互式的网络文件下载工具。用法:Linux wget[选项]... [URL]...长选项必须用的参数在使用短选项时也是必须的。启动:
-V, --version 显示 Wget 的版本并且退出。
-h, --help 打印此帮助。
-b, -background 启动后进入后台操作。
-e, -execute=COMMAND 运行‘.wgetrc’形式的命令。
日志记录及输入文件:
-o, --output-file=文件 将日志消息写入到指定文件中。
-a, --append-output=文件 将日志消息追加到指定文件的末端。
-d, --debug 打印调试输出。
-q, --quiet 安静模式(不输出信息)。
-v, --verbose 详细输出模式(默认)。
-nv, --non-verbose 关闭详细输出模式,但不进入安静模式。
-i, --input-file=文件 下载从指定文件中找到的 URL。
-F, --force-html 以 HTML 方式处理输入文件。
-B, --base=URL 使用 -F -i 文件选项时,在相对链接前添加指定的 URL。
下载:
-t, --tries=次数 配置重试次数(0 表示无限)。
--retry-connrefused 即使拒绝连接也重试。
-O --output-document=文件 将数据写入此文件中。
-nc, --no-clobber 不更改已经存在的文件,也不使用在文件名后添加 .#(# 为数字)的方法写入新的文件。
-c, --continue 继续接收已下载了一部分的文件。
--progress=方式 选择下载进度的表示方式。
-N, --timestamping 除非远程文件较新,否则不再取回。
-S, --server-response 显示服务器回应消息。
--spider 不下载任何数据。
-T, --timeout=秒数 配置读取数据的超时时间 (秒数)。
-w, --wait=秒数 接收不同文件之间等待的秒数。
--waitretry=秒数 在每次重试之间稍等一段时间 (由 1 秒至指定的 秒数不等)。
--random-wait 接收不同文件之间稍等一段时间(由 0 秒至 2*WAIT 秒不等)。
-Y, --proxy=on/off 打开或关闭代理服务器。
-Q, --quota=大小 配置接收数据的限额大小。
--bind-address=地址 使用本机的指定地址 (主机名称或 IP) 进行连接。
--limit-rate=速率 限制下载的速率。
--dns-cache=off 禁止查找存于高速缓存中的 DNS。
--restrict-file-names=OS 限制文件名中的字符为指定的 OS (操作系统) 所允许的字符。
目录:
-nd --no-directories 不创建目录。
-x, --force-directories 强制创建目录。
-nH, --no-host-directories 不创建含有远程主机名称的目录。
-P, --directory-prefix=名称 保存文件前先创建指定名称的目录。
--cut-dirs=数目 忽略远程目录中指定数目的目录层。
HTTP 选项:
--http-user=用户 配置 http 用户名。
--http-passwd=密码 配置 http 用户密码。
-C, --cache=on/off (不)使用服务器中的高速缓存中的数据 (默认是使用的)。
-E, --html-extension 将所有 MIME 类型为 text/html 的文件都加上 .html 扩展文件名。
--ignore-length 忽略“Content-Length”文件头字段。
--header=字符串 在文件头中添加指定字符串。
--proxy-user=用户 配置代理服务器用户名。
--proxy-passwd=密码 配置代理服务器用户密码。
--referer=URL 在 HTTP 请求中包含“Referer:URL”头。
-s, --save-headers 将 HTTP 头存入文件。
-U, --user-agent=AGENT 标志为 AGENT 而不是 Wget/VERSION。
--no-http-keep-alive 禁用 HTTP keep-alive(持久性连接)。
--cookies=off 禁用 cookie。
--load-cookies=文件 会话开始前由指定文件载入 cookie。
--save-cookies=文件 会话结束后将 cookie 保存至指定文件。
--post-data=字符串 使用 POST 方法,发送指定字符串。
--post-file=文件 使用 POST 方法,发送指定文件中的内容。
HTTPS (SSL) 选项:
--sslcertfile=文件 可选的客户段端证书。
--sslcertkey=密钥文件 对此证书可选的“密钥文件”。
--egd-file=文件 EGD socket 文件名。
--sslcadir=目录 CA 散列表所在的目录。
--sslcafile=文件 包含 CA 的文件。
--sslcerttype=0/1 Client-Cert 类型 0=PEM (默认) / 1=ASN1 (DER)
--sslcheckcert=0/1 根据提供的 CA 检查服务器的证书
--sslprotocol=0-3 选择 SSL 协议;0=自动选择,
1=SSLv2 2=SSLv3 3=TLSv1
FTP 选项:
-nr, --dont-remove-listing 不删除“.listing”文件。
-g, --glob=on/off 设置是否展开有通配符的文件名。
--passive-ftp 使用“被动”传输模式。
--retr-symlinks 在递归模式中,下载链接所指示的文件(连至目录则例外)。
递归下载:
-r, --recursive 递归下载。
-l, --level=数字 最大递归深度(inf 或 0 表示无限)。
--delete-after 删除下载后的文件。
-k, --convert-links 将绝对链接转换为相对链接。
-K, --backup-converted 转换文件 X 前先将其备份为 X.orig。
-m, --mirror 等效于 -r -N -l inf -nr 的选项。
-p, --page-requisites 下载所有显示完整网页所需的文件,例如图像。
--strict-comments 打开对 HTML 备注的严格(SGML)处理选项。
递归下载时有关接受/拒绝的选项:
-A, --accept=列表 接受的文件样式列表,以逗号分隔。
-R, --reject=列表 排除的文件样式列表,以逗号分隔。
-D, --domains=列表 接受的域列表,以逗号分隔。
--exclude-domains=列表 排除的域列表,以逗号分隔。
--follow-ftp 跟随 HTML 文件中的 FTP 链接。
--follow-tags=列表 要跟随的 HTML 标记,以逗号分隔。
-G, --ignore-tags=列表 要忽略的 HTML 标记,以逗号分隔。
-H, --span-hosts 递归时可进入其它主机。
-L, --relative 只跟随相对链接。
-I, --include-directories=列表 要下载的目录列表。
-X, --exclude-directories=列表 要排除的目录列表。
-np, --no-parent 不搜索上层目录。
四、实例:用Wget批量下载远程FTP服务器上的文件
昨天买了个VPS,把虚拟主机迁移到VPS了,迁移过程肯定是要转移数据的。以前虚拟主机迁移数据的模式是非常低效率的,旧主机打包下载->新主机上传再解压缩,由于家庭网络带宽非常低,而且ADSL的上行速率512kbps万年不变,导致以前迁移网站绝对是体力活...
现在有了VPS,有了shell,这个过程就无比简单了,借助机房的大带宽,直接机房对机房互传文件看着简直就是一种享受啊
好了,讲一下方法:
1、旧虚拟主机打包备份整站 site.tar.gz
2、在VPS的shell中利用wget下载旧虚拟主机中的site.tar.gz,使用FTP协议
上面就是命令了,FTP用户名密码参数不解释;
-r 可选,表示递归下载,如果直接下载整个目录就需要该参数;
-m 表示镜像,不解释;
-nh表示不生成那一堆层级目录,直接从当前目录开始显示,非常好的参数;
后面是ftp的地址,斜杠后的 * 表示下载该目录下的所有文件,如果只是一个文件,直接输入文件名即可。
五、Q&A
A.使用wget工具linux所以的主要版本都自带了Linux wget这个下载工具.bash$ wget http://place.your.url/here它还能控制ftp来下载整个web站点的各级目录,当然,如果你不小心,可能会把整个网站以及其他和他做链接的网站全部下载下来.bash$ wget -m http://target.web.site/subdirectory由于这个工具具有很强的下载能力,所以可以在服务器上把它用作镜像网站的工具.让它按照”robots.txt”的规定来执行.有很多参数用来控制它如何正确地做镜像,可以限制链接的类型和下载文件的类型等等.例如:只下载有联系的链接并且忽略GIF图片:
Linux wget也能够实现断点续传(-c参数),当然,这种操作是需要远程服务器支持的.
如果你觉得下载时老是断线会影响你办公的话,你可以限制Linux wget重试的次数.
B.那对于代理服务该怎么办呢?可以使用http代理的参数或者在.wgetrc配置文件里指定一个如何通过代理去下载的途径.但是有这么一个问题,如果通过代理来进行断点续传的话可能会有几次失败.如果有一次通过代理下载的过程发生中断,那么代理服务器上缓存里保存是那个完整的文件拷贝. 所以当你用”wget -c”来下载剩余部分的时候代理服务器查看它的缓存,并错误地认为你已经下载了整个文件.于是就发出了错误的信号.这个时候你可以用添加一个特定的请求参数来促使代理服务器清除他们的缓存:
这个”–header”参数能够以各种数字,各种方式添加。通过它我们可以更改web服务器或者代理服务器的某些属性。有些站点不提供外部连接的文件服务,只有通过同一个站点上其他的一些页面时内容才会被提交。这个时候你可以用加上”Referer:”参数:bash$ wget –header=”Referer: http://coming.from.this/page” http://surfing.to.this/page有些特殊的网站只支持某种特定的浏览器,这个时候可以用”User-Agent:”参数
复制代码代码如下:bash$ wget –header=”User-Agent: Mozilla/4.0 (compatible; MSIE 5.0;Windows NT; DigExt)” http://msie.only.url/hereC.那我怎么设定下载时间呢?
如果你需要在你的办公电脑上通过和其他同事共享的一个连接来下载一些很大的文件,而且你希望你的同事不会因为网络速度的减慢而收到影响,那你就应该尽量避开高峰时段。当然,不需要在办公室里等到所以人都走掉,也不需要在家里用完晚饭后还惦记着要上网下载一次。用at来就可以很好的定制工作时间:bash$ at 23:00warning: commands will be executed using /bin/shat> wget http://place.your.url/hereat> press Ctrl-D这样,我们设定了下载工作在晚上11点进行。为了使这个安排能够正常进行,请确认atd这个后台程序正在运行。
D.下载要花很多时间?
当你需要下载大量的数据,而且你又没有享有足够的带宽,这个时候你会经常发现在你安排的下载任务还没有完成,一天的工作却又要开始了。
作为一个好同事,你只能停掉了这些任务,而开始另外的工作。然后你又需要反复地重复使用”wget -c”来完成你的下载。这样肯定太繁琐了,所以最好是用crontab来自动执行。创建一个纯文本文件,叫做”crontab.txt”,包含下面的内容:0 23 * * 1-5 wget -c -N http://place.your.url/here0 6 * * 1-5 killall wgetz这个crontab文件指定某些任务定期地执行。前五列声明是什么时候执行这个命令,而每行的剩余部分则告诉crontab执行什么内容。
前两列指定了每天一到晚上11点就开始用Linux wget下载,一到早上6点就停止一切Linux wget下载。第三四列的*表示每个月的每一天都执行这个任务。第五列则指定了一个星期的哪几天来执行这个程序。 –”1-5″表示从星期一到星期五。这样在每个工作日的晚上11点,下载工作开始,到了上午的6点,任何的Linux wget任务就被停掉了。你可以用下面的命令来执行
Linux wget的这个”-N”参数将会检查目标文件的时间戳,如果匹配了,下载程序就会停止,因为它说明整个文件已经下载完全了。用”crontab -r”可以删除这个计划安排。我已经多次采用这种方法,通过共享的电话拨号来下载过很多的ISO镜像文件,还是比较实用的。
E.如何下载动态变化的网页
有些网页每天都要根据要求变化好几次.所以从技术上讲,目标不再是一个文件,它没有文件长度.因此”-c”这个参数也就失去了意义.例如:一个PHP写的并且经常变动的linux周末新闻网页:
我办公室里的网络条件经常很差,给我的下载带了很大的麻烦,所以我写了个简单的脚本来检测动态页面是否已经完全更新了.
F.对于ssl和Cookies怎么办?
如果你要通过ssl来上网,那么网站地址应该是以”https://”来开头的.在这样的情况下你就需要另外一种下载工具,叫做curl,它能够很容易获得.有些网站迫使网友在浏览的时候必须使用cookie.所以你必须从在网站上得到的那个 Cookie里面得到”Cookie:”这个参数.这样才能保证下载的参数正确.对于lynx和Mozilla的Cookie的文件格式,用下面的:
G.如何建立地址列表?
到现在为止我们下载的都是单个文件或者是整个网站.有的时候我们需要下载某个网页上链接的大量文件,但没有必要把它整个网站都镜像下来.比如说我们想从一个依次排列的100首歌里面下载前20首.注意,这里”–accept”和”–reject”参数是不会起作用的, 因为他们只对文件操作起作用.所以一定要用”lynx -mp”参数来代替.
H.扩大使用的带宽
如果你选择下载一个受带宽限制的文件,那你的下载会因为服务器端的限制而变得很慢.下面这个技巧会大大缩短下载的过程.但这个技巧需要你使用curl并且远程服务器有多个镜像可以供你下载.例如,假设你想从下面的三个地址下载Mandrake 8.0: