令人哇塞的酷鸡 发布的文章

最近使用composer发现报如下错误:
`
[ComposerDownloaderTransportException]
The "https://packagist.org/packages.json" file could not be downloaded: SSL operation failed with code 1. OpenSSL Error messages:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
Failed to enable crypto
failed to open stream: operation failed
`

1: 下载certificate:
cd ~ && wget http://curl.haxx.se/ca/cacert.pem --no-check-certificate
2: Export it:
export COMPOSER_CAFILE='~/cacert.pem'
这个路径必需是第一步下载文件的位置
3: Run composer:
composer install

from: https://github.com/composer/composer/issues/3346#issuecomment-285460207

memcahche不像redis那样有ttl命令可以直接查看key的过期时间.不过通过操作开始实现.

1 stats items
该命令输出的结果会类似如下:
STAT items:1:number 66
其中1,就是slab_id, 66表示在slab为1下有key 66个.

2 stats cachedump slab_id count (count表示一次显示几个,0表示全部显示)
该命令会输出结果每行会类似如下:
ITEM abc [100 b; 1528336485 s]
其中键名abc, 占用100byte, 过期时间1528336485(unix时间戳形式)

有时我们想这样访问数组$a的元素$varStr = "$a['a']['a_a']";.今天就做罗列下实现的两大类方法:
1.使用eval()

$varStr = "\$vars['a']['a_a']";
$value = eval("return $varStr;");

2.一层层遍历取值

$vars = function($str) use ($vars)
{
    if (!preg_match_all('#\[[\"\'](.+?)[\"\']\]#', $str, $keys)) {
        return null;
    }
    $var = $vars;
    foreach($keys[1] as $key){
        $var = $var[$key];
    }
    return $var;
};
$vars("['a']['aa']");//用法

#为了简洁,我们可以给他封装成一个函数
function initVar(&$vars)
{
    $vars = function($str) use ($vars)
    {
        if (!preg_match_all('#\[[\"\'](.+?)[\"\']\]#', $str, $keys)) {
            return null;
        }
        $var = $vars;
        foreach($keys[1] as $key) {
            $var = $var[$key];
        }
        return $var;
    };
}
//然后这样使用
initVar($vars);
$vars('["a"]["aa"]');

//或者封装成这样
function getValue($vars, $str)
{
    if (!preg_match_all('#\[[\"\'](.+?)[\"\']\]#', $str, $keys)) {
        return null;
    }
    $var = $vars;
    foreach ($keys[1] as $key) {
        $var = $var[$key];
    }
    return $var;
}
//然后这样使用
get($vars, '["a"]["aa"]');

参考:https://stackoverflow.com/questions/7003559/use-strings-to-access-potentially-large-multidimensional-arrays

php中处理xml格式的数据,一般都会用DOMDocument类.不过使用中发现往格式化的xml文件新增元素时新增元素没有被格式化(即有缩进换行). 解决办法也很简单,即是导入xml时,不要保留空白符.例子如下:

<?php
$doc = new \DOMDocument();
$doc->formatOutput = true;
$doc->preserveWhiteSpace = false;//这是关键
$doc->loadXML($xmlStr);
$doc->appendChild($doc->createElement('php', '666'))
$formattedXMLStr = $doc->saveXML();//格式化好的XML
echo $formattedXMlStr;
?>