コンテンツへスキップ

今回、PHPを学び直したいと思った
1番の理由を突き詰めると
実はPHP5とPHP7の違いってより
これまではPEARライブラリを活用してたのが
これから使ってく自信を失ったせいだ

今年になっていきなり
GIGAZINEの記事で良からぬニュースを読んで・・・

PHPライブラリサービスの「PEAR」でセキュリティ侵害が見つかる

その後どうなったのかと気になってたら
下記の記事が決定打となって・・・

PHP7.4ではPEARがインストールされなくなる

PEARとの決別を決心!

そもそもサーバのPHPを5→7にしたら
それまで表示されてたモノが
空白になってしまったのが発端で
それと言うのもどうやら
MySQLからデータを拾ってこれなくなったようで
その時点でPEARを使い続けるかどうか
既に答えは限りなくNOに近かったのだがね

そういうワケで
MySQLからデータを拾ってくるのに
PEARを使わずにやるってのが
1つ目の課題

WordPressからアップした以下の投稿の本文を・・・

人間は考える葦である

別サイトの次の該当ページに表示したいのだ

筑摩世界文学大系【13/19】デカルト パスカル

以下の書籍のP212~を参考に・・・

よくわかるPHPの教科書 PHP7対応版

まずはデータベース接続のための共通プログラム
dbconnect.phpを作成

<?php
try {
    $db = new PDO('mysql:dbname=データベース;host=接続先ホスト;charset=utf8', 'ユーザ名', 'パスワード');
} catch (PDOException $e) {
    echo 'DB接続エラー:'. $e->getMessage();
}
?>

WordPressの記事の
タイトル(post_title)と本文(post_content)は
同じ wp_post テーブルにあるので
そのテーブルの該当記事のIDを指定して
1行分のデータを取得して
表示するためにHTMLから呼び出す

<div class="wp">
<?php
    require('dbconnect.php');

    $contents = $db->query('SELECT * FROM wp_posts WHERE ID=1'); // ID指定
    $contents->execute();
    while ($row = $contents->fetch()) { // 1行分のデータ取得
?>

<h4><?=$row['post_title']?></h4>
<div class="wp_post"><?=$row['post_content']?></div>

<?php
    }
?>
</div>

WordPressの記事がHTML内に表示された♪

こんな簡単でいんだ?!

なんだ、PEARなんか全然必要なくね?

所有してるPHPの入門書やサンプル集が
PHP5のモノしかなくて
関連書籍(PEAR、Smarty等)にしても
10年以上前の本ばかりだったので
PHP7の教則本を購入してみた

PHP7+MariaDB/MySQL マスターブック

よくわかるPHPの教科書 PHP7対応版

はじめてのPHPプロフェッショナル開発 PHP7対応

PHPしっかり入門教室

ITエンジニアになる!チャレンジPHPプログラミング

2018年以降に出版されてるって条件で
とりあえず5冊を厳選

と、表紙の可愛さに負けたこれもw

誰もがあきらめずにすむPHP超入門

これも2018年に出てるので条件は合ってるけど
さすがに今更、「知識ゼロ」からの「超入門」なんて
どうかと思いつつも安かったし
実際、何かちょっと確認したい時に
手元にあると便利そう

先日、テストページの段階では
とりあえずのカンジで
日毎の写真が入ってるディレクトリ内の
画像(のサムネイル)を一覧表示させてみた

しかし
実際問題として
撮影日時の分だけページを作るなんて
つまり月に10ページだとしても
1年間で120ページも作るとしたら
ほぼコピペするにしても
それはメンドウに思えてきて
やめたw

そしてディレクトリの仕分け単位を
日毎から月毎に変更したが
それでも丸2年で24ページも作らねばで
コピペ率を最大限にしてみた

換言すれば
コピペして作った新しいページには
西暦年の数字4文字と月を表す数字2文字の
2ヵ所だけ書き換えればよくした

以下がそのページのソース

