Ubuntu 16.04 apache rotatelogs 日志配置
用Apache自带的rotatelogs程序处理apache生成的日志自动截断重新生成,rotatelogs是一个配合Apache管道日志功能使用的简单程序。
编辑sites-available/default.conf配置文件:
注释掉配置中的log:
#ErrorLog ${APACHE_LOG_DIR}/error.log #CustomLog ${APACHE_LOG_DIR}/access.log combined新增如下两行:
CustomLog "|bin/rotatelogs ${APACHE_LOG_DIR}/access.%Y%m%d.log 86400 480" combined env=!NOLOG ErrorLog "|bin/rotatelogs ${APACHE_LOG_DIR}/error.%Y%m%d.log 86400 480"以年月日为单位记录日志信息。其中480为时差,文件的时间为美国时间,中国的时差要比美国多8个小时也就是480分钟,所以要加上480分钟;
86400为轮转的时间单位为秒。
配置好之后,重启apache。
如果想要设置日志文件的大小,可以添加如下两行:
CustomLog "|bin/rotatelogs ${APACHE_LOG_DIR}/access.%Y%m%d.log 20M 86400 480" combined env=!NOLOG ErrorLog "|bin/rotatelogs ${APACHE_LOG_DIR}/error.%Y%m%d.log 20M 86400 480"意思是日志达到20M 后生成新的日志文件,支持的单位为K,M,G。
以年月日时分秒为单位的,其他支持的日志格式参数如下:
%A 星期名全称(本地的)
%a 3个字符的星期名(本地的)
%B 月份名的全称(本地的)
%b 3个字符的月份名(本地的)
%c 日期和时间(本地的)
%d 2位数的一个月中的日期数
%H 2位数的小时数(24小时制)
%I 2位数的小时数(12小时制)
%j 3位数的一年中的日期数
%M 2位数的分钟数
%m 2位数的月份数
%p am/pm 12小时制的上下午(本地的)
%S 2位数的秒数
%U 2位数的一年中的星期数(星期天为一周的第一天)
%W 2位数的一年中的星期数(星期一为一周的第一天)
%w 1位数的星期几(星期天为一周的第一天)
%X 时间 (本地的)
%x 日期 (本地的)
%Y 4位数的年份
标签: apache rotatelogs
为什么用 B+ 树做索引而不用哈希表做索引
1、哈希表是把索引字段映射成对应的哈希码然后再存放在对应的位置,这样的话,如果我们要进行模糊查找的话,显然哈希表这种结构是不支持的,只能遍历这个表。而B+树则可以通过最左前缀原则快速找到对应的数据。2、如果我们要进行范围查找,例如查找ID为100 ~ 400的人,哈希表同样不支持,只能遍历全表。
3、索引字段通过哈希映射成哈希码,如果很多字段都刚好映射到相同值的哈希码的话,那么形成的索引结构将会是一条很长的链表,这样的话,查找的时间就会大大增加。
这篇文章写的不错,可以作为参考https://www.toutiao.com/i6668146342700777991
https://mp.weixin.qq.com/s/j-meke0QMqTgPInj118UZA
标签: mysql索引
Ubuntu16.04 安装nginx
首先安装nginx。
sudo apt-get install nginx安装成功之后nginx相关目录:
/usr/sbin/nginx 主程序 /etc/nginx 存放配置文件 /usr/share/nginx 存放静态文件 /var/log/nginx 存放日志安装成功之后查看nginx是否启动:
sudo lsof -i:80

