Tumblrの画像存在チェック
Tumblrの画像存在チェック がいつの間にか、すべて存在しないとなっていた。PHPによるファイル存在チェック は file_get_contents 関数に任せていたのですが、 CURL が良いとの記事を見つけたので変更することにした。そもそも、なぜ、急にできなくなったかは、コマンドラインで CURL を叩いて何となく理解した。

https://78.media.tumblr.com/137536149c3376af5665914ec889bf4f/tumblr_pa3bplTY1l1rfkswfo1_250.jpg
# curl -v https://78.media.tumblr.com/137536149c3376af5665914ec889bf4f/tumblr_pa3bplTY1l1rfkswfo1_250.jpg
* About to connect() to 78.media.tumblr.com port 443 (#0)
*   Trying 119.161.4.42...
* Connected to 78.media.tumblr.com (119.161.4.42) port 443 (#0)
* successfully set certificate verify locations:
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none
* SSLv3, TLS handshake, Client hello (1):
* SSLv3, TLS handshake, Server hello (2):
* SSLv3, TLS handshake, CERT (11):
* SSLv3, TLS handshake, Server finished (14):
* SSLv3, TLS handshake, Client key exchange (16):
* SSLv3, TLS change cipher, Client hello (1):
* SSLv3, TLS handshake, Finished (20):
* SSLv3, TLS change cipher, Client hello (1):
* SSLv3, TLS handshake, Finished (20):
* SSL connection using AES128-SHA
* Server certificate:
*        subject: C=US; ST=California; L=Sunnyvale; O=Yahoo Holdings, Inc.; CN=*.yahoo.com
*        start date: 2018-06-12 00:00:00 GMT
*        expire date: 2018-07-23 12:00:00 GMT
*        subjectAltName does not match 78.media.tumblr.com
* Closing connection 0
* SSLv3, TLS alert, Client hello (1):
curl: (51) SSL peer certificate or SSH remote key was not OK
最終的には、サーバー証明書の検証を行わないように CURL にオプションを追加て対応。
function getHTTPstatus($url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, true);
    curl_setopt($ch, CURLOPT_NOBODY, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER , 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST , 0);
    $data = curl_exec($ch);
    curl_close($ch);
    $n = preg_match("/^(HTTP\/[0-9\.]+) ([0-9]+) (.+)/i", $data, $arr);
    if (! isset($arr[2]))    $arr[2] = FALSE;
    if (! isset($arr[3]))    $arr[3] = '';
    $res = array($arr[2], $arr[3]);
    return $res;
}
返り値を配列じゃなくてTRUE か FALSE に変更して終了かな。

 
																			 
																			 
																			
 
																											 
																											 
																											 
																											 
																											 
																											