月別アーカイブ: 2013年7月

PHP 暗号化、複合化

ここではPHPの暗号化、複合化について解説していきます。
データベースに暗号化のパスワードを保存しておき複合化で暗号化した前の状態に複合化させます。

<?php

    /** 暗号キー **/
    define('KEY', 'kbkb kja  ihkhb gtev555yihj8sj gdigyjeu 8nkfd');
    define('IV', '9Aih3ysn0Ty5po90i7M3xUqXwlhs2g6VGJ8LAEjita5=');

    /**
     * 暗号化
     * @param type $data
     * @return string
     */
    function getEncrypt($data) {
        $resource = mcrypt_module_open('rijndael-256', '', 'ofb', '');
        $iv = substr(base64_decode(str_rot13(IV)), 0, mcrypt_enc_get_iv_size($resource));
        $ks = mcrypt_enc_get_key_size($resource);
        $key = substr(md5(KEY), 0, $ks);
        mcrypt_generic_init($resource, $key, $iv);
        $encrypt = mcrypt_generic($resource, $data);
        mcrypt_generic_deinit($resource);
        mcrypt_module_close($resource);
        return base64_encode($encrypt);
    }

    /**
     * 複合化
     * @param type $data
     * @return string
     */
    function getDecrypt($data) {
        $resource = mcrypt_module_open('rijndael-256', '', 'ofb', '');
        $iv = substr(base64_decode(str_rot13(IV)), 0, mcrypt_enc_get_iv_size($resource));
        $ks = mcrypt_enc_get_key_size($resource);
        $key = substr(md5(KEY), 0, $ks);
        mcrypt_generic_init($resource, $key, $iv);
        $decrypt = mdecrypt_generic($resource, base64_decode($data));
        mcrypt_generic_deinit($resource);
        mcrypt_module_close($resource);
        return $decrypt;
    }

解説
KEYとIVを定数として定義して変更しなければ常に同じ暗号化、複合化ができます。
パスワードを変更する仕様がきたときにどうぞ。

WordPress 画像周りの枠線を消す

ここではWordPressで画像を表示した際出る画像周りの枠を削除する方法を解説しています。

wordpress_logo

全ての画像の枠を消す

概観→テーマの編集→スタイルシート(style.css)
/wp-content/themes/twentytwelve/style.css

.entry-content img,
.comment-content img,
.widget img,
img.header-image,
.author-avatar img,
img.wp-post-image {
    /* Add fancy borders to all WordPress-added images but not things like badges and icons and the like */
    border-radius: 3px;
}

ここの箇所で画像の枠を表示しています。
なのでこの部分をコメントアウトします。

/*
.entry-content img,
.comment-content img,
.widget img,
img.header-image,
.author-avatar img,
img.wp-post-image {
    /* Add fancy borders to all WordPress-added images but not things like badges and icons and the like */
    border-radius: 3px;
}
*/

こうすると画像の枠が消えます。

特定の画像の枠を消す

概観→テーマの編集→スタイルシート(style.css)
/wp-content/themes/twentytwelve/style.css

このファイルにこちらを追記します。

img.nostyle {
    border-radius: 0;
    box-shadow: none;
}

画像を表示するとき

<img src="imgpath" alt="alt" class="nostyle" />

とclassで指定します。
これでclass指定したimgタグのみ画像の枠線を消すことが出来ます。
もちろんclassでなくてもidなどのエレメントで大丈夫です。

画像カウンター作って見た

ここでは画像を使ったカウンターの解説をしていきます。

counter

画像のファイル名を0.1.2.3・・・として拡張子を合わせればどの画像でも大丈夫です。

phpソースコード

<?php

    // 重複 true / false ・ 重複させる / 重複させない
    $duplicationFlg = false;
    // テキストファイルパス
    $counterTxt = 'counter.txt';
    // カウンター桁数
    $counterLngth = 6;
    // ipアドレス配列
    $arrIp = array();
    // ipアドレスを数値に変換
    $remoteAdddr = ip2long($_SERVER["REMOTE_ADDR"]);

    // 読み込み
    $fp = fopen($counterTxt, 'r+');
    if ($fp) {
        if (flock($fp, LOCK_EX)) {
            $line = explode(',', fgets($fp));
        }
        else {
            echo "Eroor";
        }
    }
    ftruncate($fp, 0);
    fseek($fp, 0);
    $date = $line[0];
    $cnt = $line[1];

    if ($date == date('Y-m-d')) {
        for ($i = 2; $i < count($line); $i++) {
            $arrIp[] = $line[$i];
        }
    }

    if (empty($arrIp[0])) {
        $arrIp[] = $remoteAdddr;
        $cnt++;
    }
    else {
        foreach ($arrIp as $val) {
            if ($remoteAdddr == $val) {
                $flg = false;
                break;
            }
            else {
                $flg = true;
            }
        }
        if ($flg) {
            $arrIp[] = $remoteAdddr;
            $cnt++;
        }
    }

    // 書き込み
    if ($fp) {
        $ip = implode(',', $arrIp);
        if ($duplicationFlg) {
            fwrite($fp, date('Y-m-d').','.$cnt);
        }
        else {
            fwrite($fp, date('Y-m-d').','.$cnt.','.$ip);
        }
        flock($fp, LOCK_UN);
        fclose($fp);
    }

    $n = sprintf("%0".$counterLngth."d", $cnt);
    if (strlen($n) <= $counterLngth) {
        for ($i = 0; $i < strlen($n); $i++) {
            echo "<img src='img/".substr($n, $i, 1).".gif' />";
        }
    }
    else {
        for ($i = 0; $i < $counterLngth; $i++) {
            echo "<img src='img/9.gif' />";
        }
    }

