PHP

[WordPress] 記事の更新日を表示する

小ネタです。
Wordpressで使っているテーマが記事の「公開日」だけしか表示してくれないので、「更新日」も表示するよう修正しました。

結論から言うと以下のようなコードをテーマに埋め込むだけです。

<span title="公開日">
  公開日:<time itemprop="datePublished" datetime="<?php the_time('c');?>"><?php the_time('Y-m-d');?></time>
</span>
<?php if( get_the_time('Ymd') !== get_the_modified_date('Ymd')){ ?>
  <span title="更新日">
    更新日:<time itemprop="dateModified" datetime="<?php the_modified_date('c');?>"><?php the_modified_date('Y-m-d'); ?></time>
  </span>
<?php } ?>

続きを読む

[PHP] MySQLをPDOで操作する – 入門編 その3「モデル編」

※この記事は専門学校の講義用に作成されたものです

PDOはデータベースへのアクセスを抽象化してくれる非常に便利なライブラリですが、ある程度の規模のシステムになってくるとメンテナンス性を向上したくなりもう一段階、抽象化したくなる物です。最近人気のLarabelや、古くから利用されているCakePHPSymfonyなどのフレームワークには標準で搭載されている機能の簡易版を今回は学習がてらスクラッチで作ってみたいと思います。
続きを読む

[PHP] MySQLをPDOで操作する – 入門編 その2 「トランザクション」

※この記事は専門学校の講義用に作成されたものです

前回に引き続きPHPからMySQLを操作します。今回のテーマは「トランザクション」への対応です。トランザクションをマスターすれば、2つ以上のSQLを実行した際にいずれかの実行が失敗した場合でも、そのすべてを無かったことにできちゃいます。

データベースは堅牢に作ってあるとは言え、いつ障害など不測の事態が発生するか分かりません。データベースはユーザーの個人情報やお金など非常に重要なデータを扱うこともありますからうまく動作しなかった場合には元の健全な状態に戻して上げる必要があるというわけです。つまり、めちゃめちゃ重要なのです←語彙w
続きを読む

[PHP] MySQLをPDOで操作する – 入門編 その1

※この記事は専門学校の講義用に作成されたものです

今回はPHPからMySQLへ接続しデータの取得と追加の練習を行います。

データベースとのやり取りには様々な罠が待ち構えており、ちょっと書き損じた(設定を忘れた)だけでサービスが崩壊することもよくあります。誇張ではなく日常的に発生しており、例えばゲームやWebサービスがローンチしたとき、またはメンテナンスが開けたとき、サーバにまともにつながらずTwitterなどで話題になっているのを目にしますよね。またデータベースは個人情報はもとより、お金にまつわるデータも取り扱いますのでセキュリティにも気をかける必要がありますが、下手をすると漏洩や改ざんの温床になりかねません。

人類にデータベースは早すぎるのかもしれないと私もよく感じていますが、しかしながらこれらの事故の大半は「うっかりミス」だったりもします。情報をアップデートし続ける必要はありますが、基本や定石に忠実に従っていればトラブルを未然に防ぐことも可能です。このシリーズではそんな定石についてもおいおい取り上げていきたいと思います。

続きを読む

[PHP] アクセスカウンター用のRESTfulAPIを作成する – その2 DB版

前回作成した「アクセスカウンター」を、今度はデータベースに対応させてみます。裏側を変更するだけなので、表示はまったく同じです。

作戦としてはPHPにリクエストがある度にテーブルに1レコードずつ追加されていき、現在の値はレコード数を集計することでその都度算出したいと思います。毎回集計が発生するので実際の現場では使い物になりませんが、練習用としてはちょうど良いでしょう。

※この記事は専門学校の講義用に作成した物です。

続きを読む

[Quora] サーバ2台構成の場合、PHPのセッションの保存先はどうすれば良いの?

Quora回答シリーズです。

質問

