PR-400NEルーターにはlogの転送機能が付いていないので、いちいちルーターのlog画面を参照する必要があります。
その上、保存数の上限が少ない為、すぐに消えていってしまいます。
そこで外部からログを取得して保存する為のphp scriptを書こうと思い立ちました。
最初は、
file_get_contents($url, false, stream_context_create($options));を使って、Authorizationをクリアするところまで行きましたが、どうしてもPOST Methodで止まってしまいました。GETの場合はAuthorizationを通るのですけれど、全く同じ状況でPOSTを発行すると401エラーになってしまいます。多分、僕のコードに問題があるのでしょうが、どこをどう弄ってもPOSTは通りません。
一日悩んで、方法を変えました。(安易)
今度はPEARを使うことにします。こちらはHTTPクライアント用の関数が実装されているので、あまり悩まなくて済みそうです。
実際、数行のコーディングでPR-400NEに接続、ログの取得ができるようになりました。
$req =& new HTTP_Request("");
$req->setURL($url);
$req->setBasicAuth("user", "password");
$req->sendRequest();
$response = $req->getResponseCode();
echo $req->getResponseBody();
たかがこのくらいでページの表示は終わってしまいます。
実際はこの後、受け取った内容からログを切り分け保存。それと同時にsession_idを拾いformに埋め込んでPOST、次のログを取得します。
$req->setMethod(HTTP_REQUEST_METHOD_POST);
$req->addPostData('LOG_SAVE_SET', '選択'); // 漢字はEUCです。ここでもハマりました。
$req->addPostData('SESSION_ID', $session_id);
$req->addPostData('LOG_SAVE_SELECT', $i);
stream_context_createで実装しようとした時は、GET時のAuthorization後、ここのPOSTで401のエラーを起こしてページの切り替えができず悩んでいました。が、PEARを使うとHTTP_REQUEST_METHOD_POSTを切り替えるだけで、簡単に通ってしまいました。
とっても便利です。>PEAR
次は、ログを保存しなければなりません。
既にMySQLは入っていますから、そこにログ保存用のデータベースとテーブルを作ります。
内容は簡単なもので、日付、時間、ログの内容位なもの。
一時間に一回くらいでphp scriptを回して、追加された差分だけをデータベースに放り込む予定です。
データ自体は区分で分けて同一テーブル上に置き、後で選択して表示するのが簡単でしょう。(多分、PR-400NEも内部では同じことをしていると思う)
で、これからmysqliの関数を一から探し出していかないと………(^_^;;
まだまだ先は長そうです。

