/** * 2ch IDにログインする * * @access public * @return string|false 成功したら2ch SIDを返す */ function login2ch() { global $_conf; // 2ch●ID, PW設定を読み込む if ($array = P2Util::readIdPw2ch()) { list($login2chID, $login2chPW, $autoLogin2ch) = $array; } else { P2Util::pushInfoHtml('<p>p2 error: 2chログインのためのIDとパスワードを登録して下さい。[<a href="login2ch.php" target="subject">2chログイン管理</a>]</p>'); return false; } $auth2ch_url = 'https://2chv.tora3.net/futen.cgi'; $postf = "ID=" . $login2chID . "&PW=" . $login2chPW; // ここでurlencodeすると通らなくなるので注意 $x_2ch_ua = 'X-2ch-UA: ' . $_conf['p2uaname'] . '/' . $_conf['p2version']; $dolib2ch = 'DOLIB/1.00'; $tempfile = $_conf['pref_dir'] . "/p2temp.php"; // 念のためあらかじめtempファイルを除去しておく if (file_exists($tempfile)) { unlink($tempfile); } $curl_msg = ''; // まずはfsockopenでSSL接続する // ただしPHPコンパイル時にOpenSSLサポートが有効になっていないと利用できず、 // DSO版(openssl.{so,dll}等)ではエラーが出る。 // @see http://jp.php.net/manual/ja/function.fsockopen.php if ($_conf['precede_openssl']) { if (!extension_loaded('openssl')) { $curl_msg .= "「PHPのopenssl」は使えないようです"; } elseif (!($r = _getAuth2chWithOpenSSL($login2chID, $login2chPW, $auth2ch_url, $x_2ch_ua, $dolib2ch))) { $curl_msg .= "「PHPのopenssl」で実行失敗。"; } } if (empty($r)) { // コマンドCURL優先 if (empty($_conf['precede_phpcurl'])) { if (!($r = _getAuth2chWithCommandCurl($login2chID, $login2chPW, $tempfile, $auth2ch_url, $x_2ch_ua, $dolib2ch))) { $curl_msg .= "「systemのcurlコマンド」で実行失敗。"; if (!extension_loaded('curl')) { $curl_msg .= "「PHPのcurl」は使えないようです"; } elseif (!($r = _getAuth2chWithPhpCurl($tempfile, $auth2ch_url, $x_2ch_ua, $dolib2ch, $postf))) { $curl_msg .= "「PHPのcurl」で実行失敗。"; } } // PHP CURL優先 } else { if (!extension_loaded('curl')) { $curl_msg .= "「PHPのcurl」は使えないようです"; } elseif (!($r = _getAuth2chWithPhpCurl($tempfile, $auth2ch_url, $x_2ch_ua, $dolib2ch, $postf))) { $curl_msg .= "「PHPのcurl」で実行失敗。"; } if (empty($r)) { if (!($r = _getAuth2chWithCommandCurl($login2chID, $login2chPW, $tempfile, $auth2ch_url, $x_2ch_ua, $dolib2ch))) { $curl_msg .= "「systemのcurlコマンド」で実行失敗。"; } } } } // 接続失敗ならば if (empty($r)) { if (file_exists($_conf['idpw2ch_php'])) { unlink($_conf['idpw2ch_php']); } if (file_exists($_conf['sid2ch_php'])) { unlink($_conf['sid2ch_php']); } P2Util::pushInfoHtml('<p>p2 info: 2ちゃんねるへの●IDログインを行うには、systemでcurlコマンドが使用可能\であるか、PHPの<a href="http://www.php.net/manual/ja/ref.curl.php">CURL関数</a>が有効である必要があります。</p>'); P2Util::pushInfoHtml(sprintf('<p>p2 error: 2chログイン処理に失敗しました。%s</p>', hs($curl_msg))); return false; } // tempファイルはすぐに捨てる if (file_exists($tempfile)) { unlink($tempfile); } $r = rtrim($r); // 分解 if (preg_match('/SESSION-ID=(.+?):(.+)/', $r, $matches)) { $uaMona = $matches[1]; $SID2ch = $matches[1] . ':' . $matches[2]; } else { //error_log($r); if (file_exists($_conf['sid2ch_php'])) { unlink($_conf['sid2ch_php']); } P2Util::pushInfoHtml("<p>p2 error: 2ch●ログイン接続に失敗しました。</p>"); return false; } // 認証照合失敗なら if ($uaMona == 'ERROR') { file_exists($_conf['idpw2ch_php']) and unlink($_conf['idpw2ch_php']); file_exists($_conf['sid2ch_php']) and unlink($_conf['sid2ch_php']); P2Util::pushInfoHtml("<p>p2 error: 2ch●ログインのSESSION-IDの取得に失敗しました。IDとパスワードを確認の上、ログインし直して下さい。</p>"); return false; } //echo $r;// // SIDの記録保持 $cont = <<<EOP <?php \$uaMona = '{$uaMona}'; \$SID2ch = '{$SID2ch}'; ?> EOP; FileCtl::make_datafile($_conf['sid2ch_php'], $_conf['pass_perm']); if (false === file_put_contents($_conf['sid2ch_php'], $cont, LOCK_EX)) { P2Util::pushInfoHtml("<p>p2 Error: {$_conf['sid2ch_php']} を保存できませんでした。ログイン登録失敗。</p>"); return false; } return $SID2ch; }
// チェック済みのディレクトリを格納する配列に // まだチェックしていなければ if (!in_array($_conf['idx_dir'], $checked_dirs)) { P2Util::checkDirWritable($_conf['idx_dir']); $checked_dirs[] = $_conf['idx_dir']; } if (!in_array($_conf['pref_dir'], $checked_dirs)) { P2Util::checkDirWritable($_conf['pref_dir']); $checked_dirs[] = $_conf['pref_dir']; } // }}} //========================================================= // 前処理 //========================================================= // ●ID 2ch オートログイン if ($array = P2Util::readIdPw2ch()) { list($login2chID, $login2chPW, $autoLogin2ch) = $array; if ($autoLogin2ch) { require_once P2_LIB_DIR . '/login2ch.inc.php'; login2ch(); } } //========================================================= // プリント設定 //========================================================= // 最新版チェック $newversion_found = ''; if (!empty($_conf['updatan_haahaa'])) { $newversion_found = checkUpdatan(); } // ログインユーザ情報
$autoLogin2ch = false; //=============================================================== // ログインなら、IDとPWを登録保存して、ログインする //=============================================================== if (isset($_POST['login2chID']) && isset($_POST['login2chPW'])) { if (isset($_POST['autoLogin2ch'])) { $autoLogin2ch = $_POST['autoLogin2ch'] === '1' ? true : false; } else { $autoLogin2ch = false; } P2Util::saveIdPw2ch($_POST['login2chID'], $_POST['login2chPW'], $autoLogin2ch); require_once P2_LIB_DIR . '/login2ch.inc.php'; login2ch(); } // (フォーム入力用に)ID, PW設定を読み込む list($login2chID, $login2chPW, $autoLogin2ch) = P2Util::readIdPw2ch(); //============================================================== // 2chログイン処理 //============================================================== if (isset($_GET['login2ch'])) { if ($_GET['login2ch'] == "in") { require_once P2_LIB_DIR . '/login2ch.inc.php'; login2ch(); } elseif ($_GET['login2ch'] == "out") { if (file_exists($_conf['sid2ch_php'])) { unlink($_conf['sid2ch_php']); } } } //================================================================ // ヘッダ