2015年9月20日 星期日

重寫Laravel Socialite

最近需要用到OAuth的Client套件 所以就使用目前最多人使用的Laravel 不過需要的部份只有Laravel Socialite

看了一下composer.json的相依性

    "require": {
        "php": ">=5.4.0",
        "illuminate/contracts": "~5.0",
        "illuminate/http": "~5.0",
        "illuminate/support": "~5.0",
        "guzzlehttp/guzzle": "~5.0|~6.0",
        "league/oauth1-client": "~1.0"
    },

只需要這些package並不需要整個Laravel 所以就開始使用它 不過在使用的過程遇到了不少問題 它所需要的package其實不止這些 所以程式在撰寫的過程中確實遇到不少問題 再在上在本機端上開發會遇到cURL error 60: SSL certificate problem 於是決定以PHPoAuthLib進行開發 所以就寫了Recca0120 Socialite 並使它可以獨立使用

Demo

目前只先實作Laravel Socialite原本的功能,之後會視情形再加功能

OAuth1 BitBucket Twitter OAuth2 Facebook GitHub Google Instagram LinkedIn

2015年9月19日 星期六

cURL error 60: SSL certificate problem: unable to get local issuer certificate

Alt text

在使用Guzzle時,遇到cURL error 60: SSL certificate problem: unable to get local issuer certificate 只要下載ca-bundle.crt並放到相對應的路徑

[
    // Red Hat, CentOS, Fedora (provided by the ca-certificates package)
    '/etc/pki/tls/certs/ca-bundle.crt',
    // Ubuntu, Debian (provided by the ca-certificates package)
    '/etc/ssl/certs/ca-certificates.crt',
    // FreeBSD (provided by the ca_root_nss package)
    '/usr/local/share/certs/ca-root-nss.crt',
    // OS X provided by homebrew (using the default path)
    '/usr/local/etc/openssl/cert.pem',
    // Google app engine
    '/etc/ca-certificates.crt',
    // Windows?
    'C:\\windows\\system32\\curl-ca-bundle.crt',
    'C:\\windows\\curl-ca-bundle.crt',
];

如果再無法正常運作的話就得去修改php.ini 再加入

[curl]
curl.cainfo=C:\Windows\curl-ca-bundle.crt

[openssl]
openssl.cafile=C:\Windows\curl-ca-bundle.crt

就可以正常運作了

2015年9月14日 星期一

發撲克牌

在奇摩知識+看到有人發問發撲克牌,依花色及數字大小做排序,所以我就寫了這個程式囉

function Poker($member = 4, $POSTCARDS = 52)
{
    /*撲克花色*/
    $Poker = [
        'Spades',
        'Hearts',
        'Diamonds',
        'Clubs',
    ];
    /*人頭牌*/
    $CARD = [
        11 => 'J',
        12 => 'Q',
        13 => 'K',
    ];

    /*發牌順序*/
    $P = range(0, $POSTCARDS - 1);
    shuffle($P);

    /*存放結果陣列*/
    $result = [];

    $total = count($P);
    for ($i = 0; $i < $total; $i++) {
        /*發給玩家*/
        $t = $i % $member + 1;
        /*發牌編號 0-51*/
        $v = $P[$i];
        /*發牌花色 Spades,Hearts,Diamonds,Clubs*/
        $c = $Poker[$v % count($Poker)];
        /*花色大小 1-13*/
        $k = ($v % 13) + 1;
        $result[$t][$c][$k] = (in_array($k, array_keys($CARD))) ? $CARD[$k] : $k;
        /*依牌大小排序*/
        krsort($result[$t][$c]);
        /*依花色排序*/
        krsort($result[$t]);
    }

    return $result;
}
/*印出結果*/
print_r(Poker(1, 13));
/*如果要發4個人52張牌*/
print_r(Poker(4, 52));

php 下載限速

function getlocalfile($filename, $readmod = 1, $range = 0)
{
    if ($fp = @fopen($filename, 'rb')) {
        @fseek($fp, $range);
        $download_rate = 10;//限制网速10kb/s
        while (! feof($fp)) {
            print fread($fp, round($download_rate * 1024));
            flush();
            ob_flush();
            sleep(1);
        }
    }
    @fclose($fp);
    @flush();
    @ob_flush();
}