<?php
$url = ("https://asena.site/hachikuma/");
$year = "2018";
$month = "05";
$ym = "$year/$month/";
$dir = ("/~絶対パス~/hachikuma/");
include("header.inc");
?>
<h3><i class="fas fa-camera"></i> <?=$year?>年<?=$month?>月の写真 <i class="fas fa-camera"></i></h3>
<table>
<?php
// 画像ファイルの場所
$dir = dir("$dir$ym");
$url = ("$url$ym");
// 指定場所の画像を一覧表示
while ($gazo = $dir->read()){
    $path = $dir->path . "/" . $gazo;
    if (@exif_imagetype($path)){
        echo "<tr><td><a href=\"$url" . $gazo . "\" target=\"_blank\"><img src=\"$url" . $gazo . "\" title=\"$gazo\" width=\"100%\"></a></td></tr>";
    }
}
$dir->close();
?>
</table>
<?php
include("sidebar.inc");
include("footer.inc");
?>

これでページを丸っとコピペして
3行目に西暦年、4行目に月を入力するだけで
月毎の画像一覧が生成されるるる~

「はちとくま」サイトの
トップページ
のサイドバーから
各月の写真一覧ページにリンクした♪

これからはデバイスからPCに
写真を取り出して
適宜、リネーム&リサイズ等をしたら
あとは撮影日時に従って
サーバのディレクトリにアップするだけで
勝手に一覧表示してくれるるる~

もちろん、既にアップされてる写真は
WEBページで確認できるので
ダブってアップするコトもなくなり
凄い便利になった!

リンク一覧も
サイドバーにあるので
同じファイルをincludeで表示してて
(ヘッダーやフッターもだけど)
新しいページを追加する際に
書き加えるリンク先も
サイドバーのファイルへの一行のみ

手動で更新する方法の中で
最もらくちんにできたと思われ^^

各ページへのリンク先一覧は
カレンダー表示の仕様にするはずだったけど・・・

当てにしてたプログラムがエラー出まくりで
結局、まともに動かなかったから
これで落ち着いてよかった

と、思う反面
エラーに対処しきれなかったのは
そこまでの実力が無かったってコトなので
悔しい!

このままにはせず
これを機にPHP7を習得しよう!!

そもそも苦手というか
イマイチわかってなかった部分を
これまではその場凌ぎでなんとかしてきたけど
それじゃダメなんだよな、本トは・・・

「思うように出来て、ちゃんと動いた」で終わらせず
セキュリティとかもしっかりやりたいね

昨日の続き
表示画面以外の部分を作ろうと・・・

古い本を引っ張り出してきて・・・

以前、動作確認をした日記アプリを
夜を徹してせっせこ作った

CD-ROMが付いてたはずなれど
どこを探しても見つからなかったので
仕方なく基本動作の5つファイルを
エディタに手打ちしたワケだが・・・

Σ(゚д゚lll)ガーン

もちろん
すんなり行くとは思ってなかったにせよ
エラーさえ教えてもらえず
門前払いされるとはね

長らくサイトを作成してきたが
HTMLのページは
タグをエディタに手打ちしてるるる~

PHPやJavaScriptなんかも
適宜、使ってきた

頻出する語を
ページの先頭で変数に定義して

<?php
$url = ("https://asena.site/");
$author = ("モモイロオオカミろーず");
?>

それをページ内で

<?php echo $url; ?>

とか

<?php echo $author; ?>

で表示したりね

これが最新(2019年)の環境下では

<?=$url?>

<?=$author?>

に省略できるるる~

毎度、必ず使うのに
コピーライトの西暦表示なんてのがあるが・・・

<?php echo date("Y"); ?>

これを応用して
現在の年齢もPHPだと1行で自動取得可能だ
(1968年8月20日生まれの場合)

<?php echo floor((date('Ymd') - 19680820)/10000); ?>

年齢表示を更に発展させて
今回は猫らが何歳何ヵ月かを
自動取得するプログラムを作ってみようかと

何歳かってのは
上記プログラムと同じでOKかな?

2017年5月10日生まれなので
本日の日付を8桁の数値で取得して
20170510を引いて
10000で割って
小数点以下を切り捨て

<?php echo floor((date('Ymd') - 20170510)/10000); ?>歳

あと何ヵ月かは
本日が何月かを取得して
誕生月を引けば良いと思われ

でも5月だったら0になって
1月~4月だったらマイナスになってしまうから
その場合は12を足せば良さそう???

<?php
$now = date("m");
$birthmonth = ($now - 5);
if($birthmonth < 0){
    echo ($birthmonth + 12);
} else {
    echo ($birthmonth);
}
?>
ヵ月

追記。。。5月になってから
間違いに気付いて作り直したwwww