Webサーバー2台でPHPのセッションを使いたいのですが、2台が共通で参照できる領域がありません。DBは負荷の懸念があるので避けたいのですが他に何か方法はありませんか?
https://qr.ae/pNy6h8

回答には書きませんでしたが、以下のようなことも念頭に置いて考える感じですかね。

  1. サーバが落ちた時にセッションに保存したデータが消えても良いか
  2. トランザクションに対応する必要があるか
  3. DB上のデータと連係する必要があるか

あとPHPは最初からmemcahedにセッション情報を保存する機能が付いているのでこれを使うのも手ですかねぇ。

続きを読む

[HTML5] Fetch API でファイルをアップロードする

正直、ファイルのアップロードは考慮すべきことが多すぎてあまり関わりたくないのですが、そうも行かないのが世の定めw 今回はFetchAPIを利用してサクッとファイルをアップする手法についてまとめます。

サーバ側はPHPで実装しますが、考え方は他の言語でも流用できるのではないかと思います。
続きを読む

[HTML5] Canvasを画像に変換しサーバへ送信する

Canvasに描画した内容を画像としてサーバへ送信し、そのままサーバに保存してみます。

今回は入力したテキストがそのままCanvasに描画される簡単なサンプルを用意しました。文字色と背景色もおまけで変更できます。もう少し頑張るとバナー画像ジェネレーターとか作れそうですね。

サーバ側のプログラムはPHPを採用していますが、他の言語でも似たような処理になります。
続きを読む

LAMP環境をAWS Lightsailで新規に構築する

今回はAWSで気軽にVPSサーバを立てることができるLightsailで、LAMP環境を構築してみます。1台のサーバにWebとDBが同居する形の非常にシンプルな物です。

もともとAnsibleで自動化しようと思ってタスクを洗い出していたのですが、せっかくなのでブログにも残しておきます。
続きを読む

[Apache] mod_cacheで動的なコンテンツをキャッシュする

動的なコンテンツをPHPやPython、Rubyなどで生成しているサービスはたくさんありますが、すべてを毎回最新の情報に書き換える必要は無い場合も多いでしょう。一定時間は許容されたり、同じ情報を複数のユーザーで共有することも場合によっては可能なはずです。

そんなときにApache側で一定時間ファイルにキャッシュしてくれる機能を利用すると大変手軽に実装できます。
続きを読む

[Apache] バージョン情報を出力しない

本番用のWebサーバでは利用しているソフトウェアのバージョン情報を表示しません。
例えば何らかの事情で最新版を利用していないことがわかると簡単に脆弱性を突かれてしまいます。また直接的に攻撃をされなくともクラックのきっかけになりますので不要な情報を第三者に公開すべてきではないというのがセオリーです。

そこで今回はApacheとPHPのバージョン情報を出力しない設定を施したいと思います。
続きを読む

GitHub APIでIssueを操作する with PHP

GitHubへ一度に大量のIssueの登録をしなければならない、プロジェクト開始時などよくあるシチュエーションかと思います。10件や20件程度なら手作業でも良いのですが、数十個を超えてくるとさすがに人間でやるのは大変すぎるので機械にお願いしたいところ。

今回はGitHub APIをPHPから利用し、Issueの登録と更新、一覧の取得を行いたいと思います。

GitHub API

GitHubには開発者用に各種APIが整備されており、RESTful APIGraphQLを用いて様々な操作を行うことができます。

おとこらしくcurlなどで実装してもよいのですが、すでに公開されているライブラリの中から好みの物を用いてIssueの操作を行います。本来の目的は楽をするはずなのに、ここで苦労してはよくわからないことになりますしねw


続きを読む

GoogleAppsScript(GAS)のIPアドレス範囲を調べる

GASからUrlFetchApp.fetch()した場合にどのIPアドレスからリクエストが来るか事前に知りたい場合がありますよね。社内や身内だけで使っているクローズドなサーバなどでです。今回はこの調査方法についてまとめます。
続きを読む