counter.txt

日付、カウント、ipアドレスを記録しておくファイルcounter.txtを作成します。
(パーミッション読み書き可能にしてください)

counter.txtには最初
2013-07-10,0
と記述して下さい。

コンマの左、日付は自動で拾って上書きされるので2013-01-01の形式で大丈夫です。
コンマの右、カウントです。この数値からカウントが始まります。

解説

$duplicationFlg = false;(4行目)
trueなら重複してカウントします。
falseなら日付で区切りipアドレスを元に重複をはじきます。

$counterTxt = ‘counter.txt’;(6行目)
counter.txtを作成した場所を記述して下さい。
counter.txtは読み書き可能なパーミッションに変更してください。(666)など

$counterLngth = 6;(8行目)
カウンターの桁数を設定してください。
カウンターを表示する際0詰めで表示されます。

ftruncate($fp, 0);(24行目)
ファイルの上書きをするので、上書き前のデータを削除します。
ファイルサイズを0バイトにしています。

fseek($fp, 0);(25行目)
ファイルの書き込み位置を最初にしています。

echo “<img src=’img/”.substr($n, $i, 1) . “.gif’>”;(71行目と76行目)
カウンター画像を設置した場所、画像の拡張子を指定してください。

WordPress フッターのProudly powered by WordPress変更

ここではWordPressのデフォルトで表示されているフッターの文字を変更する方法について解説して行きます。

wordpress_logo

まず最初にデフォルトのProudly powered by WordPressを削除します。

概観→テーマ編集→フッター(footer.php)
/wp-content/themes/twentytwelve/footer.php

<footer id="colophon" role="contentinfo">
    <div class="site-info">
    <?php do_action( 'twentytwelve_credits' ); ?>
    <a href="<?php echo esc_url( __( 'http://wordpress.org/', 'twentytwelve' ) ); ?>" title="<?php esc_attr_e('Semantic Personal Publishing Platform', 'twentytwelve' ); ?>"><?php printf( __( 'Proudly powered by %s','twentytwelve' ), 'WordPress' ); ?></a>
    </div><!-- .site-info -->
</footer><!-- #colophon -->

ここのソースコードを編集します。

<a href="<?php echo esc_url( __( 'http://wordpress.org/', 'twentytwelve' ) ); ?>" title="<?php esc_attr_e( 'Semantic Personal Publishing Platform', 'twentytwelve' ); ?>"><?php printf( __( 'Proudly powered by %s', 'twentytwelve' ), 'WordPress' ); ?></a>

aタグの箇所を削除して変わりに

<?php printf( __( 'Copyright &copy; %s All Rights Reserved. ', 'twentytwelve' ), '会社名など' ); ?>

を追記します。

<footer id="colophon" role="contentinfo">
    <div class="site-info">
        <?php do_action( 'twentytwelve_credits' ); ?>
        <?php printf( __( 'Copyright &copy; %s All Rights Reserved. ', 'twentytwelve' ), '会社名など' ); ?>
    </div><!-- .site-info -->
</footer><!-- #colophon -->

これでフッターの文字を変更できます。

WordPress ページング WP-PageNavi

ここではWordPressのページングプラグインWP-PageNaviの解説をして行きます。

pagenavi

ダウンロードはこちら
http://wordpress.org/plugins/wp-pagenavi/

プラグイン新規追加で「WP-PageNavi」検索でインストールできます。

設置方法

プラグインWP-PageNaviはWoodPress管理画面からは実装できませんのでソースコードを触る必要があります。
Twenty Twelveを例にして解説します。

まず最初にデフォルトのページングを削除します。

概観→テーマ編集→メインインデックスのテンプレート(index.php)を選択します。
/wp-content/themes/twentytwelve/index.php

<?php if ( have_posts() ) : ?>
    <?php /* Start the Loop */ ?>

    <?php while ( have_posts() ) : the_post(); ?>
        <?php get_template_part( 'content', get_post_format() ); ?>
    <?php endwhile; ?>

    <?php twentytwelve_content_nav( 'nav-below' ); ?>
<?php else : ?>

ここのソースコードを修正します。

<?php twentytwelve_content_nav( 'nav-below' ); ?>

この行を削除して変わりに

<?php if(function_exists('wp_pagenavi')) {
    wp_pagenavi();
}  ?>

を追記します。

<?php if ( have_posts() ) : ?>
    <?php /* Start the Loop */ ?>

    <?php while ( have_posts() ) : the_post(); ?>
        <?php get_template_part( 'content', get_post_format() ); ?>
    <?php endwhile; ?>

    <?php if(function_exists('wp_pagenavi')) {
        wp_pagenavi();
    }  ?>
<?php else : ?>

これでページングが変更されます。

if文はなくても動きますが、プラグインを削除した場合エラーが発生するのでif文で囲っています。
後はWP-PageNaviの設定でいろいろ触れるので色々触って見てください。