「 WEB制作」のページ記事
角丸テキストボックス
07 タイトル付きの角丸テキストボックス
[php]
<h5 class="ttl07">サンプルH5 class="ttl07"</h5>
<div class="box"><p>テキストボックスの角丸やシャドウを画像を付けずに再現します。<br/>
角丸を付ける位置を下部分だけにし、他のサンプルで紹介した「角丸タイトル見出し」と組み合わせることで、セットのテキストエリアを作ることができます。</p></div>
<h5 class="ttl07 black">サンプルH5 class="ttl07 black"</h5>
<div class="box black"><p>テキストボックスの角丸やシャドウを画像を付けずに再現します。<br/>
角丸を付ける位置を下部分だけにし、他のサンプルで紹介した「角丸タイトル見出し」と組み合わせることで、セットのテキストエリアを作ることができます。</p></div>
[/php]
〔表示例〕
サンプルH5 class=”ttl07″
テキストボックスの角丸やシャドウを画像を付けずに再現します。
角丸を付ける位置を下部分だけにし、他のサンプルで紹介した「角丸タイトル見出し」と組み合わせることで、セットのテキストエリアを作ることができます。
サンプルH5 class=”ttl07 black”
テキストボックスの角丸やシャドウを画像を付けずに再現します。
角丸を付ける位置を下部分だけにし、他のサンプルで紹介した「角丸タイトル見出し」と組み合わせることで、セットのテキストエリアを作ることができます。
08 仕切り線が入った角丸テキストボックス
[php]
<div class="box2">
<p>テキストボックスの角丸やシャドウを画像を付けずに再現します。</p>
<hr>
<p>ラインの「hr」タグの装飾をしてセットで使うことによって、一つのテキストボックス内の情報を整理してまとめることができます。</p>
</div>
08 仕切り線が入った角丸テキストボックス(ブラック)
<div class="box2 black">
<p>テキストボックスの角丸やシャドウを画像を付けずに再現します。</p>
<hr>
<p>ラインの「hr」タグの装飾をしてセットで使うことによって、一つのテキストボックス内の情報を整理してまとめることができます。</p>
</div>
[/php]
〔表示例〕
テキストボックスの角丸やシャドウを画像を付けずに再現します。
ラインの「hr」タグの装飾をしてセットで使うことによって、一つのテキストボックス内の情報を整理してまとめることができます。
08 仕切り線が入った角丸テキストボックス(ブラック)
テキストボックスの角丸やシャドウを画像を付けずに再現します。
ラインの「hr」タグの装飾をしてセットで使うことによって、一つのテキストボックス内の情報を整理してまとめることができます。
09 グラデーション状の仕切り線
[php]
<hr class="line1">
<hr class="line2">
[/php]
〔表示例〕
テキストボックスの角丸やシャドウを画像を付けずに再現します。
ラインの「hr」タグの装飾をしてセットで使うことによって、一つのテキストボックス内の情報を整理してまとめることができます。
10 メモ帳のようなテキストボックス
[php]
<div class="note">
<div class="ttl10">
<h5>メモ帳のようなテキストボックス</h5>
</div>
<p>画像を使わずにCSSのみで装飾したメモ帳のようなタイトルエリアのあるテキスト背景です。</p>
<p>テキストエリアにノートのようなアンダーラインをつけて、紙が重なっているような装飾をつけています。</p>
<br>
</div>
[/php]
〔表示例〕
メモ帳のようなテキストボックス
画像を使わずにCSSのみで装飾したメモ帳のようなタイトルエリアのあるテキスト背景です。
テキストエリアにノートのようなアンダーラインをつけて、紙が重なっているような装飾をつけています。
03 立体的なWebフォント付き見出し
[php]
<h1 class="ttl03-1"><i class="fa fa-id-card" aria-hidden="true"></i> h1 class="ttl03-1"</h1>
<h1 class="ttl03-2"><i class="fa fa-id-card" aria-hidden="true"></i> h1 class="ttl03-2"</h1>
<h1 class="ttl03-3"><i class="fa fa-id-card" aria-hidden="true"></i> h1 class="ttl03-3"</h1>
<h1 class="ttl03-4"><i class="fa fa-id-card" aria-hidden="true"></i> h1 class="ttl03-4"</h1>
<h1 class="ttl03-5"><i class="fa fa-id-card" aria-hidden="true"></i> h1 class="ttl03-5"</h1>
<h1 class="ttl03-6"><i class="fa fa-id-card" aria-hidden="true"></i> h1 class="ttl03-6"</h1>
<h1 class="ttl03-7"><i class="fa fa-id-card" aria-hidden="true"></i> h1 class="ttl03-7"</h1>
[/php]
〔表示例〕
h1 class=”ttl03-1″
h1 class=”ttl03-2″
h1 class=”ttl03-3″
h1 class=”ttl03-4″
h1 class=”ttl03-5″
h1 class=”ttl03-6″
h1 class=”ttl03-7″
02 立体感を増したカラフルな見出し
[php]
<h1 class="ttl02-1">サンプルH1 class="ttl02-1"</h1>
<h1 class="ttl02-2">サンプルH1 class="ttl02-2"</h1>
<h1 class="ttl02-3">サンプルH1 class="ttl02-3"</h1>
<h1 class="ttl02-4">サンプルH1 class="ttl02-4"</h1>
<h1 class="ttl02-5">サンプルH1 class="ttl02-5"</h1>
<h1 class="ttl02-6">サンプルH1 class="ttl02-6"</h1>
<h1 class="ttl02-7">サンプルH1 class="ttl02-7"</h1>
[/php]
〔表示例〕
サンプルH1 class=”ttl02-1″
サンプルH1 class=”ttl02-2″
サンプルH1 class=”ttl02-3″
サンプルH1 class=”ttl02-4″
サンプルH1 class=”ttl02-5″
サンプルH1 class=”ttl02-6″
サンプルH1 class=”ttl02-7″
01 カラフルな見出し
[php]
<h1 class="ttl01-1">サンプルH1 class="ttl01-1"</h1>
<h1 class="ttl01-2">サンプルH1 class="ttl01-2"</h1>
<h1 class="ttl01-3">サンプルH1 class="ttl01-3"</h1>
<h1 class="ttl01-4">サンプルH1 class="ttl01-4"</h1>
<h1 class="ttl01-5">サンプルH1 class="ttl01-5"</h1>
<h1 class="ttl01-6">サンプルH1 class="ttl01-6"</h1>
<h1 class="ttl01-7">サンプルH1 class="ttl01-7"</h1>
[/php]
〔表示例〕
サンプルH1 class=”ttl01-1″
サンプルH1 class=”ttl01-2″
サンプルH1 class=”ttl01-3″
サンプルH1 class=”ttl01-4″
サンプルH1 class=”ttl01-5″
サンプルH1 class=”ttl01-6″
サンプルH1 class=”ttl01-7″
記事の作成時に使えるタグ(その2)
sectionBlock1
[php]
<div class="sectionBlock1">
<h1>sectionBlock1の見出し</h1>
<p>sectionBlock1のパラフレーズ</p>
<ul>
<li>sectionBlock1のリスト1</li>
<li>sectionBlock1のリスト2</li>
<li>sectionBlock1のリスト3</li>
</ul>
</div>
[/php]
〔表示例〕
sectionBlock1の見出し
sectionBlock1のパラフレーズ
- sectionBlock1のリスト1
- sectionBlock1のリスト2
- sectionBlock1のリスト3
sectionBlock2
[php]
<div class="sectionBlock2">
<h1>sectionBlock2の見出し</h1>
<p>sectionBlock2のパラフレーズ</p>
<ul>
<li>sectionBlock2のリスト1</li>
<li>sectionBlock2のリスト2</li>
<li>sectionBlock2のリスト3</li>
</ul>
</div>
[/php]
〔表示例〕
sectionBlock2の見出し
sectionBlock2のパラフレーズ
- sectionBlock2のリスト1
- sectionBlock2のリスト2
- sectionBlock2のリスト3
sectionBlock3
[php]
<div class="sectionBlock3">
<h1>sectionBlock3の見出し</h1>
<p>sectionBlock3のパラフレーズ</p>
</div>
[/php]
〔表示例〕
sectionBlock3の見出し
sectionBlock3のパラフレーズ
記事の作成時に使えるタグ(その1)
小見出し
[php]
<h2>サンプルH2</h2>
<h3>サンプルH3</h3>
<h4>サンプルH4</h4>
[/php]
〔表示例〕
サンプルH2
サンプルH3
サンプルH4
見出し class=”title”
[php]
<h1 class="title">サンプルH1 class="title"</h1>
<h3 class="title">サンプルH3 class="title"</h3>
<h3 class="title-top">サンプルH3 class="title-top"</h3>
<h3 class="title-bottom">サンプルH3 class="title-bottom"</h3>
<h4 class="title">サンプルH4 class="title"</h4>
<h5 class="title">サンプルH5 class="title"</h5>
<h6 class="title">サンプルH6 class="title"</h6>
<h7 class="title">サンプルH7 class="title"</h7>
[/php]
〔表示例〕
サンプルH1 class=”title”
サンプルH3 class=”title”
サンプルH3 class=”title-top”
サンプルH3 class=”title-bottom”
サンプルH4 class=”title”
サンプルH5 class=”title”
サンプルH6 class=”title”
番号無しリスト
[php]
<ul>
<li>番号無しリスト1</li>
<li>番号無しリスト2</li>
<li>番号無しリスト3</li>
</ul>
[/php]
〔表示例〕
- 番号無しリスト1
- 番号無しリスト2
- 番号無しリスト3
引用
[php]
<blockquote>
これは引用のサンプルです。
</blockquote>
[/php]
〔表示例〕
これは引用のサンプルです。
補足情報
[php]
<div class="point">
これは補足情報のサンプルです。
</div>
[/php]
〔表示例〕
注意書き
[php]
<div class="attention">
これは注意書きのサンプルです。
</div>
[/php]
〔表示例〕
ハイライト
[php]
これは<span class="highlight">ハイライト</span>のサンプルです。
[/php]
〔表示例〕
これはハイライトのサンプルです。
【Bootstrap】印刷時に表示されるURLを消す方法
これについての解説ページはこちら
wp_list_pages()
get_page_by_path()
スラッグ名をもつ固定ページのIDを取得する方法
[php]
$slug_name = $category;
$page = get_page_by_path($slug_name);
$page_ID = $page->ID;
[/php]
style.cssを4分割で管理
CSSの管理は、ほかに比べて簡単そうに見えるが、一番厄介ともいえる。
cssを管理するために、style.cssを4分割して管理することにする。
style.css
style-basic.css
style-parts.css
style-sidebar.css
「id」と「class」の違い(使い分け)
参考 URL http://allabout.co.jp/gm/gc/23897/
文章(readingContent1)
[css autolinks=”false” classname=”myclass” collapse=”false” firstline=”1″ gutter=”true” highlight=”1-3,6,9″ htmlscript=”false” light=”false” padlinenumbers=”false” smarttabs=”true” tabsize=”4″ toolbar=”true” title=”example-filename.php”]
/* 文章(readingContent1)
———————————————*/
.readingContent1 {
font-size: 11px;
}
.readingContent1 h2 {
margin: 1.2em 0 0.5em 0;
padding: 0 0 4px 0;
border-bottom: 1px solid #CCC;
font-size: 150%;
color: #223c3f;
line-height: 1.2;
}
.readingContent1 h3 {
margin: 1.2em 0 0.5em 0;
padding: 0 0 4px 0;
border-bottom: 1px solid #CCC;
font-size: 120%;
color: #223c3f;
line-height: 1.2;
}
.readingContent1 h3 .category {
font-size: 80%;
color: #333;
}
.readingContent1 h4 {
margin: 1.7em 0 1.2em 0;
color: #223c3f;
line-height: 1.2;
}
.readingContent1 p {
margin: 1em 0 1em 0;
line-height: 1.66;
}
.readingContent1 .column {
margin: 1.8em 0 1.8em 0;
border: 1px solid #CCC;
background: #F5F5F5;
}
.readingContent1 .column .columnTitle {
margin: 0;
padding: 6px 10px;
border-bottom: 1px solid #CCC;
background: #E5E5E5;
color: #333;
}
.readingContent1 .column * {
margin: 10px;
}
.readingContent1 .column * * {
margin: 0;
}
.readingContent1 ul {
margin: 0 0 1.8em 0;
line-height: 1.4;
}
.readingContent1 ul ul {
margin: 0;
}
.readingContent1 ul li {
list-style-type: none;
margin: 0;
padding: 0 0 0 15px;
background: url(img/bg/bullet_01.gif) 3px 0.46em no-repeat;
}
.readingContent1 ul li li {
background: url(img/bg/bullet_02.gif) 4px 0.46em no-repeat;
}
.readingContent1 ul.article {
border-top: 1px solid #CCC;
}
.readingContent1 ul.article li {
margin: 0;
padding: 0.5em 1.5em;
background: url(img/bg/arrow_01.gif) 0.5em 1em no-repeat;
color: #223c3f;
border-bottom: 1px solid #CCC;
}
.readingContent1 ul.article li li {
color: #666;
padding: 0;
border-bottom: none;
}
.readingContent1 blockquote {
margin: 0 0 1.8em 0;
padding: 10px;
border: 1px solid #CCC;
font-size: 93%;
}
.readingContent1 .cite {
margin: -1.8em 0 1.8em 0;
text-align: right;
font-size: 80%;
}
.readingContent1 .preWrap {
width: 100%;
overflow: auto;
margin: 0 0 1.8em 0;
background: #F5F5F5;
font-family: "Courier New", Courier, mono;
line-height: 1.4;
}
.readingContent1 .preWrap pre {
padding: 10px;
}
.readingContent1 .fig {
float: left;
margin: 5px 10px 5px 0;
}
.readingContent1 .illust {
margin: 0 0 1.8em 0;
line-height: 1.2;
font-size: 100%;
text-align: center;
}
.readingContent1 .illust p {
margin: 0 0 5px 0;
}
.readingContent1 .illust table {
margin: 0 auto;
border-left: 1px solid #CCC;
border-top: 1px solid #CCC;
border-collapse: collapse;
}
.readingContent1 .illust table td,
.readingContent1 .illust table th {
text-align: left;
padding: 5px;
border-right: 1px solid #CCC;
border-bottom: 1px solid #CCC;
}
.readingContent1 .illust table th {
background: #F5F5F5;
}
.readingContent1 dl {
height: 1%; /* for WinIE5,6 */
line-height: 1.33;
}
.readingContent1 dl dt {
line-height: 1.3;
margin: 10px 0 5px 0;
padding: 6px 0 0 0;
font-size: 120%;
color: #33c;
}
.readingContent1 dl dd {
_position: relative; /* for WinIE5 */
_height: 1%; /* for WinIE5,6 */
padding: 0 1em 6px 1em;
font-size: 110%;
border-bottom: 1px solid #E5E5E5;
background: #F8F8F8;
}
[/css]
サイドバーに最新の記事を投稿順に表示させるコード
サイドバーに「各サイトへのリンク(最新の記事投稿順)」の作成コード
[php]
<?php /* 各サイトへのリンク */?>
<div id="site-link">
<h2>各サイトへのリンク(最新の記事投稿順)</h2>
<ol>
<?php $sites=get_last_updated(); ?>
<?php foreach($sites as $site) : ?>
<?php if($site[‘blog_id’]!=1) : ?>
<li><a href="<?php echo get_home_url($site[‘blog_id’]); ?>"><?php echo get_blog_option($site[‘blog_id’],’blogname’); ?></a></li>
<?php endif; ?>
<?php endforeach; ?>
</ol>
</div><!– end of #site-link –>
[/php]
カスタムフィールドにisbnを登録し、参考文献 を表示させる
固定ページのカスタムフィールドにisbnを登録することで書籍を表示させる。
次のコードをpage-sitemap.phpとpage-database.phpのtemplateに書き込む。
[サンプルページ] page-sitemap.phpの例 page-database.phpの例
[php]
<?php // 参考文献 の表示 ?>
<?php if(post_custom(‘isbn’)): ?>
<h6>参考文献</h6>
<div id="book_info">
<ul>
<?php
$list = get_post_custom();
$isbns = $list[‘isbn’];
foreach ($isbns as $isbn) {
_SESSION["isbn"]=$isbn;
get_template_part(‘content-amazon’);
}
?>
</ul>
</div><!– end #book_info –>
<?php endif; ?>
[/php]
Amazon アソシエイト isbnで検索するための関数
Amazon アソシエイト isbnで検索するための関数がようやく出来上がりました。
少々苦労しましたが、このページを参考にさせていただき無事完成しました。
[php]
function getAmazonBookInfo_isbn($isbn){
$xml = new stdClass;
// 必要なパラメータを揃える
$service = ‘AWSECommerceService’;
$access_key_id = ‘○○○○○○○○○○’; //アクセスキーID
$associatetag = ‘○○○○○○○○○○’; //アフィリエイトタグ
// パラメータの設定
$searchindex = ‘Books’; // all Books
$responsegroup = ‘Large’; // Images Medium Large
$isbn = rawurlencode($isbn);
//時刻認証パラメータ(Timestamp)作成
$timestamp = gmdate(‘Y-m-d’) . ‘T’ . gmdate(‘H:i:s’) . ‘Z’;
$timestamp = rawurlencode($timestamp);
//Amazon指定の順序でパラメータを並べる
$parameters = "AWSAccessKeyId=$access_key_id&AssociateTag=$associatetag&IdType=ISBN&ItemId=$isbn&Operation=ItemLookup&ResponseGroup=$responsegroup&SearchIndex=$searchindex&Service=$service&Timestamp=$timestamp&Version=2011-08-01";
//署名認証パラメータ(Signature)作成
$secret_access_key = ‘○○○○○○○○○○’; //シークレットアクセスキー
$host = ‘ecs.amazonaws.jp’;
$path = ‘/onca/xml’;
$string = "GETn$hostn$pathn$parameters";
$signature = rawurlencode( base64_encode(hash_hmac(‘sha256’, $string, $secret_access_key, true)) );
//ベースURLとリクエストパラメータを結合
$baseurl = ‘http://ecs.amazonaws.jp/onca/xml’;
$url = "$baseurl?$parameters&Signature=$signature";
//XMLパース
$xml = simplexml_load_file($url);
return $xml;
}
[/php]
書籍検索用のテンプレートを完成させました。
書籍検索用のテンプレートを完成させました。 書籍検索画面はこちら
これはテンプレート用のソースプログラムです。
[php]
<?php
/**
* Template Name: page-books
* 2014/08/17作成
*/
?>
<?php get_header(); ?>
<div id="container">
<div id="content">
<?php
// 初期設定
$parent = fnc_parent_title_guid(); // 親ページのタイトルとGuidの取得
session_start();
$_SESSION["slug"]=$post->post_name;
$_SESSION["parent_title"]=$parent->title; // 親ページのタイトル
$_SESSION["parent_guid"]=$parent->guid; // 親ページのGuid
$disp_keyword="";
$keyword="";
$keyword_fg="2";
$sort_fg="5";
$sort_type="2";
$sort="ukeirebi desc";
//
if(isset($_POST[‘cmdClear’])){
$keyword=”;
$disp_keyword=”;
$sort_fg=’5′;
$sort_type=’2′;
}elseif(isset($_POST[‘keyword’]) or isset($_GET[‘keyword’]) or isset($_POST[‘sort_fg’]) or isset($_GET[‘sort_fg’])){
if(isset($_POST[‘keyword’])){
$tmp_keyword=str_replace(" "," ",$_POST[‘keyword’]);
$disp_keyword=$_POST[‘keyword’];
$keyword_fg=$_POST[‘keyword_fg’];
}elseif(isset($_GET[‘keyword’])){
$tmp_keyword=str_replace(" "," ",$_GET[‘keyword’]);
$disp_keyword=$_GET[‘keyword’];
$keyword_fg=$_GET[‘keyword_fg’];
}
if(isset($_POST[‘sort_fg’])){
$sort_fg=$_POST[‘sort_fg’];
$sort_type=$_POST[‘sort_type’];
}else{
$sort_fg=$_GET[‘sort_fg’];
$sort_type=$_GET[‘sort_type’];
}
$arr_keyword=explode(" ",$tmp_keyword);
if($keyword_fg==1){
for($i=0;$i<count($arr_keyword);$i++){
$tmp_keyword=mb_convert_encoding($arr_keyword[$i],"utf-8");
if($keyword==""){
$keyword="(bunrui LIKE ‘%$tmp_keyword%’)";
}else{
$keyword=$keyword." and (bunrui LIKE ‘%$tmp_keyword%’)";
}
}
}elseif($keyword_fg==2){
for($i=0;$i<count($arr_keyword);$i++){
$tmp_keyword=mb_convert_encoding($arr_keyword[$i],"utf-8");
if($keyword==""){
$keyword="(shomei LIKE ‘%$tmp_keyword%’)";
}else{
$keyword=$keyword." and (shomei LIKE ‘%$tmp_keyword%’)";
}
}
}elseif($keyword_fg==3){
for($i=0;$i<count($arr_keyword);$i++){
$tmp_keyword=mb_convert_encoding($arr_keyword[$i],"utf-8");
if($keyword==""){
$keyword="(chosha LIKE ‘%$tmp_keyword%’)";
}else{
$keyword=$keyword." and (chosha LIKE ‘%$tmp_keyword%’)";
}
}
}elseif($keyword_fg==4){
for($i=0;$i<count($arr_keyword);$i++){
$tmp_keyword=mb_convert_encoding($arr_keyword[$i],"utf-8");
if($keyword==""){
$keyword="(shuppansha LIKE ‘%$tmp_keyword%’)";
}else{
$keyword=$keyword." and (shuppansha LIKE ‘%$tmp_keyword%’)";
}
}
}elseif($keyword_fg==5){
for($i=0;$i<count($arr_keyword);$i++){
$tmp_keyword=mb_convert_encoding($arr_keyword[$i],"utf-8");
if($keyword==""){
$keyword="(shuppannen LIKE ‘%$tmp_keyword%’)";
}else{
$keyword=$keyword." and (shuppannen LIKE ‘%$tmp_keyword%’)";
}
}
}
if($sort_fg==1){
$sort="shomei_kana";
if($sort_type==2){$sort=$sort . " desc";}
}elseif($sort_fg==2){
$sort="choshamei_kana";
if($sort_type==2){$sort=$sort . " desc";}
}elseif($sort_fg==3){
$sort="haikabasho";
if($sort_type==2){$sort=$sort . " desc";}
}elseif($sort_fg==4){
$sort="shuppannen";
if($sort_type==2){$sort=$sort . " desc";}
}elseif($sort_fg==5){
$sort="ukeirebi";
if($sort_type==2){$sort=$sort . " desc";}
}
}
$_SESSION["keyword"]=$keyword; // keywordの保持
if($sort_fg==”){
$sort="";
}else{
$sort="order by " . $sort;
}
$_SESSION["sort"]=$sort; // sortの保持
?>
<form method="post" action="●●">
<table border="0">
<tr>
<td>
<input type="radio" name="keyword_fg" value="1" <?php if($keyword_fg==’1′){ echo ‘checked’;} ?>><font color="#00f">分類名</font>
<input type="radio" name="keyword_fg" value="2" <?php if($keyword_fg==’2′){ echo ‘checked’;} ?>><font color="#f00">書名</font>
<input type="radio" name="keyword_fg" value="3" <?php if($keyword_fg==’3′){ echo ‘checked’;} ?>>著者名
<input type="radio" name="keyword_fg" value="4" <?php if($keyword_fg==’4′){ echo ‘checked’;} ?>>出版社
<input type="radio" name="keyword_fg" value="5" <?php if($keyword_fg==’5′){ echo ‘checked’;} ?>>出版年
<input type="text" name="keyword" size="25" value="<?php echo $disp_keyword; ?>">
<input type="submit" name="cmdSearch" value="検索">
<input type="submit" name="cmdClear" value="クリア">
</td>
</tr>
<tr>
<td>
<input type="radio" name="sort_type" value="1" <?php if($sort_type==’1′){ echo ‘checked’;} ?>>昇順
<input type="radio" name="sort_type" value="2" <?php if($sort_type==’2′){ echo ‘checked’;} ?>>降順
<input type="submit" name="cmdSearch" value="ソート"> <font size="+2">(</font>
<input type="radio" name="sort_fg" value="1" <?php if($sort_fg==’1′){ echo ‘checked’;} ?>>書名
<input type="radio" name="sort_fg" value="2" <?php if($sort_fg==’2′){ echo ‘checked’;} ?>>著者名
<input type="radio" name="sort_fg" value="3" <?php if($sort_fg==’3′){ echo ‘checked’;} ?>>配架場所
<input type="radio" name="sort_fg" value="4" <?php if($sort_fg==’4′){ echo ‘checked’;} ?>>出版年
<input type="radio" name="sort_fg" value="5" <?php if($sort_fg==’5′){ echo ‘checked’;} ?>>受入日<font size="+2"> )</font>
</td>
</tr>
</table>
</form>
<?php /* データ処理 */
if($keyword != ”):
// データ数のカウント
$sql = "SELECT count(*) FROM wp_books WHERE $keyword $sort";
$count = $wpdb->get_var($sql);
echo "抽出件数:".$count."<br />";
// データの抽出
$sql = "SELECT * FROM wp_books WHERE $keyword $sort";
$posts = $wpdb->get_results($sql);
echo "SQL:"."SELECT * FROM wp_books WHERE ".$keyword . " ".$sort;
$no="1";
?>
<div id="book_info" class="clearfix">
<div class="inner clearfix">
<ul>
<?php foreach($posts as $post): setup_postdata($post); ?>
<?php $_SESSION["book_id"]=$no; ?>
<?php get_template_part(‘content-book’); ?>
<?php $no++; ?>
<?php endforeach; ?>
</ul>
</div><!– end .inner clearfix –>
</div><!– end .book_info –>
<?php else: ?>
<div class="sectionBlock1">
<検索の方法><br />
(1)キーワードを入れて、検索ボタンをクリックしてください。<br />
(注1)分類名、書名、著者名、出版社、出版年で検索できます。<br />
(注2)スペースを使ってand検索ができます。例:数学 物理<br />
(2)書名、著者名、配架場所、出版年、受入日をキーにしてソートできます。
</div>
<?php endif; ?>
<?php get_template_part(‘page_top_link’); ?>
</div><!– end #content –>
<?php get_sidebar(page); ?>
</div><!– end #container –>
<?php get_footer(); ?>
[/php]
content-book_sortのソースファイル
関連ページ:書籍検索(新書)
関連ページ:page-books_shinsho.php のソースファイル
[php]
<?php
// 初期設定
$sort_fg="5";
$sort_type="2";
$sort="ukeirebi desc";
if(isset($_POST[‘cmdClear’])){
$sort_fg=”;
$sort_type=”;
}elseif(isset($_POST[‘sort_fg’]) or isset($_GET[‘sort_fg’])){
if(isset($_POST[‘sort_fg’])){
$sort_fg=$_POST[‘sort_fg’];
$sort_type=$_POST[‘sort_type’];
}else{
$sort_fg=$_GET[‘sort_fg’];
$sort_type=$_GET[‘sort_type’];
}
if($sort_fg==1){
$sort="shomei_kana";
if($sort_type==2){$sort=$sort . " desc";}
}elseif($sort_fg==2){
$sort="choshamei_kana";
if($sort_type==2){$sort=$sort . " desc";}
}elseif($sort_fg==3){
$sort="haikabasho";
if($sort_type==2){$sort=$sort . " desc";}
}elseif($sort_fg==4){
$sort="shuppannen";
if($sort_type==2){$sort=$sort . " desc";}
}elseif($sort_fg==5){
$sort="ukeirebi";
if($sort_type==2){$sort=$sort . " desc";}
}
}
if($sort_fg==”){
$sort="";
}else{
$sort="order by " . $sort;
}
$_SESSION["sort"]=$sort; // $sortの保持
?>
<form method="post" action="http://www.rgb-green.tk/computer/programing/htmljavascript/javascript/tab/">
<table border="0">
<tr>
<td>
<input type="radio" name="sort_fg" value="1" <?php if($sort_fg==’1′){ echo ‘checked’;} ?>>書 名
<input type="radio" name="sort_fg" value="2" <?php if($sort_fg==’2′){ echo ‘checked’;} ?>>著者名
<input type="radio" name="sort_fg" value="3" <?php if($sort_fg==’3′){ echo ‘checked’;} ?>>配架場所
<input type="radio" name="sort_fg" value="4" <?php if($sort_fg==’4′){ echo ‘checked’;} ?>>出版年
<input type="radio" name="sort_fg" value="5" <?php if($sort_fg==’5′){ echo ‘checked’;} ?>>受入日
</td>
</tr>
<tr>
<td>
<input type="radio" name="sort_type" value="1" <?php if($sort_type==’1′){ echo ‘checked’;} ?>>昇順
<input type="radio" name="sort_type" value="2" <?php if($sort_type==’2′){ echo ‘checked’;} ?>>降順
<input type="submit" name="cmdSearch" value="検索">
<input type="submit" name="cmdClear" value="クリア">
</td>
</tr>
</table>
</form>
[/php]
page-books_shinsho.php のソースファイル
書籍検索(新書)のためのpage-books_shinsho.php のソースファイル
[php]
<?php
/**
* Template Name: page-books_shinsho
* 2014/08/19作成
*/
?>
<style>
/* 外部スタイルシートの読み込み */
@import "jquery-ui.css"; /* jQueryUI用CSS */
</style>
<script src="jquery.js"></script> <!– jQuery用ライブラリ –>
<script src="jquery-ui.js"></script> <!– jQueryUI用ライブラリ –>
<?php get_header(); ?>
<div id="container">
<div id="content">
<script>
////////////////////////////////////////////////////////////////////
// windowイベントの定義
////////////////////////////////////////////////////////////////////
//HTML文書読み込み完了後に実行するイベントの定義
window.addEventListener("load", function () {
resizeTo(400, 300); //ウィンドウサイズを指定
//タブ切り替えインターフェースの実装
$(‘#tabs’).tabs();
});
</script>
<?php
// 初期設定
$parent = fnc_parent_title_guid(); // 親ページのタイトルとGuidの取得
session_start();
$_SESSION["slug"]=$post->post_name;
$_SESSION["parent_title"]=$parent->title; // 親ページのタイトル
$_SESSION["parent_guid"]=$parent->guid; // 親ページのGuid
?>
<?php get_template_part(‘content-book_sort’); ?>
<?php $sort = $_SESSION["sort"]; ?>
<!– タブ切り替えインターフェース領域 –>
<div id="tabs">
<!– タブメニューリスト領域 –>
<ul>
<li><a href="#tab1">平成26年1学期</a></li>
<li><a href="#tab2">平成25年2学期</a></li>
<li><a href="#tab3">平成25年3学期</a></li>
</ul>
<!– タブコンテンツ領域1 –>
<div id="tab1">
<?php /* データ処理 */
// 抽出のための条件
$keyword = "ukeirebi BETWEEN ‘2014-03-31’ AND ‘2014-09-01’ $sort";
// データ数のカウント
$sql = "SELECT count(*) FROM wp_books WHERE $keyword";
$count = $wpdb->get_var($sql);
echo "抽出件数:".$count."<br />";
// データの抽出
$sql = "SELECT * FROM wp_books WHERE $keyword";
$posts = $wpdb->get_results($sql);
echo "SQL:"."SELECT * FROM wp_books WHERE ".$keyword;
$no="1";
?>
<div id="book_info" class="clearfix">
<div class="inner clearfix">
<ul>
<?php foreach($posts as $post): setup_postdata($post); ?>
<?php $_SESSION["book_id"]=$no; ?>
<?php get_template_part(‘content-book’); ?>
<?php $no++; ?>
<?php endforeach; ?>
</ul>
</div><!– end .inner clearfix –>
</div><!– end .book_info –>
</div><!– end #tab1 –>
<!– タブコンテンツ領域2 –>
<div id="tab2">
<?php /* データ処理 */
// 抽出のための条件
$keyword = "ukeirebi BETWEEN ‘2013-09-01’ AND ‘2013-12-31’ $sort";
// データ数のカウント
$sql = "SELECT count(*) FROM wp_books WHERE $keyword";
$count = $wpdb->get_var($sql);
echo "抽出件数:".$count."<br />";
// データの抽出
$sql = "SELECT * FROM wp_books WHERE $keyword";
$posts = $wpdb->get_results($sql);
echo "SQL:"."SELECT * FROM wp_books WHERE ".$keyword;
?>
<div id="book_info" class="clearfix">
<div class="inner clearfix">
<ul>
<?php foreach($posts as $post): setup_postdata($post); ?>
<?php $_SESSION["book_id"]=$no; ?>
<?php get_template_part(‘content-book’); ?>
<?php $no++; ?>
<?php endforeach; ?>
</ul>
</div><!– end .inner clearfix –>
</div><!– end .book_info –>
</div><!– end #tab2 –>
<!– タブコンテンツ領域3 –>
<div id="tab3">
<?php /* データ処理 */
// 抽出のための条件
$keyword = "ukeirebi BETWEEN ‘2014-01-01’ AND ‘2014-03-31’ $sort";
// データ数のカウント
$sql = "SELECT count(*) FROM wp_books WHERE $keyword";
$count = $wpdb->get_var($sql);
echo "抽出件数:".$count."<br />";
// データの抽出
$sql = "SELECT * FROM wp_books WHERE $keyword";
$posts = $wpdb->get_results($sql);
echo "SQL:"."SELECT * FROM wp_books WHERE ".$keyword;
?>
<div id="book_info" class="clearfix">
<div class="inner clearfix">
<ul>
<?php foreach($posts as $post): setup_postdata($post); ?>
<?php $_SESSION["book_id"]=$no; ?>
<?php get_template_part(‘content-book’); ?>
<?php $no++; ?>
<?php endforeach; ?>
</ul>
</div><!– end .inner clearfix –>
</div><!– end .book_info –>
</div><!– end #tab3 –>
</div><!– end #tabs –>
<?php get_template_part(‘page_top_link’); ?>
</div><!– end #content –>
<?php get_sidebar(page); ?>
</div><!– end #container –>
<?php get_footer(); ?>
[/php]
$post_typeの記事を抽出する関数
[php]
// $post_typeの記事を抽出する。
function fnc_read_post_type($post_type,$days) {
global $wpdb, $from, $offset, $per_page;
// $post_typeは必須: category または oshirase_cat
// $daysは3種類: allは全期間 空白はデフォルト 他はdays
if($days==’all’): $from=’0′;
elseif($days==”): $from = date("Y-m-d H:i:s", time() – 86400*90);
else: $from = date("Y-m-d H:i:s", time() – 86400*$days);
endif;
$obj = new stdClass;
$sql = <<< HERE
SELECT *
FROM $wpdb->posts
WHERE post_type = ‘$post_type’
AND post_status = ‘publish’
AND post_date >= ‘$from’
ORDER BY post_date DESC
LIMIT $offset, $per_page
HERE;
$obj = $wpdb->get_results($sql);
return $obj;
}
[/php]
$post_typeの記事数をカウントする関数
[php]
// $post_typeの記事数をカウントする。
function fnc_count_post_type($post_type,$days) {
global $wpdb,$from;
// $post_typeは必須: category または oshirase_cat
// $daysは3種類: allは全期間 空白はデフォルト 他はdays
if($days==’all’): $from=’0′;
elseif($days==”): $from = date("Y-m-d H:i:s", time() – 86400*90);
else: $from = date("Y-m-d H:i:s", time() – 86400*$days);
endif;
$sql = <<< HERE
SELECT COUNT(*) FROM $wpdb->posts
WHERE post_type = ‘$post_type’
AND post_status = ‘publish’
AND post_date >= ‘$from’
HERE;
$count = $wpdb->get_var($sql);
return $count;
}
[/php]
ご来訪有難うございます。
www.ogino.tk へご来訪有難うございます。
このブログは、Wordpressで運用しています。半年前に気のついたこのなのですが、WordpressはPHPで作られているので、工夫と実力次第で、HTML、CSS、PHP、JavaScriptなどを取り入れた自由度の高いWebSiteを構築可能です。
何分このWebSiteは、構築途中で、試験的運用の段階です。これから研鑽を重ね、ぜひ、レベルの高い、内容のあるWebSiteを作りたいと意気込んでいますので、ただこれだけの内容かと思われずに、長い目で見てやってください。よろしくお願いします。(記載日:2011年1月6日)
CoreServerでNextgenを利用できるまでの設定
プラグインの「nextgen」を有効にして、利用すると、
次のメッセージが表示され、nextgenが利用できない症状が出た。
ID 1: 問題が発生しました
[more]
You do not have the GD Library installed. This class requires the GD library to function properly. visit http://us2.php.net/manual/en/ref.image.php for more information
そこで、以下の対処をすることで利用できるようになったので覚え書きとして書き留めておく。
(1) .htaccess を作り、wp-admin/ のディレクトリに置く。
AddHandler application/x-httpd-phpcgi .php
(2) header.phpに以下がない場合は追加しておく。
[code]
<?php
/* We add some JavaScript to pages with the comment form
* to support sites with threaded comments (when in use).
*/
if ( is_singular() && get_option( ‘thread_comments’ ) )
wp_enqueue_script( ‘comment-reply’ );
/* Always have wp_head() just before the closing </head>
* tag of your theme, or you will break many plugins, which
* generally use this hook to add elements to <head> such
* as styles, scripts, and meta tags.
*/
wp_head();
?>
[/code]
(3) imagerotator.swf を/wp-content/uploadsに設置する。
NetBookServerでWordPressが使えるまでの設定
httpdとMySQLのインストール状況の確認
① httpdのインストール状況
[root@NetBookServer ~]# rpm -qa httpd
httpd-2.2.3-31.el5.centos.2
② mysqlのインストール状況
[root@NetBookServer ~]# rpm -qa mysql
mysql-5.0.77-4.el5_4.2
③ 以上より、appachとmysqlはインストールする必要がないことが分かる。次にphpMyAdminのインストール状況の確認をする。
phpMyAdminが利用できるまでの流れ
①phpMyAdminのインストール状況の確認
[root@NetBookServer ~]# rpm -q phpmyadmin
パッケージ phpmyadmin はインストールされていません。
そこで、phpmyadminをyumでインストールする。
②phpmyadminのインストール
[root@NetBookServer ~]# yum install phpmyadmin
Installed:
phpMyAdmin.noarch 0:2.11.10-1.el5
Dependency Installed:
libmcrypt.i386 0:2.5.8-4.el5.centos
php-mcrypt.i386 0:5.1.6-15.el5.centos.1
③ phpmyadminの設定
# vi /etc/httpd/conf.d/phpMyAdmin.conf
order deny,allow
deny from all
allow from ○○○○ ← この部分の設定(読み出せるように)
④ 以上の設定で、http://(ドメイン)/phpMyAdmin/ がらphpMyAdminのログイン画面が表示される。
wordpressのインストールと設定
①FTPによって、/var/www/html/wordpressのディレクトリにwordpress(ver3.0.1)をアップロードする。
② 以下のディレクトリの属性を変更する。
# chmod 777 wordpress
# chmod 777 -R wordpress/wp-admin/
# chmod 777 -R wordpress/wp-content/
③ あとは、http://(ドメイン)/wordpress/ でwordpressの設定画面が表示され、指示に従っていけばインストールが完了する。
Family-WordPressの設定内容(覚え書き)
FamilyのWordpressの設定内容を以下のようにする。
(1) データベースについて
データベースは、長期的な展望に立ち、各自のものを用意する。
具体的には、ogino_○○○○というデータベースを作る。
(2) FTPの環境について
メンバー全員に、FTPのIDとパスワードを与え、ファイルのアップロードとダウンロードが個々人で自由にできるようにする。IDは、ogino.○○○○の形である。これにより、Wordpressの管理画面からバージョンアップ等、FTPの操作が自由に行える。
(3) CSSについて
CSSファイルは、www.ogino.tkの共通CSSを利用する。そのために、header.phpでリンクを張っている。
(4) カウンター及びアクセス解析について
カウンターは、それぞれ独立したカウンターを使う。(5分以内の同一IPアドレスによる重複カウントは防止している。自由設定可能)
アクセス解析も独自のものを使用する。IDとパスワードによる管理となる。
画像一覧のページを作成しました。
サイト内の画像を日付の降順に出力させる「画像一覧」のページを作成しました。
サイト内画像一覧
「サイトマップ」を利用できるようにしました。
プラグイン「Dagon Design Sitemap Generator」を使って、「サイトマップ」を利用できるようにしました。
「問い合わせ」を利用できるようにしました。
「問い合わせ」が利用できない状態にありましたが、利用できるようにしました。
アクセス解析の修正
WordPressに移設してから「アクセス解析」が利用できなくなっていましたが、修正を施し、利用できるようにしました。
カウンターのソースファイル(修正版)
[sourcecode language=”php”]
<?php
// カウントデータとIPアドレスデータのファイルのパス
// count.phpと異なるフォルダに設置するときは変更
$config[‘file’][‘count’] = ‘cnt.php’;
$config[‘file’][‘check’] = ‘ip.php’;
// カウンタの桁数
$config[‘figure’][‘total’] = 6;
$config[‘figure’][‘today’] = 4;
$config[‘figure’][‘yesterday’] = 4;
[/sourcecode]
[php]
<?php
// カウントデータとIPアドレスデータのファイルのパス
// count.phpと異なるフォルダに設置するときは変更
$config[‘file’][‘count’] = ‘cnt.php’;
$config[‘file’][‘check’] = ‘ip.php’;
// カウンタの桁数
$config[‘figure’][‘total’] = 6;
$config[‘figure’][‘today’] = 4;
$config[‘figure’][‘yesterday’] = 4;
// 重複カウント回避時間
// IPアドレスによる同一クライアントの重複カウント回避時間
//
// 設定時間内は同一IPアドレスの重複カウントをしない。
// 単位は分 / (例) 60 を設定すると1時間カウントしない
// 0 を設定すると常にカウントする。
// (IPアドレスの記録もしない。)
$config[‘limit’][‘time’] = 60;
// IPアドレスを記録する上限数
// アクセス時、この記録を参照し、
// 同一IPアドレスで、「重複カウント不許可の時間」内の記録があればカウントしないことになります。
//
// 重複カウント回避時間設定が0の場合IPアドレスの記録・チェックともに行いません。
// 上限を超えた場合、古いリストから順に削除されるので、
// 1時間重複カウントを防止すると仮定した場合、1時間のユニークアクセスと同等以上の上限数を設定すべきです。
// また、上限数を大きくすればするほどチェックに時間がかかり動作は遅延します。
// アクセス状況と動作スピードを検証しつつ適宜設定してください。
$config[‘limit’][‘ip’] = 100;
// カウントデータ取得
if($fp = @fopen($config[‘file’][‘count’],"r+")) {
flock ($fp,LOCK_EX);
$data = fgets($fp);
// データ分割
$datas = divideData($data);
// カウントアップ
if(ipCheck($config)) {
$datas = countUp($datas);
rewind($fp);
ftruncate($fp,fwrite($fp,makeData($datas)));
}
fclose($fp);
// 出力
putCounter($config,$datas);
}
exit;
function putCounter($config,$datas) {
$datas[‘total’] = sprintf("%0".$config[‘figure’][‘total’]."d", $datas[‘total’]);
$datas[‘today’] = sprintf("%0".$config[‘figure’][‘today’]."d", $datas[‘today’]);
$datas[‘yesterday’] = sprintf("%0".$config[‘figure’][‘yesterday’]."d", $datas[‘yesterday’]);
$result=array(
‘total’=> $datas[‘total’],
‘today’=> $datas[‘today’],
‘yesterday’=> $datas[‘yesterday’]
);
$jsonedData = json_encode($result);
$callback="counter";
header("Content-type:text/html;charset=UTF-8");
print $callback . ‘(‘ . $jsonedData . ‘);’;
exit();
}
/** 書込みデータ作成 */
function makeData($datas) {
return join(‘,’,array($datas[‘date’],$datas[‘total’],$datas[‘today’],$datas[‘yesterday’]));
}
/** カウントアップ */
function countUp($datas) {
$date[‘today’] = date("Ymd");
$date[‘yesterday’] = date("Ymd",(time() – 60*60*24));
// データ内の日付検証
if($datas[‘date’] == $date[‘today’]) {
// 今日
$datas[‘today’]++;
}
elseif($datas[‘date’] == $date[‘yesterday’]) {
// 昨日
$datas[‘yesterday’] = $datas[‘today’];
$datas[‘today’] = 1;
}
else {
// 初回等、上記以外
$datas[‘yesterday’] = 0;
$datas[‘today’] = 1;
}
$datas[‘total’]++;
// 日付
$datas[‘date’] = $date[‘today’];
return $datas;
}
/** IPアドレスによる重複カウント防止 */
function ipCheck($config) {
$addr = $_SERVER[‘REMOTE_ADDR’];
// 判定値
$re = 0;
// 今回データ
$current = join(‘,’,array(time(),$addr));
// データバッファ
$buffer = array();
// 時間設定が0の場合、何もしないで1を返す
if($config[‘limit’][‘time’] == 0) {
return 1;
}
// IPデータ取得
$hit = 0;
if($fp = @fopen($config[‘file’][‘check’],"r+")) {
while($line = fgets($fp)){
$line = rtrim($line);
list($old[‘time’],$old[‘ip’]) = explode(‘,’,$line);
if($old[‘ip’] == $addr) {
if($old[‘time’] < time() – ($config[‘limit’][‘time’] * 10)) {
// 同一IPで設定時間外の場合、判定値を1とする
$re = 1;
}
$hit = 1;
}
else {
$buffer[] = $line."n";
}
}
// 同一IPがない場合、判定値を1とする
if($hit == 0) {
$re = 1;
}
// 今回のデータを格納
$buffer[] = $current."n";
sort($buffer);
// 記録上限数に調整
while(count($buffer) > $config[‘limit’][‘ip’]) {
array_shift($buffer);
}
// データ書込み
rewind($fp);
ftruncate($fp,fwrite($fp,join(”,$buffer)));
}
fclose($fp);
return $re;
}
/** データ分割 */
function divideData($data) {
$data = rtrim($data);
if($data) {
list($datas[‘date’],$datas[‘total’],$datas[‘today’],$datas[‘yesterday’]) = explode(‘,’,$data);
}
return $datas;
}
?>
[/php]
日付計算(1)「インクルードファイルの利用」
= 1989:
$gengo_s=”H”;
$gengo=”平成”;
$yy_wa=$yyyy-1988;
break;
case $yyyy >= 1926:
$gengo_s=”S”;
$gengo=”昭和”;
$yy_wa=$yyyy-1925;
break;
case $yyyy >= 1912:
$gengo_s=”T”;
$gengo=”大正”;
$yy_wa=$yyyy-1911;
break;
case $yyyy >= 1868:
$gengo_s=”M”;
$gengo=”明治”;
$yy_wa=$yyyy-1867;
break;
default:
return FALSE;
}
// 和暦を返す
switch($option){
case “s”: // 短い形式
return $gengo_s . $yy_wa. ” “;
break;
case “m”: // 通常の形式
if($yy_wa==1){
$yy_wa=”元”;
}
return $gengo . $yy_wa . ” 年”;
break;
case “l”: // 長い形式
if($yy_wa==1){
$yy_wa=”元”;
}
return $gengo . $yy_wa . ” 年(” . $eto . “)”;
break;
case “g”: // 元号のみ
return $gengo;
break;
case “e”: // 干支のみ
return $eto;
break;
default:
return FALSE;
}
}
// 和暦⇒西暦変換関数 toSeireki($yy_wa,$option)
function toSeireki($yy_wa,$option){
// 西暦を返す
switch($option){
case “H”:
return $yy_wa+1988;
break;
case “S”:
if($yy_wa=65){
return FALSE;
}else{
return $yy_wa+1925;
}
break;
case “T”:
if($yy_wa=16){
return FALSE;
}else{
return $yy_wa+1911;
}
break;
case “M”:
if($yy_wa=46){
return FALSE;
}else{
return $yy_wa+1867;
}
break;
default:
return FALSE;
}
}
?>
日付計算
結果:
<?php
// 今日の日付を配列にセットする
$datetime=getdate();
$yyyy=$datetime["year"];
$mm=$datetime["mon"];
$dd=$datetime["mday"];
if(isset($_POST['sub1'])){
// strlen()関数でデータのチェックをする
if(!strlen($_POST["day"])){
echo "
データが入力されていません”;
}else{
$day=@$_POST[“day”];
$val=@$_POST[“r1”];
if($val==0){
$date=date(“Y/m/d”,mktime(0,0,0,$mm,$dd+$day,$yyyy));
echo “
今日[“.date(“Y/m/d”,time()).”(”.isWeek(“now”).”)]から “.$day.”日後は、”.$date.”(”.isWeek($date).”)です。”;
}else{
$date=date(“Y/m/d”,mktime(0,0,0,$mm,$dd-$day,$yyyy));
echo “
今日[“.date(“Y/m/d”,time()).”(”.isWeek(“now”).”)]から “.$day.”日後は、”.$date.”(”.isWeek($date).”)です。”;
}
}
}
?>
暗号化と復号化(2)「base64エンコード関数を複数回用いて暗号化する」
base64エンコードを利用して暗号化する(2)
結果:
データが入力されていません”;
}else{
$str=@$_POST[“moji”];
$cnt=@$_POST[“num”];
echo “
元の文字列:”.$str;
// データのエンコード
for($i=1;$i<=$cnt;$i++){
$str=base64_encode($str);
echo "
暗号化(base64_encode)→第”.$i.”回目:”.$str;
}
// データのデコード
for($i=1;$i<=$cnt;$i++){
$str=base64_decode($str);
echo "
復元化(base64_decode)→第”.$i.”回目:”.$str;
}
}
}
?>
暗号化と復号化(1)「base64エンコードの利用」
base64エンコードを利用して暗号化する
結果:
<?php
if($_SERVER["REQUEST_METHOD"]=="POST"){
// strlen()関数でデータのチェックをする
if(!strlen($_POST["moji"]) or !strlen($_POST["moji"])){
echo "
データが入力されていません”;
}else{
$moji=@$_POST[“moji”];
$ango_moji=base64_encode($moji);
echo “
元の文字列:”.$moji;
echo “
暗号化(base64_encode):”.$ango_moji;
echo “
復元化(base64_decode):”.base64_decode($ango_moji);
}
}
?>
基本フォームをつくる(2)「複数のボタンをもつフォーム」
文字列の暗号化
結果:
<?php
if($_SERVER["REQUEST_METHOD"]=="POST"){
// strlen()関数でデータのチェックをする
if(!strlen($_POST["moji"])){
echo "
データが入力されていません”;
}else{
$moji=@$_POST[“moji”];
echo “
元の文字列:”.$moji.”
“;
switch($_POST[“sub1”]){
case “crypt”:
echo “暗号化文字列:”.crypt($moji);
break;
case “md5”:
echo “暗号化文字列:”.md5($moji);
break;
default:
echo “暗号化文字列:”.sha1($moji);
}
}
}
?>
基本フォームをつくる(1)
円の面積を求める
結果:
if(isset($_POST[“cmdCalc”])){
$r=@$_POST[“hankei”];
$s=$r*$r*3.14;
echo “半径が “.$r.” のとき、円の面積は “.$s.” です。”;
}
PHP Learning(学習テキスト)の目次
導入段階
導入段階では、PHPのプログラミングをはじめて学習する上で、参考となる例題を集めています。
[導入例題1]
例題1では、「半径を入力して、円の面積を求める」フォームを作成する作業を通じて、基本的なフォームの作り方、データの受け渡し方法やその処理の仕方について学習します。
[導入例題2]
例題2では、「文字列を暗号化する」作業を通じて、ボタンを複数もつ、少し複雑なフォームを作成し、データの受け渡しとその処理方法について学習します。
- 基本フォームをつくる(2):複数のボタンをもつフォーム
- 暗号化と復号化(1):base64エンコードの利用
- 暗号化と復号化(2):base64エンコード関数を複数回用いて暗号化する
[導入例題3]
例題3では、「西暦⇔和暦」変換関数を作る作業を通じて、関数の作り方と使用方法について学習します。
[導入例題4]
例題4では、例題3で作成した「西暦⇔和暦」変換関数をインクルードファイルとしてライブラリー化する方法について学習します。例題で扱う内容は日付に関する計算問題です。
- 日付計算(1):インクルードファイルの利用
- 日付計算(2)
- 日数計算の追加
- 西暦・和暦・干支対応表の追加
理解段階
理解段階では、PHPのプログラミングで必要となる基礎事項をサンプル例題によって学習します。
[数値]
[日付]
日付について学習します。
[ファイル]
ファイルの操作について学習します。
[ディレクトリ]
ディレクトリの操作について学習します。
[GD]
画像ファイルについて学習します。
応用段階
応用段階では、PHPによるWebアプリケショーンのプログラミングに挑戦します。
[万年カレンダー]
手始めに、万年カレンダーを作成します。週休日の色変更も追加してみます。
お天気Webサービスの設置について
Ajax+DOMを利用したライブドアの「お天気Webサービスの設置」について苦労しましたが、うまく設置できなかった理由がようやく判明しました。それは、proxy.phpを設置する場所にありました。
次のproxy.phpファイルを利用しているthemaのhome.phpと同じディレクトリーに置くのでなく、wordpressを導入したルートディレクトリーに置くことです。これで解決しました。
なお、/* ライブラリのディレクトリ */の設定で、libraryにpathを通しておくことも要注意です。
[php]
<?php
/* ———————————————————-
* 定数定義
* ——————————————————– */
/* リクエスト先URLの定義 */
define("REQ_BASE_URL", "http://weather.livedoor.com/forecast/webservice/rest/v1");
/* ライブラリのディレクトリ */
define("ZEND_LIB_DIR", "../library/"); ←要注意
/* HTTPリクエストのタイムアウト(秒) */
define("HTTP_TIMEOUT", 10);
[/php]
Ketai-Entryで携帯から添付画像がメールで送れない
warning: fopen() [function.fopen]: SAFE MODE Restriction in effect. The script whose uid is 10009 is not allowed to access /var/www/vhosts/gtthm.com/httpdocs/files owned by uid 48 in /var/www/vhosts/gtthm.com/httpdocs/includes/file.inc on line 117. .
warning: fopen(files/.htaccess) [function.fopen]: failed to open stream: Success in /var/www/vhosts/gtthm.com/httpdocs/includes/file.inc on line 117.
のようなエラーがでた。このエラーは /wp-content/uploads/2010/04
のownerの変更とmod777にすることで解決した。
玄箱をホームサーバとして構築
# apt-get update
# apt-get upgrade
NetBookServerの構築
NetBookServerの構築(wwwサーバ構
(1)
# yum install mysql-server mysql
Installed:
mysql-server.i386 0:5.0.77-4.el5_4.2
Dependency Installed:
perl-DBD-MySQL.i386 0:3.0007-2.el5
(2) phpのインストール
# yum install php
Package php-5.1.6-24.el5_4.5.i386 already installed and latest version
# yum -y install php-mbstring php-mysql
Installed:
php-mbstring.i386 0:5.1.6-24.el5_4.5
php-mysql.i386 0:5.1.6-24.el5_4.5
wordpress-2.9.2-jaへアップデート
WordPress 2.9をWordPress 2.9.2へアップデートしました。
Wordpressをベースにしたブログ形式のWebSiteに作り替えました。
62回生のWebSiteをWordpressをベースにしたブログ形式のものに作り替えました。
これによって、使い勝手の良いWebSiteとなるものと期待しています。
Permission denied (publickey,gssapi-with-mic).の原因究明
ssh関連で、192.168.1.3から192.168.1.1へ入ろうとすると、Permission denied (publickey,gssapi-with-mic).が出る。
# slogin 192.168.1.1
Permission denied (publickey,gssapi-with-mic).
いろいろ原因を探ってみたが、その結果、セキュリティーを持たすためにsshd_configで
PasswordAuthentication no
としていたためと判明する。
# vi /etc/ssh/sshd_config
PasswordAuthentication yes
PermitEmptyPasswords no
#PasswordAuthentication no
#PermitRootLogin no
これで、次のように入ることが出来て問題を解決できた。
[root@BackupServer root]# slogin 192.168.1.1
root@192.168.1.1’s password:
Last login: Fri Aug 8 18:27:44 2008 from 192.168.1.2
知っておくと便利なコマンド
(1) findコマンド
ファイルの検索コマンド
必要であるコマンドでしたが、これまで使いきれていなかったコマンドです。
使用例:
# find / -name “Weeks.php” -print
このように、-name “Weeks.php” -print と入れないと検索されません。
これまで、
find / Weeks.php のように使っていたので、「Weeks.php」が検索されませんでした。
WordPressの引越し
これまで(2008年10月)、WordPress ME 2.1.1を使っていましたが、バージョンアップとデータのバックアップをとるためにWordPressを別サーバに移転させる必要性が生じました。3ヶ月前から「WordPressの引越し」にチャレンジしていましたが、MySQLのデータベース関連、PHP関連、そして文字化け問題となかなか引越しが出来ない状態にありました。それでもサーバ構築を進めていく以上何とかしなければならないという思いで、かなりの労力と時間を費やしましたが、なんとか「WordPressの引越し」が出来ました。念願の引越しが出来たのもWeb検索でいろいろな情報を集めることが出来たためです。そこで、これから「WordPressの引越し」をお考えの方に少しでも参考になればと思い、今回取り組んだ内容を書き留めておきます。
それでは、WordPress ME 2.1.1を別サーバに移転させるために、取り組んだことを書きます。
(1) サーバの全ファイルをローカルにバックアップ
まず、安全のため、FFFTPなどを使って全ファイルのバックアップを取りました。
(2) データベースのエクスポート
次に、WordPress ME 2.1.1のMySQLのデータベースをphpMyAdminでエクスポートしました。
WordPressそのものにもエクスポート機能がありますが、この機能を使ってエクスポートすると、WordPress ME 2.1.1では文字化けが起きたのでphpMyAdminでエクスポートしました。
<phpMyAdminでのエクスポート留意事項>
phpMyAdminを使ってのエクスポートも、設定を違えると文字化けの原因となりました。そこで私の場合は、以下の3点に注意してデータをエクスポートすると文字化けが生じずうまくいきました。
(ⅰ) SQL互換モードはMYSQL40などのようにデータインポート先のSQLと互換を取れるように設定。
(ⅱ) 「DROP TABLE / DROP VIEWを追加」にチェックを入れる。
(ⅲ) 「wp_options」はエクスポートしない。
また、2MBを超えると一度にインポートできないので、「圧縮: “zip 形式” 」を選択してエクスポートファイルを作成しました。圧縮形式でエクスポートしても、文字化けなどの原因にはならないようで、安心して使えました。
<エクスポート設定画面>
(3) WordPressの新規インストール
移転先のサーバに最新版であるWordPress2.6.2(日本語版)を新規にインストールしました。
このときに注意することは、以下のようにして新規WordPress用のデータベースをphpMyAdminを使って作成しますが、文字化け対策として、「新規データベースを作成する」で utf8_unicode_ci を選択することです。また、作成したデータベースに適切な「特権の設定」をしておく必要があります。適切な特権の設定とは、作成したデータベースにアクセスできるユーザ設定をしておくということです。このユーザ名とパスワードはWordPressの新規インストール時に必要となります。
(4) テーマ・プラグイン・画像ファイルのアップロード
次に、テーマ・プラグイン・画像ファイルのアップロードをするために、新規にインストールしたWordPressのwp-contensを削除し、FFFTPを使って、バックアップしておいたwp-contensを丸ごとアップロードしました。
(5) データベースのインポート
エクスポートと同様に、phpMyAdminを使ってMySQLへのデータをインポートしました。これも。設定を違えると文字化けの原因となりました。私の場合、以下のようにすると文字化けが生じませんでした。
(ⅰ) SQL互換モードはMYSQL40などのようにデータインポート先のSQLと互換を取れるように設定
(ⅱ) ファイルの文字セットを「utf8」にセット
(ⅲ) 「wp_options」はインポートしない (データのエクスポートでwp_optionsを入れていなければ問題なし)
(6) WordPressの起動
MySQLへのデータのインポートが無事にでき、WordPressを起動しました。すると、再度wp-config.phpのウイザード画面が開き、ブログタイトルとメールアドレスを聞いてきました。画面に従い、再度設定すると、文字化けすることなくWordPress2.6.2が起動しました。再度wp-config.phpのウイザード画面が開いたのは、wp_optionsをインポートしなかったためであると思いますが、wp_optionsをインポートしないことで画像がうまく表示されたと考えられます。というのも、エクスポートしたデータファイルの中身を見ると、画像データは絶対URLでファイルの場所を参照しているためです。どこかで絶対URLを変える作業が必要になりますが、これがその作業ではないかと思われます。
別の工夫としては、丸ごとアップロードしたwp-contensの内容を参照できるようにするために、直接エディターの置換を使って、すべてのURLを変更するなども可能なのかも知れません。
(7) 最後の最後に
(6)までの作業で、管理画面内部の表示が、日本語から英語に変わったものの、文字化けもなく、、画像も表示されたのでようやく引越しが済んだと思いました。ところが、新規に記事を書いたり、コメントを書き込んでも、書けないことに気がつきました。はじめは、wp-contensディレクトリの書き込み権限の問題だろうと、権限を緩めたり、所有者を変更したりしましたがそれでも書き込めません。このときは、せっかくここまでできたのにまた、はじめからやらなくてはいけないのかと落胆しました。
それでも、WordPressのバージョンを2.6.2の最新バージョンまであげたので、今度は、WordPressのエクスポート機能を使って、データのバックアップをとり、そのファイルを使い、再度、新規にインストールしたWordPressにインポートしました。この作業で注意したことは、いったんインポートされたwp_optionsをWordPressを起動する前にphpMyAdminで削除して、再度WordPress側でwp_optionsファイルを作らせることです。これによって、ようやく、引越しを終えることが出来ました。
(追伸) この引越しによって、カテゴリまではちゃんと移転できませんでした。これは、手作業で直すことにしました。