浏览器ip访问,nginx是否安装成功
nginx的配置文件:
/etc/nginx/nginx.conf
进入配置文件,修改配置
浏览器访问wwwbb.com,一直会出现5XX的错误,查看nginx错误日志server { listen 80 default_server; listen [::]:80 default_server; root /var/www/html; index index.html index.htm index.nginx-debian.html; server_name www.bb.com; location / { proxy_pass http://127.0.0.1; } }

重现修改配置文件:
server { listen 80 default_server; listen [::]:80 default_server; root /var/www/html; index index.html index.htm index.nginx-debian.html; server_name www.bb.com; #location / { #proxy_pass http://127.0.0.1; #} }
访问正常。
如果是代理https需要安装证书
ubuntu系统中使用Cerbot获取证书
sudo apt-get update sudo apt-get install software-properties-common sudo add-apt-repository ppa:certbot/certbot sudo apt-get update sudo apt-get install python-certbot-nginx
sudo certbot --authenticator webroot --installer nginx自动更新
单次申请的免费证书有效时间是90天。所有我们要设置免费续费。这样就可以一直免费试用下去了。
sudo certbot renew --dry-run也可以使用其他网站生成免费的证书:http://freessl.cn
PHP二分法查找算法原理和代码实现
2019-3-20 Stone
二分法查找算法原理:
当数据量很大时适宜采用该方法,采用二分法查找时,前提条件是数据必须是排好序的,其主要思想是:
(设查找的数组区间为array[low, high])
(1)确定该期间的中间位置K
(2)将查找的值T与array[k]比较。若相等,查找成功返回此位置;否则确定新的查找区域,继续二分查 找。区域确定如下:a.array[k]>T 由数组的有序性可知array[k,k+1,……,high]>T;故新的区间为array[low,……,K- 1]b.array[k]<T 类似上面查找区间为array[k+1,……,high]。每一次查找与中间值比较,可以确定是否查找成功,不成功当前查找区间缩小一半。递归找即可,时间复杂度:O(log2n)。
PHP实现代码:
<?php
//search函数 其中$array为数组,$k为要找的值,$low为查找范围的最小键值,$high为查找范围的最大键值
function search($array, $k, $low=0, $high=0)
{
if(count($array)!=0 and $high == 0) //判断是否为第一次调用
{
$high = count($array);
}
if($low <= $high) //如果还存在剩余的数组元素
{
$mid = intval(($low+$high)/2); //取$low和$high的中间值
if ($array[$mid] == $k) //如果找到则返回
{
return $mid;
}
elseif ($k < $array[$mid]) //如果没有找到,则继续查找
{
return search($array, $k, $low, $mid-1);
}
else
{
return search($array, $k, $mid+1, $high);
}
}
return -1;
}
$array = array(4,5,7,8,9,10); //测试search函数
echo search($array, 8); //调用search函数并输出查找结果
原文链接:http://www.blogdaren.com/post-1258.html
centos删除特殊字符的文件
不知道什么原因造成的,centos里出现了好多有特殊字符的文件,如图:
使用rm -rf 又删除不掉。
操作步骤:
先查找文件的id:
shell> ls -i

再执行删除操作:
shell > find ./ -inum 69922 | xargs rm -rf至此就删除成功了。
标签: 删除特殊字符的文件
MYSQL自增的问题
一张表里ID是自增主键,当insert17条记录后,删除了第15、16、17条记录,在重启mysql,再插入一条记录,这条记录的ID是多少?
如果表的类型是MyISAM,新插入记录的id是18 原因:MyISAM表会把自增主键的最大ID记录到数据文件里,重启mysql后,自增主键的最大ID不会丢失。 如果是InnoDB,新插入记录的id是15 原因:InnoDB表指示把自增主键的最大ID记录到内存中,重启mysql后,会导致最大ID丢失。以InnoDB类型的表做测试。
初始数据
删除第4、5条数据后,重启mysql,在插入新数据
无论是MyISAM还是InnoDB,删除数据后,不重启mysql的情况下,新插入的记录最大ID是相同的。
php socket常用函数
<?php echo 'php socket相关函数:<br/>'; $str = <<<EOF <p>1、<b>socket_create():</b>创建并返回一个套接字。<br/>\n</p> <p><b>常用:</b></p> <p>socket_create(int \$domain, int \$type, int \$protocol); <br/>\n</p> <p><b>参数:</b></br>\n</p> <p>1)、domain:参数指定哪个协议用在当前套接字上。<br/>\n</p> <p>AF_INET:IPv4 网络协议。TCP 和 UDP 都可使用此协议。<br/>\n</p> <p>AF_INET6:IPv6 网络协议。TCP 和 UDP 都可使用此协议。<br/>\n</p> <p>AF_UNIX:本地通讯协议。具有高性能和低成本的 IPC(进程间通讯)。<br/>\n</p> <p>2)、type:用于选择套接字使用的类型。<br/>\n</p> <p>SOCK_STREAM:提供一个顺序化的、可靠的、全双工的、基于连接的字节流。支持数据传送流量控制机制。TCP 协议即基于这种流式套接字。<br/>\n</p> <p>SOCK_DGRAM:提供数据报文的支持。(无连接,不可靠、固定最大长度).UDP协议即基于这种数据报文套接字。<br/>\n</p> <p>SOCK_SEQPACKET:提供一个顺序化的、可靠的、全双工的、面向连接的、固定最大长度的数据通信;数据端通过接收每一个数据段来读取整个数据包。<br/>\n</p> <p>SOCK_RAW:提供读取原始的网络协议。这种特殊的套接字可用于手工构建任意类型的协议。一般使用这个套接字来实现 ICMP 请求(例如 ping)。<br/>\n</p> <p>SOCK_RDM:提供一个可靠的数据层,但不保证到达顺序。一般的操作系统都未实现此功能。<br/>\n</p> <p>3)、protocol 参数,是设置指定 domain 套接字下的具体协议。这个值可以使用 getprotobyname() 函数进行读取。如果所需的协议是 TCP 或 UDP,可以直接使用常量 SOL_TCP 和 SOL_UDP 。 <br/>\n</p> <p>icmp:Internet Control Message Protocol 主要用于网关和主机报告错误的数据通信。例如“ping”命令(在目前大部分的操作系统中)就是使用 ICMP 协议实现的。<br/>\n</p> <p>udp:User Datagram Protocol 是一个无连接的、不可靠的、具有固定最大长度的报文协议。由于这些特性,UDP 协议拥有最小的协议开销。<br/>\n</p> <p>tcp:Transmission Control Protocol 是一个可靠的、基于连接的、面向数据流的全双工协议。TCP 能够保障所有的数据包是按照其发送顺序而接收的。如果任意数据包在通讯时丢失,TCP 将自动重发数据包直到目标主机应答已接收。因为可靠性和性能的原因,TCP 在数据传输层使用 8bit 字节边界。因此,TCP 应用程序必须允许传送部分报文的可能。 <br/>\n</p> <p><b>返回值:</b><br/>\n</p> <p>socket_create() 正确时返回一个套接字,失败时返回 FALSE。要读取错误代码,可以调用 socket_last_error()。这个错误代码可以通过 socket_strerror() 读取文字的错误说明。<br/>\n</p> <p><b>错误/异常:</b><br/>\n</p> <p>如果使用一个无效的 domain 或 type,socket_create() 会使用 AF_INET 和 SOCK_STREAM 替代无效参数,同时会发出 E_WARNING 警告信息。<br/>\n</p> <p>2、<b>socket_accept():</b>接受一个Socket连接.<br/>\n</p> <p><b>参数</b><br/>\n</p> <p>socket:socket_create()创建的套接字。<br/>\n</p> <p><b>返回值</b><br>\n</p> <p>成功:返回新的连接;失败:返回错误信息。<br/>\n</p> <p>3、<b>socket_bind():</b>给套接字绑定名字。<br/>\n</p> <p><b>说明:</b>bool socket_bind ( resource \$socket , string \$address [, int \$port = 0 ] )<br/>\n</p> <p>绑定 address 到 socket。 该操作必须是在使用 socket_connect() 或者 socket_listen() 建立一个连接之前。<br/>\n</p> <p><b>参数:</b><br/>\n</p> <p>socket:用 socket_create() 创建的一个有效的套接字资源。<br/>\n</p> <p>address:如果套接字是 AF_INET 族,那么 address 必须是一个四点分法的 IP 地址(例如 127.0.0.1 )。<br/>\n</p> <p> 如果套接字是 AF_UNIX 族,那么 address 是 Unix 套接字一部分(例如 /tmp/my.sock )。<br/>\n</p> <p>port (可选):参数 port 仅仅用于 AF_INET 套接字连接的时候,并且指定连接中需要监听的端口号。<br/>\n</p> <p><b>返回值:</b><br/>\n</p> <p> 成功时返回 TRUE, 或者在失败时返回 FALSE。错误代码会传入 socket_last_error() ,如果将此参数传入 socket_strerror() 则可以得到错误的文字说明。<br/>\n</p> <p>4、<b>socket_listen():</b>监听由指定socket的所有连接<br/>\n</p> <p><b>说明:</b>bool socket_listen ( resource \$socket [, int \$backlog = 0 ] )<br/>\n</p> <p><b>参数</b><br/>\n</p> <p>socket:由socket_create()或者socket_addrinfo_bind()创建的套接字。<br/>\n</p> <p>backlog:返回的日志进入队列等待处理。如果请求到达队列时,队列已满,则客户端可能会收到带有ECONNREFUSED指示的错误,或者,如果底层协议支持重传,则该请求可能被忽略,以便重试可能成功。<br/>\n</p> <p><b>返回值</b><br/>\n</p> <p>成功时返回 TRUE, 或者在失败时返回 FALSE。</p> <p>5、<b>socket_addrinfo_bind():</b>根据ip创建绑定一个套接字<br/>\n</p> <p><b>说明:</b>resource socket_addrinfo_bind ( resource \$addr )<br/>\n</p> <p><b>参数</b><br/>\n</p> <p>addr:socket_addrinfo_lookup()创建的数据源</p> <p><b>返回值</b><br/>\n</p> <p>成功返回一个套接字,失败返回空。</p> <p>6、<b>socket_addrinfo_lookup():</b>根据getaddrinfo获取给定主机的相关数组</p> <p><b>说明:</b>array socket_addrinfo_lookup ( string \$host [, string \$service [, array \$hints ]] )</p> <p>查找不同的连接主机的方式。返回作为socekt_addringo_bind()的源数组</p> <p><b>参数</b></p> <p>host:查找主机名。</p> <p>service:要连接的服务。如果是服务名称,则将其转换成对应的端口号。</p> <p>hints:提示提供了选择返回地址的标准。您可以指定由getadrinfo定义的提示。</p> <p><b>返回值</b></p> <p>返回可与其他Socket_addrinfo函数一起使用的AddrInfo资源句柄数组。</p> <p>7、<b>socket_addrinfo_connect():</b>从给定的addrinfo创建并连接到套接字</p> <p><b>说明:</b>resource socket_addrinfo_connect ( resource \$addr )</p> <p>根据AddrInfo资源创建并连接套接字。此函数的返回值可与套接字函数的其余部分一起使用。</p> <p><b>参数</b></p> <p>addr:socket_addrinfo_lookup()返回的资源。</p> <p><b>返回值</b></p> <p>成功返回一个套接字,失败返回空。</p> <p>8、<b>socket_addrinfo_explain():</b>获取有关addrinfo的信息</p> <p><b>说明:</b>array socket_addrinfo_explain ( resource \$addr )</p> <p>addrinfo的基础结构。</p> <p><b>参数</b></p> <p>addr:socket_addrinfo_lookup()所创建的资源。</p> <p><b>返回值</b></p> <p>返回包含addrinfo结构中的字段的数组。</p> <p>9、<b>socket_close():</b>关闭套接字资源</p> <p><b>说明:</b>void socket_close ( resource \$socket )</p> <p>socket_close() 会关闭掉给定的 socket 资源。 这个函数只针对套接字资源有效,不能用在其他类型的资源类型上。</p> <p><b>参数</b></p> <p>socket:由 socket_create() 或者是 socket_accept() 创建的有效的套接字资源。</p> <p><b>返回值</b></p> <p>没有返回值。</p> <p>10、<b>socket_clear_error():</b>清除套接字或者最后的错误代码上的错误</p> <p><b>说明:</b>void socket_clear_error ([ resource \$socket ] )</p> <p>这个函数清除给定的套接字上的错误代码或是最后一个全局的套接字如果套接字没有指定的话</p> <p>这个函数允许明确的重置错误代码值 不论是一个套接字或者最后全局错误代码的扩展, 这对在检测应用的一部分是否有错误发生是十分有用的 。</p> <p><b>参数</b></p> <p>socket:用socket_create()创建的有效的套接字资源。</p> <p><b>返回值</b></p> <p>没有返回值</p> <p>11、<b>socket_cmsg_space():</b>计算消息缓冲区大小</p> <p><b>说明:</b>int socket_cmsg_space ( int \$level , int \$type [, int \$n = 0 ] )</p> <p>计算应该分配用于接收辅助数据的缓冲区的大小。</p> <p><b>参数</b></p> <p><b>返回值</b></p> <p>12、<b>socket_create_listen():</b>打开套接字的端口以接受连接。</p> <p><b>说明:</b>resource socket_create_listen ( int \$port [, int \$backlog = 128 ] )</p> <p>创建AF_INET类型的新套接字资源,侦听给定端口上等待新连接的所有本地接口。</p> <p><b>参数</b></p> <p>port:侦听所有接口上的端口</p> <p>backlog:Backlog参数定义挂起连接的队列可能增长到的最大长度。SOMAXCONN可以作为Backlog参数传递,有关更多信息,请参见Socket_LEAN()。</p> <p><b>返回值</b></p> <p>成功返回一个新的套接字连接;失败返回错误。</p> <p>可以使用Socket_LEST_ERROR()检索错误代码。可以将此代码传递给Socket_strror()以获得错误的文本解释。</p> <p>13、<b>socket_create_pair():</b>创建一对不可区分的套接字,并将它们存储在数组中。</p> <p><b>说明:</b>bool socket_create_pair ( int \$domain , int \$type , int \$protocol , array &\$fd )</p> <p>创建两个连接和不可区分的套接字,并将它们存储在FD中。这一功能通常用于IPC(InterProcessCommunications)。</p> <p><b>参数</b></p> <p>domain:domain参数指定套接字要使用的协议系列。有关完整列表,请参见Socket_CREATE()。</p> <p>type:type参数选择套接字使用的通信类型。有关完整列表,请参见Socket_CREATE()。</p> <p>protocol:protocol参数设置指定域中的特定协议,以便在返回的套接字上进行通信时使用。可以通过使用getProbyname()按名称检索适当的值。如果所需的协议是TCP或UDP,则还可以使用相应的常量SOLTCP和SOLUDP。</p> <p>有关支持的协议的完整列表,请参见Socket_CREATE()。</p> <p>fd:对插入两个套接字资源的数组的引用。</p> <p><b>返回值</b></p> <p>成功时返回 TRUE, 或者在失败时返回 FALSE。</p> <p>14、<b>socket_export_stream():</b>将套接字扩展资源导出到封装套接字的流中。</p> <p><b>说明:</b>resource socket_export_stream ( resource \$socket )</p> <p>15、<b>socket_get_option():</b>获取套接字的套接字选项。</p> <p><b>说明:</b>mixed socket_get_option ( resource \$socket , int \$level , int \$optname )</p> <p>检索指定套接字的optname参数指定的选项的值。</p> <p><b>参数</b></p> <p>socket:使用Socket_create()或Socket_Accept()创建的有效套接字资源。</p> <p>level:级别参数指定选项所在的协议级别。例如,要在套接字级别检索选项,将使用SOLSOCKET的级别参数。其他级别(如TCP)可以通过指定该级别的协议号来使用。协议编号可以通过使用getProbyname()函数找到。</p> <p>optname:</p> <p> <table border="1" cellspacing="0" cellpadding="0"> <tr> <th>Option</th><th>Description</th><th>Type</th> </tr> <tr> <td>SO_DEBUG</td> <td>报告是否正在记录调试信息。</td> <td>int</td> </tr> <tr> <td>SO_BROADCAST</td> <td>报告是否支持广播消息的传输。</td> <td>int</td> </tr> <tr> <td>SO_REUSEADDR</td> <td>报告是否可以重用本地地址。</td> <td>int</td> </tr> <tr> <td>SO_REUSEPORT</td> <td>报告是否可以重用本地端口。</td> <td>int</td> </tr> <tr> <td>SO_KEEPALIVE</td> <td>报告定期发送消息时是否保持连接处于活动状态。如果连接的套接字无法响应这些消息,则连接中断,写入该套接字的进程将被SIGPIPE信号通知。</td> <td>int</td> </tr> <tr> <td>SO_LINGER</td> <td>报告如果存在数据,套接字是否停留在Socket_CLOSE()上。默认情况下,当套接字关闭时,它将尝试发送所有未发送的数据。对于面向连接的套接字,Socket_CLOSE()将等待其对等方确认数据。<br> 如果l_onOff为非零且l_linger为零,则所有未发送的数据将被丢弃,在面向连接的套接字情况下,rst(重置)被发送到对等端.<br/> 另一方面,如果l_onOff为非零且llinger为非零,则Socket_Close()将被阻塞,直到所有数据被发送或llinger中指定的时间消失为止。如果套接字是非阻塞的,则Socket_CLOSE()将失败并返回一个错误。 </td> <td>array</td> </tr> <tr> <td>SO_OOBINLINE</td> <td>报告套接字是否遗漏带外数据内联。</td> <td>int</td> </tr> <tr> <td>SO_SNDBUF</td> <td>报告发送缓冲区的大小。</td> <td>int</td> </tr> <tr> <td>SO_RCVBUF</td> <td>报告接收缓冲区的大小。</td> <td>int</td> </tr> <tr> <td>SO_ERROR</td> <td>报告有关错误状态的信息并清除它。</td> <td>int</td> </tr> <tr> <td>SO_TYPE</td> <td>报告套接字类型(例如sock_stream)。</td> <td>int</td> </tr> <tr> <td>SO_DONTROUTE</td> <td>报告传出消息是否绕过标准路由设施。</td> <td>int</td> </tr> <tr> <td>SO_RCVLOWAT</td> <td>报告要处理套接字输入操作的最小字节数。</td> <td>int</td> </tr> <tr> <td>SO_RCVTIMEO</td> <td>报告输入操作的超时值。</td> <td>array</td> </tr> <tr> <td>SO_SNDTIMEO</td> <td>报告超时值,指定输出函数阻塞的时间量,因为流控制阻止发送数据。</td> <td>array</td> </tr> <tr> <td>SO_SNDLOWAT</td> <td>报告要处理套接字输出操作的最小字节数。</td> <td>int</td> </tr> <tr> <td>TCP_NODELAY</td> <td>报告是否禁用Nagle TCP算法。</td> <td>int</td> </tr> <tr> <td>MCAST_JOIN_GROUP</td> <td>加入多播组。(在PHP 5.4中添加)</td> <td>array</td> </tr> <tr> <td>MCAST_LEAVE_GROUP</td> <td>留下一个多播组。(在PHP 5.4中添加)</td> <td>array</td> </tr> <tr> <td>MCAST_BLOCK_SOURCE</td> <td>阻止从特定源到达特定多播组的数据包,该分组必须之前已被加入。(在PHP 5.4中添加)</td> <td>array</td> </tr> <tr> <td>MCAST_UNBLOCK_SOURCE</td> <td>解除从特定源地址到达特定多播组的数据包(重新开始接收),该分组必须已被加入。(在PHP 5.4中添加)</td> <td>array</td> </tr> <tr> <td>MCAST_JOIN_SOURCE_GROUP</td> <td>接收发送到源地址与特定值匹配的特定多播组的数据包。(在PHP 5.4中添加)</td> <td>array</td> </tr> <tr> <td>MCAST_LEAVE_SOURCE_GROUP</td> <td>停止接收发送到其源地址与特定值匹配的特定多播组的数据包。(在PHP 5.4中添加)</td> <td>array</td> </tr> <tr> <td>IP_MULTICAST_IF</td> <td>IPv 4组播数据包的传出接口。(在PHP 5.4中添加)</td> <td>int</td> </tr> <tr> <td>IPV6_MULTICAST_IF</td> <td>IPv 6组播数据包的传出接口。(在PHP 5.4中添加)</td> <td>int</td> </tr> <tr> <td>IP_MULTICAST_LOOP</td> <td>IPv 4分组的组播回送策略,它确定由该套接字发送的多播分组是否也到达在该套接字所使用的传出接口上已加入相同多播组的同一主机中的接收方。这是默认情况。(在PHP 5.4中添加)</td> <td>int</td> </tr> <tr> <td>IPV6_MULTICAST_LOOP</td> <td>类似于IP_MULTICAST_LOOP,但适用于IPv 6。(在PHP 5.4中添加)</td> <td>int</td> </tr> <tr> <td>IP_MULTICAST_TTL</td> <td>传出IPv 4多播数据包的时间。这个值应该介于0(不要离开接口)和255之间。默认值为1(仅达到本地网络)。(在PHP 5.4中添加)</td> <td>int</td> </tr> <tr> <td>IPV6_MULTICAST_HOPS</td> <td>类似于IP_MULTICAST_TTL,但适用于IPv 6数据包。值-1也被接受,这意味着应该使用路由默认值。(在PHP 5.4中添加)</td> <td>int</td> </tr> </table> </p> <p> <table cellspacing="0" cellpadding="0" border="1"> <caption><strong>Available Socket Options</strong></caption> <thead> <tr> <th>Option</th> <th>Description</th> <th>Type</th> </tr> </thead> <tbody class="tbody"> <tr> <td><strong><code>SO_DEBUG</code></strong></td> <td> Reports whether debugging information is being recorded. </td> <td> <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> </td> </tr> <tr> <td><strong><code>SO_BROADCAST</code></strong></td> <td> Reports whether transmission of broadcast messages is supported. </td> <td> <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> </td> </tr> <tr> <td><strong><code>SO_REUSEADDR</code></strong></td> <td> Reports whether local addresses can be reused. </td> <td> <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> </td> </tr> <tr> <td><strong><code>SO_REUSEPORT</code></strong></td> <td> Reports whether local ports can be reused. </td> <td> <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> </td> </tr> <tr> <td><strong><code>SO_KEEPALIVE</code></strong></td> <td> Reports whether connections are kept active with periodic transmission of messages. If the connected socket fails to respond to these messages, the connection is broken and processes writing to that socket are notified with a SIGPIPE signal. </td> <td> <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> </td> </tr> <tr> <td><strong><code>SO_LINGER</code></strong></td> <td> <p class="para"> Reports whether the <code class="parameter">socket</code> lingers on <span class="function"><a href="function.socket-close.php" class="function">socket_close()</a></span> if data is present. By default, when the socket is closed, it attempts to send all unsent data. In the case of a connection-oriented socket, <span class="function"><a href="function.socket-close.php" class="function">socket_close()</a></span> will wait for its peer to acknowledge the data. </p> <p class="para"> If <var class="varname"><var class="varname">l_onoff</var></var> is non-zero and <var class="varname"><var class="varname">l_linger</var></var> is zero, all the unsent data will be discarded and RST (reset) is sent to the peer in the case of a connection-oriented socket. </p> <p class="para"> On the other hand, if <var class="varname"><var class="varname">l_onoff</var></var> is non-zero and <var class="varname"><var class="varname">l_linger</var></var> is non-zero, <span class="function"><a href="function.socket-close.php" class="function">socket_close()</a></span> will block until all the data is sent or the time specified in <var class="varname"><var class="varname">l_linger</var></var> elapses. If the socket is non-blocking, <span class="function"><a href="function.socket-close.php" class="function">socket_close()</a></span> will fail and return an error. </p> </td> <td> <span class="type"><a href="language.types.array.php" class="type array">array</a></span>. The array will contain two keys: <var class="varname"><var class="varname">l_onoff</var></var> and <var class="varname"><var class="varname">l_linger</var></var>. </td> </tr> <tr> <td><strong><code>SO_OOBINLINE</code></strong></td> <td> Reports whether the <code class="parameter">socket</code> leaves out-of-band data inline. </td> <td> <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> </td> </tr> <tr> <td><strong><code>SO_SNDBUF</code></strong></td> <td> Reports the size of the send buffer. </td> <td> <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> </td> </tr> <tr> <td><strong><code>SO_RCVBUF</code></strong></td> <td> Reports the size of the receive buffer. </td> <td> <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> </td> </tr> <tr> <td><strong><code>SO_ERROR</code></strong></td> <td> Reports information about error status and clears it. </td> <td> <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> (cannot be set by <span class="function"><a href="function.socket-set-option.php" class="function">socket_set_option()</a></span>) </td> </tr> <tr> <td><strong><code>SO_TYPE</code></strong></td> <td> Reports the <code class="parameter">socket</code> type (e.g. <strong><code>SOCK_STREAM</code></strong>). </td> <td> <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> (cannot be set by <span class="function"><a href="function.socket-set-option.php" class="function">socket_set_option()</a></span>) </td> </tr> <tr> <td><strong><code>SO_DONTROUTE</code></strong></td> <td> Reports whether outgoing messages bypass the standard routing facilities. </td> <td> <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> </td> </tr> <tr> <td><strong><code>SO_RCVLOWAT</code></strong></td> <td> Reports the minimum number of bytes to process for <code class="parameter">socket</code> input operations. </td> <td> <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> </td> </tr> <tr> <td><strong><code>SO_RCVTIMEO</code></strong></td> <td> Reports the timeout value for input operations. </td> <td> <span class="type"><a href="language.types.array.php" class="type array">array</a></span>. The array will contain two keys: <var class="varname"><var class="varname">sec</var></var> which is the seconds part on the timeout value and <var class="varname"><var class="varname">usec</var></var> which is the microsecond part of the timeout value. </td> </tr> <tr> <td><strong><code>SO_SNDTIMEO</code></strong></td> <td> Reports the timeout value specifying the amount of time that an output function blocks because flow control prevents data from being sent. </td> <td> <span class="type"><a href="language.types.array.php" class="type array">array</a></span>. The array will contain two keys: <var class="varname"><var class="varname">sec</var></var> which is the seconds part on the timeout value and <var class="varname"><var class="varname">usec</var></var> which is the microsecond part of the timeout value. </td> </tr> <tr> <td><strong><code>SO_SNDLOWAT</code></strong></td> <td> Reports the minimum number of bytes to process for <code class="parameter">socket</code> output operations. </td> <td> <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> </td> </tr> <tr> <td><strong><code>TCP_NODELAY</code></strong></td> <td> Reports whether the Nagle TCP algorithm is disabled. </td> <td> <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> </td> </tr> <tr> <td><strong><code>MCAST_JOIN_GROUP</code></strong></td> <td> Joins a multicast group. (added in PHP 5.4) </td> <td> <span class="type"><a href="language.types.array.php" class="type array">array</a></span> with keys <em>"group"</em>, specifying a <span class="type"><a href="language.types.string.php" class="type string">string</a></span> with an IPv4 or IPv6 multicast address and <em>"interface"</em>, specifying either an interface number (type <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>) or a <em>string</em> with the interface name, like <em>"eth0"</em>. <em>0</em> can be specified to indicate the interface should be selected using routing rules. (can only be used in <span class="function"><a href="function.socket-set-option.php" class="function">socket_set_option()</a></span>) </td> </tr> <tr> <td><strong><code>MCAST_LEAVE_GROUP</code></strong></td> <td> Leaves a multicast group. (added in PHP 5.4) </td> <td> <span class="type"><a href="language.types.array.php" class="type array">array</a></span>. See <strong><code>MCAST_JOIN_GROUP</code></strong> for more information. (can only be used in <span class="function"><a href="function.socket-set-option.php" class="function">socket_set_option()</a></span>) </td> </tr> <tr> <td><strong><code>MCAST_BLOCK_SOURCE</code></strong></td> <td> Blocks packets arriving from a specific source to a specific multicast group, which must have been previously joined. (added in PHP 5.4) </td> <td> <span class="type"><a href="language.types.array.php" class="type array">array</a></span> with the same keys as <strong><code>MCAST_JOIN_GROUP</code></strong>, plus one extra key, <em>source</em>, which maps to a <span class="type"><a href="language.types.string.php" class="type string">string</a></span> specifying an IPv4 or IPv6 address of the source to be blocked. (can only be used in <span class="function"><a href="function.socket-set-option.php" class="function">socket_set_option()</a></span>) </td> </tr> <tr> <td><strong><code>MCAST_UNBLOCK_SOURCE</code></strong></td> <td> Unblocks (start receiving again) packets arriving from a specific source address to a specific multicast group, which must have been previously joined. (added in PHP 5.4) </td> <td> <span class="type"><a href="language.types.array.php" class="type array">array</a></span> with the same format as <strong><code>MCAST_BLOCK_SOURCE</code></strong>. (can only be used in <span class="function"><a href="function.socket-set-option.php" class="function">socket_set_option()</a></span>) </td> </tr> <tr> <td><strong><code>MCAST_JOIN_SOURCE_GROUP</code></strong></td> <td> Receive packets destined to a specific multicast group whose source address matches a specific value. (added in PHP 5.4) </td> <td> <span class="type"><a href="language.types.array.php" class="type array">array</a></span> with the same format as <strong><code>MCAST_BLOCK_SOURCE</code></strong>. (can only be used in <span class="function"><a href="function.socket-set-option.php" class="function">socket_set_option()</a></span>) </td> </tr> <tr> <td><strong><code>MCAST_LEAVE_SOURCE_GROUP</code></strong></td> <td> Stop receiving packets destined to a specific multicast group whose soure address matches a specific value. (added in PHP 5.4) </td> <td> <span class="type"><a href="language.types.array.php" class="type array">array</a></span> with the same format as <strong><code>MCAST_BLOCK_SOURCE</code></strong>. (can only be used in <span class="function"><a href="function.socket-set-option.php" class="function">socket_set_option()</a></span>) </td> </tr> <tr> <td><strong><code>IP_MULTICAST_IF</code></strong></td> <td> The outgoing interface for IPv4 multicast packets. (added in PHP 5.4) </td> <td> Either <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> specifying the interface number or a <span class="type"><a href="language.types.string.php" class="type string">string</a></span> with an interface name, like <em>eth0</em>. The value <span class="type"><span class="type 0">0</span></span> can be used to indicate the routing table is to used in the interface selection. The function <span class="function"><strong>socket_get_option()</strong></span> returns an interface index. Note that, unlike the C API, this option does NOT take an IP address. This eliminates the interface difference between <strong><code>IP_MULTICAST_IF</code></strong> and <strong><code>IPV6_MULTICAST_IF</code></strong>. </td> </tr> <tr> <td><strong><code>IPV6_MULTICAST_IF</code></strong></td> <td> The outgoing interface for IPv6 multicast packets. (added in PHP 5.4) </td> <td> The same as <strong><code>IP_MULTICAST_IF</code></strong>. </td> </tr> <tr> <td><strong><code>IP_MULTICAST_LOOP</code></strong></td> <td> The multicast loopback policy for IPv4 packets, which determines whether multicast packets sent by this socket also reach receivers in the same host that have joined the same multicast group on the outgoing interface used by this socket. This is the case by default. (added in PHP 5.4) </td> <td> <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> (either <em>0</em> or <em>1</em>). For <span class="function"><a href="function.socket-set-option.php" class="function">socket_set_option()</a></span> any value will be accepted and will be converted to a boolean following the usual PHP rules. </td> </tr> <tr> <td><strong><code>IPV6_MULTICAST_LOOP</code></strong></td> <td> Analogous to <strong><code>IP_MULTICAST_LOOP</code></strong>, but for IPv6. (added in PHP 5.4) </td> <td> <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>. See <strong><code>IP_MULTICAST_LOOP</code></strong>. </td> </tr> <tr> <td><strong><code>IP_MULTICAST_TTL</code></strong></td> <td> The time-to-live of outgoing IPv4 multicast packets. This should be a value between 0 (don't leave the interface) and 255. The default value is 1 (only the local network is reached). (added in PHP 5.4) </td> <td> <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> between 0 and 255. </td> </tr> <tr> <td><strong><code>IPV6_MULTICAST_HOPS</code></strong></td> <td> Analogous to <strong><code>IP_MULTICAST_TTL</code></strong>, but for IPv6 packets. The value -1 is also accepted, meaning the route default should be used. (added in PHP 5.4) </td> <td> <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> between -1 and 255. </td> </tr> </tbody> </table> </p> <p><b>返回值</b></p> <p>返回给定选项的值,或错误时返回false。</p> <p>16、<b>socket_getopt():</b>别名 socket_get_option()</p> <p>17、<b>socket_getpeername():</b>查询给定套接字的远程端,这可能会导致主机/端口或Unix文件系统路径,这取决于其类型。</p> <p><b>说明:</b>bool socket_getpeername ( resource \$socket , string &\$address [, int &\$port ] )</p> <p>查询给定套接字的远程端,这可能会导致主机/端口或Unix文件系统路径,这取决于其类型。</p> <p><b>参数</b></p> <p>socket:使用Socket_create()或Socket_Accept()创建的有效套接字资源。</p> <p>address:如果给定的套接字类型为AF_INET或AF_INET 6,则Socket_getpeername()将在Address参数中以适当的表示法(例如127.0.0.1或fe80:1)返回对等点(远程)IP地址,如果存在可选端口参数,则还返回相关端口。</p> <p>如果给定的套接字是AF_UNIX类型,则Socket_getpeername()将在Address参数中返回Unix文件系统路径(例如/var/run/daemon.sock)。</p> <p>port:If given, this will hold the port associated to address. </p> <p><b>返回值</b></p> <p>成功时返回 TRUE, 或者在失败时返回 FALSE。 socket_getpeername() may also return FALSE if the socket type is not any of AF_INET, AF_INET6, or AF_UNIX, in which case the last socket error code is not updated. </p> <p>18、<b>socket_getsockname():</b>查询给定套接字的本地端,这可能会导致主机/端口或Unix文件系统路径,这取决于其类型。</p> <p><b>说明:</b>bool socket_getsockname ( resource \$socket , string &\$addr [, int &\$port ] )</p> <p>不应与使用Socket_CONNECT()创建的AF_UNIX套接字一起使用。只有在调用Socket_BIND()之后用Socket_Accept()或主服务器套接字创建的套接字才会返回有意义的值。</p> <p><b>参数</b></p> <p>socket: socket_create() 或者 socket_accept()创建的套接字。</p> <p>addr:如果给定的套接字类型为AF_iNet或AF_INET 6,则Socket_getsockname()将在Address参数中以适当的表示法(例如127.0.0.1或fe80:1)返回本地IP地址,如果存在可选端口参数,则还返回相关端口。</p> <p>如果给定的套接字是AF_UNIX类型,则Socket_getsockname()将在Address参数中返回Unix文件系统路径(例如/var/run/daemon.sock)。</p> <p>port:如果提供,这将保持关联的端口。</p> <p><b>返回值</b></p> <p>成功时返回 TRUE, 或者在失败时返回 FALSE。</p> <p>19、<b>socket_import_stream():</b>导入流</p> <p><b>说明:</b>resource socket_import_stream ( resource \$stream )</p> <p>将封装套接字的流导入套接字扩展资源。</p> <p><b>参数</b></p> <p>stream:要导入的流资源</p> <p><b>返回值</b></p> <p>失败时返回false或null。</p> <p>20、<b>socket_last_error():</b>返回套接字上的最后一个错误。</p> <p><b>说明:</b>int socket_last_error ([ resource \$socket ] )</p> <p>如果将套接字资源传递给此函数,则返回在此特定套接字上发生的最后一个错误。</p> <p>如果省略套接字资源,则返回上次失败的套接字函数的错误代码。后者对于像Socket_CREATE()这样的函数尤其有用,后者在失败时不返回套接字,而Socket_SELECT()可能由于与特定套接字没有直接关联的原因而失败。错误代码适合提供给Socket_strError(),后者返回描述给定错误代码的字符串。</p> <p>如果没有发生错误,或者使用Socket_CLEAR_ERROR()清除了错误,则函数返回0。</p> <p><b>参数</b></p> <p>socket:socket_create()创建的套接字</p> <p><b>返回值</b></p> <p>此函数返回套接字错误代码。</p> <p>21、<b>socket_read():</b>读取套接字的最大长度。</p> <p><b>说明:</b>string socket_read ( resource \$socket , int \$length [, int \$type = PHP_BINARY_READ ] )</p> <p>读取socket_create() 或者 socket_accept()创建的套接字。 </p> <p><b>参数</b></p> <p>socket:套接字。</p> <p>length:读取的最大字节数由Length参数指定。否则,可以使用\r、\n或\0结束读取(取决于类型参数,请参见下面)。</p> <p>type:可选type参数是一个命名常量:</p> <p>PHP_BINARY_READ (Default):use the system recv() function. Safe for reading binary data. </p> <p>PHP_NORMAL_READ:reading stops at \n or \r.</p> <p><b>返回值</b></p> <p>成功时以字符串形式返回数据,错误时返回false(包括远程主机已关闭连接时)。可以使用Socket_LEST_ERROR()检索错误代码。可以将此代码传递给Socket_strror()以获得错误的文本表示。</p> <p>22、<b>socket_recv():</b>从已连接的socket接收数据</p> <p><b>说明:</b>int socket_recv ( resource \$socket , string &\$buf , int \$len , int \$flags )</p> <p>函数 socket_recv() 从 socket 中接受长度为 len 字节的数据,并保存在 buf 中。 socket_recv() 用于从已连接的socket中接收数据。除此之外,可以设定一个或多个 flags 来控制函数的具体行为。 </p> <p>buf 以引用形式传递,因此必须是一个以声明的有效的变量。从 socket 中接收到的数据将会保存在 buf 中。</p> <p><b>参数</b></p> <p>socket:参数 socket 必须是一个由 socket_create() 创建的socket资源。</p> <p>buf:从socket中获取的数据将被保存在由 buf 制定的变量中。 如果有错误发生,如链接被重置,数据不可用等等, buf 将被设为 NULL。</p> <p>len:长度最多为 len 字节的数据将被接收。</p> <p>flags:flags 的值可以为下列任意flag的组合。使用按位或运算符(|)来 组合不同的flag。</p> <p> <table cellspacing="0" cellpadding="0" border="1" > <caption><strong>可用的 <code class="parameter">flags</code> 值</strong></caption> <thead> <tr> <th>Flag</th> <th>描述</th> </tr> </thead> <tbody class="tbody"> <tr> <td><strong><code>MSG_OOB</code></strong></td> <td> 处理超出边界的数据 </td> </tr> <tr> <td><strong><code>MSG_PEEK</code></strong></td> <td> 从接受队列的起始位置接收数据,但不将他们从接受队列中移除。 </td> </tr> <tr> <td><strong><code>MSG_WAITALL</code></strong></td> <td> 在接收到至少 <code class="parameter">len</code> 字节的数据之前,造成一个阻塞,并暂停脚本运行(block)。但是, 如果接收到中断信号,或远程服务器断开连接,该函数将返回少于 <code class="parameter">len</code> 字节的数据。 </td> </tr> <tr> <td><strong><code>MSG_DONTWAIT</code></strong></td> <td> 如果制定了该flag,函数将不会造成阻塞,即使在全局设置中指定了阻塞设置。 </td> </tr> </tbody> </table> </p> <p><b>返回值</b></p> <p>socket_recv() 返回一个数字,表示接收到的字节数。如果发生了错误,则返回 FALSE 错误码可使用 socket_last_error() 接收。也可使用函数 socket_strerror() 来取得关于错误的文字描述。 </p> <p>23、<b>socket_recvfrom():</b>从套接字接收数据,无论它是否面向连接。</p> <p><b>说明:</b>int socket_recvfrom ( resource \$socket , string &\$buf , int \$len , int \$flags , string &\$name [, int &\$port ] )</p> <p>Socket_recvfrom()函数使用套接字从端口上的名称(如果套接字不是AF_UNIX类型)接收BUF中的Len字节数据。Socket_recvfrom()可用于从连接和未连接的套接字收集数据。此外,可以指定一个或多个标志来修改函数的行为。</p> <p>名称和端口必须通过引用传递。如果套接字不面向连接,则名称将设置为远程主机的Internet协议地址或UNIX套接字的路径。如果套接字面向连接,则名称为NULL.此外,在未连接的AF_INET或AF_INET 6套接字的情况下,端口将包含远程主机的端口。</p> <p><b>参数</b></p> <p>socket:套接字必须是以前由Socket_create()创建的套接字资源。</p> <p>buf:接收到的数据将被取到用BUF指定的变量。</p> <p>len:最多可以从远程主机获取连字节。</p> <p>flags:flags的值可以是以下flags的任意组合,并与二进制OR(|)运算符连接。</p> <p> <table cellspacing="0" cellpadding="0" border="1" > <caption><strong>Possible values for <code class="parameter">flags</code></strong></caption> <thead> <tr> <th>Flag</th> <th>Description</th> </tr> </thead> <tbody class="tbody"> <tr> <td><strong><code>MSG_OOB</code></strong></td> <td> Process out-of-band data. </td> </tr> <tr> <td><strong><code>MSG_PEEK</code></strong></td> <td> Receive data from the beginning of the receive queue without removing it from the queue. </td> </tr> <tr> <td><strong><code>MSG_WAITALL</code></strong></td> <td> Block until at least <code class="parameter">len</code> are received. However, if a signal is caught or the remote host disconnects, the function may return less data. </td> </tr> <tr> <td><strong><code>MSG_DONTWAIT</code></strong></td> <td> With this flag set, the function returns even if it would normally have blocked. </td> </tr> </tbody> </table> </p> <p>name:如果套接字类型为AF_UNIX类型,则名称是文件的路径。否则,对于未连接的套接字,名称是远程主机的IP地址,如果套接字是面向连接的,则为NULL。</p> <p>port:此参数仅适用于AF_INET和AF_INET 6套接字,并指定接收数据的远程端口。如果套接字面向连接,端口将为空.</p> <p><b>返回值</b></p> <p>Socket_recvfrom()返回接收到的字节数,如果出现错误,返回false。可以通过调用Socket_LEVER_ERROR()来检索实际的错误代码。可以将此错误代码传递给Socket_strror()以获得错误的文本解释。</p> <p>24、<b>socket_recvmsg():</b>读取信息</p> <p><b>说明:</b>int socket_recvmsg ( resource \$socket , array &\$message [, int \$flags = 0 ] )</p> <p>25、<b>socket_select():</b>select()系统调用给定的具有指定超时的套接字数组</p> <p><b>说明:</b>int socket_select ( array &\$read , array &\$write , array &\$except , int \$tv_sec [, int \$tv_usec = 0 ] )</p> <p>socket_select() accepts arrays of sockets and waits for them to change status. Those coming with BSD sockets background will recognize that those socket resource arrays are in fact the so-called file descriptor sets. Three independent arrays of socket resources are watched. </p> <p><b>参数</b></p> <p>read:read数组中列出的套接字将被监视,以查看字符是否可用于读取(更准确地说,查看读取是否不会阻塞-特别是,套接字资源也可以在文件结束时准备好,在这种情况下,Socket_read()将返回一个零长度字符串)。</p> <p>write:将监视write数组中列出的套接字,以查看写入是否会阻塞。</p> <p>except:eexcept数组中列出的套接字将被监视异常。</p> <p>tv_sec:tv_sec和tv_usc共同构成超时参数。超时是Socket_SELECT()返回之前经过的时间的上限。tv_sec可能为零,从而导致Socket_select()立即返回。这对于轮询很有用。如果tv_sec为空(没有超时),则Socket_SELECT()可以无限期地阻塞。</p> <p>tv_usec:You do not need to pass every array to socket_select(). You can leave it out and use an empty array or NULL instead. Also do not forget that those arrays are passed by reference and will be modified after socket_select() returns. </p> <p><b>返回值</b></p> <p>在成功时,Socket_SELECT()返回包含在修改过的数组中的套接字资源数,如果超时在任何有趣的事情发生之前过期,则可能为零。如果出错,则返回false。可以使用Socket_LEST_ERROR()检索错误代码。</p> <p>26、<b>socket_send():</b>向连接的套接字发送数据</p> <p><b>说明:</b>int socket_send ( resource \$socket , string \$buf , int \$len , int \$flags )</p> <p>函数Socket_Send()从BUF向套接字发送len字节。</p> <p><b>参数</b></p> <p>socket:Socket_create()或Socket_Accept()创建的有效套接字资源。</p> <p>buf:包含将发送到远程主机的数据的缓冲区。</p> <p>len:从BUF发送到远程主机的字节数。</p> <p>flags:flags的值可以是以下标志的任意组合,并与二进制OR(|)运算符连接。</p> <p> <table cellspacing="0" cellpadding="0" border="1" > <caption><strong>Possible values for <code class="parameter">flags</code></strong></caption> <tbody class="tbody"> <tr> <td><strong><code>MSG_OOB</code></strong></td> <td> Send OOB (out-of-band) data. </td> </tr> <tr> <td><strong><code>MSG_EOR</code></strong></td> <td> Indicate a record mark. The sent data completes the record. </td> </tr> <tr> <td><strong><code>MSG_EOF</code></strong></td> <td> Close the sender side of the socket and include an appropriate notification of this at the end of the sent data. The sent data completes the transaction. </td> </tr> <tr> <td><strong><code>MSG_DONTROUTE</code></strong></td> <td> Bypass routing, use direct interface. </td> </tr> </tbody> </table> </p> <p><b>返回值</b></p> <p>Socket_Send()返回发送的字节数,或错误时返回false。</p> <p>27、<b>socket_sendmsg():</b>发送消息</p> <p><b>说明:</b>int socket_sendmsg ( resource \$socket , array \$message [, int \$flags = 0 ] )</p> <p><b>返回值</b></p> <p>Returns the number of bytes sent, 或者在失败时返回 FALSE. </p> <p>28、<b>socket_sendto():</b>向套接字发送消息,无论它是否已连接。</p> <p><b>说明:</b>int socket_sendto ( resource \$socket , string \$buf , int \$len , int \$flags , string \$addr [, int \$port = 0 ] )</p> <p>函数Socket_sendto()通过套接字将Len字节从BUF发送到地址addr的端口。</p> <p><b>参数:</b></p> <p>socket:socket_create()创建的套接字。</p> <p>buf:发送的数据将从缓冲区BUF获取。</p> <p>len:来自BUF的Len字节将被发送。</p> <p>flags:flags的值可以是以下flags的任意组合,并与二进制OR(|)运算符连接。</p> <p> <table cellspacing="0" cellpadding="0" border="1"> <caption><strong>Possible values for <code class="parameter">flags</code></strong></caption> <tbody class="tbody"> <tr> <td><strong><code>MSG_OOB</code></strong></td> <td> Send OOB (out-of-band) data. </td> </tr> <tr> <td><strong><code>MSG_EOR</code></strong></td> <td> Indicate a record mark. The sent data completes the record. </td> </tr> <tr> <td><strong><code>MSG_EOF</code></strong></td> <td> Close the sender side of the socket and include an appropriate notification of this at the end of the sent data. The sent data completes the transaction. </td> </tr> <tr> <td><strong><code>MSG_DONTROUTE</code></strong></td> <td> Bypass routing, use direct interface. </td> </tr> </tbody> </table> </p> <p>addr:远程主机的IP地址。</p> <p>port:端口是发送数据的远程端口号。</p> <p><b>返回值</b></p> <p>Socket_sendto()返回发送到远程主机的字节数,如果发生错误,返回false。</p> <p>29、<b>socket_set_block():</b>在套接字资源上设置阻塞模式</p> <p><b>说明:</b>bool socket_set_block ( resource \$socket )</p> <p>函数socket_set_block()删除套接字参数指定的套接字上的O_NONBLOCK标志。</p> <p>当一个操作(例如接收、发送、连接、接受、.)在阻塞套接字上执行,脚本将暂停其执行,直到收到信号或可以执行操作。</p> <p><b>参数</b></p> <p>socket:使用Socket_create()或Socket_Accept()创建的有效套接字资源。</p> <p><b>返回值</b></p> <p>成功时返回 TRUE, 或者在失败时返回 FALSE。</p> <p>30、<b>socket_set_nonblock():</b>为文件描述符fd设置非阻塞模式。</p> <p><b>说明:</b>bool socket_set_nonblock ( resource \$socket )</p> <p>函数socket_set_nonblock()在套接字参数指定的套接字上设置O_NONBLOCK标志。</p> <p>当一个操作(例如接收、发送、连接、接受、.)在非阻塞套接字上执行,脚本将不会暂停其执行,直到它收到信号或它可以执行操作。相反,如果操作将导致块,则被调用的函数将失败。</p> <p><b>参数</b></p> <p>socket: socket_create() 或者 socket_accept()创建的套接字。</p> <p><b>返回值</b></p> <p>成功时返回 TRUE, 或者在失败时返回 FALSE。 </p> <p>31、<b>socket_set_option():</b>为套接字设置套接字选项。</p> <p><b>说明:</b>bool socket_set_option ( resource \$socket , int \$level , int \$optname , mixed \$optval )</p> <p>函数在指定的协议级别将optname参数指定的选项设置为该套接字的optval参数所指向的值。</p> <p><b>参数</b></p> <p>socket:socket_create() 或者 socket_accept()创建的套接字。</p> <p>level:level参数指定选项所在的协议级别。例如,要在套接字级别检索选项,将使用SOLSOCKET的级别参数。其他level(如TCP)可以通过指定该级别的协议号来使用。协议编号可以通过使用getProbyname()函数找到。</p> <p>optname:可用的套接字选项与SOCKET_GET_OPTION()函数的套接字选项相同。</p> <p>optval:The option value. </p> <p><b>返回值</b></p> <p>成功时返回 TRUE, 或者在失败时返回 FALSE。</p> <p>32、<b>socket_setopt():</b>别名 socket_set_option()</p> <p>33、<b>socket_shutdown():</b>关闭套接字以进行接收、发送或两者兼用。</p> <p><b>说明:</b>bool socket_shutdown ( resource \$socket [, int \$how = 2 ] )</p> <p>函数允许您停止通过套接字发送传入、传出或所有数据(默认值)</p> <p><b>参数</b></p> <p>socket: socket_create()创建的套接字。</p> <p>how:how的值可以是以下内容之一:</p> <p> <table cellspacing="0" cellpadding="0" border="1"> <caption><strong>possible values for <code class="parameter">how</code></strong></caption> <tbody class="tbody"> <tr> <td><em>0</em></td> <td> Shutdown socket reading </td> </tr> <tr> <td><em>1</em></td> <td> Shutdown socket writing </td> </tr> <tr> <td><em>2</em></td> <td> Shutdown socket reading and writing </td> </tr> </tbody> </table> </p> <p><b>返回值</b></p> <p>成功时返回 TRUE, 或者在失败时返回 FALSE。 </p> <p>34、<b>socket_strerror():</b>返回描述套接字错误的字符串。</p> <p><b>说明:</b>string socket_strerror ( int \$errno )</p> <p>获取一个套接字错误代码作为它的errno参数,该代码由Socket_LEVEL_ERROR()返回,并返回相应的解释性文本。</p> <p>虽然套接字扩展生成的错误消息是英文的,但使用此函数检索的系统消息将根据当前区域设置(LC_Messages)显示。</p> <p><b>参数</b></p> <p>errno:一个有效的套接字错误号,很可能是由Socket_LEST_ERROR()生成的。</p> <p><b>返回值</b></p> <p>返回与errno参数关联的错误消息。</p> <p>35、<b>socket_write():</b>写入套接字</p> <p><b>说明:</b>int socket_write ( resource \$socket , string \$buffer [, int \$length = 0 ] )</p> <p>函数Socket_WRIT()从给定的缓冲区写入套接字。</p> <p><b>参数</b></p> <p>socket:socket_create创建的套接字。</p> <p>buffer:要写入的缓冲区。</p> <p>length:可选参数长度可以指定写入套接字的字节的替代长度。如果此长度大于缓冲区长度,则静默地将其截断为缓冲区的长度。</p> <p><b>返回值</b></p> <p>返回成功写入套接字或者在失败时返回false的字节数。可以使用Socket_LEST_ERROR()检索错误代码。可以将此代码传递给Socket_strror()以获得错误的文本解释。</p> <p>套接字_WITE()返回零是完全有效的,这意味着没有写入任何字节。确保在发生错误时使用=操作符检查false。</p> EOF; echo $str;
centos 执行ssh-add报错
在虚拟机centos执行ssh-add ~/.ssh/rsa的时候报错,错误信息
百度了一下:
SSH private-keys are usually stored encrypted on the computers they are stored on. A pass-phrase is used to decrypt them when they are to be used. Since most people use SSH public-private key-pairs to get around typing in passwords all the time, the ssh-agentdaemon exists to store decrypted private-keys you plan on using in a given session. The thing most people get tripped up on when using ssh-agent is that what the program outputs, some borne or csh shell commands, needs to be run. It may look like ssh-agent has set some variables for you, but it has in fact done no such thing. If you call ssh-add without processing ssh-agent’s output, it will complain it is unable to open a connection to your authentication agent. The most straightforward way to run ssh-agent on the command line is as follows: eval `ssh-agent`. After doing this, calls to ssh-add should succeed without error.
先执行先执行
再执行 ssh-add ~/.ssh/rsa成功。
再用ssh-add -l 查看。
标签: ssh-add
rz命令之后出现乱码文件
通过SecureCRT中执行rz命令之后,跳板机上出现乱码文件。
一般都是rz命令失败后产生的文件,通过命令来删除这些乱码文件(命令链接)。
不知道是什么原因造成的,问了一下大牛,大牛说是机器编码不一致造成的,windows文件默认是gbk编码 ,linux文件默认是 utf-8编码,可以使用rz -be 命令来上传文件。
标签: rz乱码
同一目录下不通子目录设置域名访问
购买了虚拟主机,想在虚拟主机里添加多个站点,就需要配置.htaccess文件了,源码如下:
#######同一文件下不通子目录设置域名访问############### RewriteEngine On RewriteBase / DirectoryIndex index.php index.html index.htm # 绑定www.aaa.com 到 aaa子目录 RewriteCond %{HTTP_HOST} ^www.aaa.com$ [NC] RewriteCond %{REQUEST_URI} !^/aaa/ RewriteRule ^(.*)$ aaa/$1?Rewrite [L,QSA] #绑定 www.bbb.com 到 bbb子目录 RewriteCond %{HTTP_HOST} ^www.bbb.com$ [NC] RewriteCond %{REQUEST_URI} !^/bbb/ RewriteRule ^(.*)$ bbb/$1?Rewrite [L,QSA] #绑定 www.ccc.com 到 ccc子目录 RewriteCond %{HTTP_HOST} ^www.ccc.com$ [NC] RewriteCond %{REQUEST_URI} !^/ccc/ RewriteRule ^(.*)$ ccc/$1?Rewrite [L,QSA] #######同一文件下不通子目录设置域名访问###############