5639
php的pack函数应用
乐果 发表于 2015 年 01 月 22 日 标签:PHP
如题,最近在用PHP写socket的客户端,用到了pack函数。因此记录下:
/**
* 测试链路是否能正常通信
* @author liuxiang <unphp@qq.com>
* @date 2015-01-22
* @return boolean
*/
public function ping()
{
$pool = $this->_pool;
$sendData = pack('A60', 'ping');
$sendCount = $this->fiexLenInfo($sendData);
$command = pack('a10', $sendCount) . $sendData;
socket_write($pool, $command, strlen($command));
$len_buff = @socket_read($pool, 10, PHP_NORMAL_READ);
$len = (int) trim($len_buff);
if ($len >= 5 && '200' === trim(@socket_read($pool, 5, PHP_NORMAL_READ)))
{
return true;
}
return false;
}
/**
* 请求socket服务接口
* @author liuxiang <unphp@qq.com>
* @date 2014-12-26
* @param type $address 调用的接口名(内部路由地址)
* @param type $data 发送的数据
* @return type
*/
public function send($address, $data = '')
{
$pool = $this->connect();
$sendData = pack('A60', $address) . $data;
$sendCount = $this->fiexLenInfo($sendData);
$command = pack('a10', $sendCount) . $sendData;
socket_write($pool, $command, strlen($command));
$len_buff = @socket_read($pool, 10, PHP_NORMAL_READ);
$len = (int) trim($len_buff);
if ($len >= 5)
{
$code = @socket_read($pool, 5, PHP_NORMAL_READ);
$rp = 5 === $len ? '' : @socket_read($pool, $len - 5, PHP_NORMAL_READ);
$rs = new coreServerResult($code, $rp);
return $rs;
}
else
{
App::error('服务返回数据异常!', 50003);
}
return null;
}
乐果 发表于 2015 年 01 月 22 日 标签:PHP
猜猜我是谁
01 月 23 日 15 时 00 分
Ralph
09 月 25 日 16 时 59 分
$sendData = pack('A60', $address) . $data;
这里的参数'A60'是什么意思?
乐果 (admin)
09 月 29 日 16 时 12 分
60:代表长度为60个字节长度。
因此,pack('A60', $var) 的意思是将变量$var的值转变成一个固定长度为60个字节长度的二进制字符串,$var的值字节长度不够60以SPACE 字符 (空格) 填满。
$sendData = pack('A60', $address) . $data;
这里的参数'A60'是什么意思?