云同步Xshell的session配置

经常要在不同机器间同步Xshell的session,很是痛苦,于是想能不能搞成云同步。
  1. 我使用的Dropbox做云同步,在Dropbox目录下新建sessions文件夹。

  2. 打开Xshell,点击工具->选项。

    点击图中红框的按钮,将目录改为你在Dropbox文件夹下新建的sessions目录,然后点击确定。
    提示:已有的session记录会自动迁往新文件夹下

现在开始享受云同步的乐趣吧。 :)

微社区开放平台传图接口遇到的问题

最近在基于微社区开放平台接口开发一个应用,遇到传图接口的问题。

代码如下:

$pic = SAE_TMP_PATH . time() . uniqid() . '.png';
file_put_contents($pic, $picData);

$data = array(
    'appToken' => $appToken,
    'sId' => $sId,
    'accessToken' => $accessToken,
    'pic' => '@' . $pic,
);

$url = '/v1/thread/upload';

return $this->request($url, self::METHOD_POST, $data); // 发起curl请求

请求结果一直返回“图片类型不允许”的报错。

排查一番后发现是由于未指定文件的MIME类型导致,将代码改为下面的调试通过。

$pic = SAE_TMP_PATH . time() . uniqid() . '.png';
file_put_contents($pic, $picData);

$data = array(
    'appToken' => $appToken,
    'sId' => $sId,
    'accessToken' => $accessToken,
    'pic' => '@' . $pic . ';type=image/jpeg',
);

$url = '/v1/thread/upload';

return $this->request($url, self::METHOD_POST, $data);

awk如何判断某个字段为空

最近发现业务上报的日志里某个字段为空,需要找出有问题的数据,搜索一番好不容易找到判断为空的命令。

命令如下:

cat test.log | awk -F'\t' '$1 ~/^$/{print $1}'

PHP并发写文件数据串行的问题

写日志代码:

$dir = rtrim($dir, '/') . '/' . ltrim($logFile, '/');

// 自动创建不存在的目录
$directory = dirname($dir);
if (!is_dir($directory)) {
    $oldUmask = umask(0);
    mkdir($directory, 0777, true);
    umask($oldUmask);
}   

$fd = fopen($dir, "a+");
if (!$fd) {
    error_log("Logger: Cannot open file ($dir)");
    return false;
}   

$logData = implode("\t", $data);

fwrite($fd, $logData. "\n");
fclose($fd);

同事反馈上报的日志格式错误,看了下日志,发现居然有串行的现象。

数据串行

搜索一番才知道,当写的数据过大时,可能会产生串行的问题。

If handle was fopen()ed in append mode, fwrite()s are atomic (unless the size of string exceeds the filesystem's block size, on some platforms, and as long as the file is on a local filesystem). That is, there is no need to flock() a resource before calling fwrite(); all of the data will be written without interruption.

参考资料:
封装php的Log类