Ejemplo n.º 1
0
/**
 * 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;
}
Ejemplo n.º 2
0
// チェック済みのディレクトリを格納する配列に
// まだチェックしていなければ
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();
}
// ログインユーザ情報
Ejemplo n.º 3
0
$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']);
        }
    }
}
//================================================================
// ヘッダ