PHP stream filter


PHP ストリームを試す (1) -

ストリームを利用してZIPファイルをダウンロード

郵便番号データは日本郵便株式会社の郵便番号データダウンロードサイトよりダウンロードすることが出来ます。 (※2016年10月現在)
この郵便番号データは毎月更新されていますので、定期的にダウンロードして取り込むことが望まれます。しかし、毎回手作業で取り込み作業を行うのは手間がかかってしまいますので、自動化することを検討してみたいと思います。
まずはダウンロードします。

<?php
$zip_file = 'ken_all_rome.zip';
$zip_url = 'http://www.post.japanpost.jp/zipcode/dl/roman/'.$zip_file;
$tmp_dir = sys_get_temp_dir();
$tmp_file = tempnam($tmp_dir, 'postal');

$zip = null;
$tmp = null;
try {
	if (!($zip = fopen($zip_url, 'rb'))) throw new Exception('File can not be opened. :'.$zip_url);
	if (!($tmp = fopen($tmp_file, 'wb'))) throw new Exception('File can not be opened. :'.$tmp_file);
	while (!feof($zip)) {
		fwrite($tmp, fread($zip, 8192));
	}
	fclose($zip);
	fclose($tmp);
} catch (Exception $e) {
	fputs(STDERR, $e->getMessage()."\n");
	if (!is_null($zip)) fclose($zip);
	if (!is_null($tmp)) fclose($tmp);
}

追記

ソースのタイプミスを修正しました。