[PHP]指定した日時まであと何日(何時間)あるかを調べてカウントダウンする

タイムセールやイベント告知などで指定した日や時刻まで後どのくらい期間があるかを計算したい場合、DateTime クラスの diff() 関数を使うと簡単に得ることができます。
DateTime クラスは日時計算や整形出力に関するクラスです。下記サンプルの実行には PHP 5.3 以上が必要です。
2038年問題にも対応する関数なので今後必須になってくると思います。

<?php
date_default_timezone_set("Asia/Tokyo");

$datetime = new DateTime('2030/01/01 00:00:00');
$current  = new DateTime('now');
$diff     = $current->diff($datetime);

printf('残り %d年%dヶ月%d日 %d時間%d分%d秒(%d日)',
	$diff->y, $diff->m, $diff->d, $diff->h,$diff->i,$diff->s, $diff->days);
実行結果: 残り 15年8ヶ月13日 9時間49分8秒(5736日)

DateTime クラスをインスタンス化する際に、日時を引数として渡します。省略した場合は現在の日時が入ります。(デフォルトは「now」)

diff() はオブジェクトを返し、プロパティとして y や h などの日時を持ちます。

[PHP]ファイル容量(Byte)をメガバイト(MB)、ギガバイト(GB)などの単位で表す

PHP の関数 filesize() などで取得したファイルサイズの単位はバイトなので、容量に合わせてメガバイト、ギガバイト、テラバイトなどの単位系で表すために関数を作りました。
1KB = 1024B の計算で、桁数によって単位が切り替わります。

引数は、byte_format(容量, 小数点以下の桁数, カンマ区切り) となっています。

登録されている単位を超える場合は「1000PB」のようになります。
環境によってはあまり大きな数値を扱えない可能性があります

<?php
$size = 109951162777600;
echo byte_format($size, 2, true);

function byte_format($size, $dec=-1, $separate=false){
	$units = array('B', 'KB', 'MB', 'GB', 'TB', 'PB');
	$digits = ($size == 0) ? 0 : floor( log($size, 1024) );
	
	$over = false;
	$max_digit = count($units) -1 ;

	if($digits == 0){
		$num = $size;
	} else if(!isset($units[$digits])) {
		$num = $size / (pow(1024, $max_digit));
		$over = true;
	} else {
		$num = $size / (pow(1024, $digits));
	}
	
	if($dec > -1 && $digits > 0) $num = sprintf("%.{$dec}f", $num);
	if($separate && $digits > 0) $num = number_format($num, $dec);
	
	return ($over) ? $num . $units[$max_digit] : $num . $units[$digits];
}
実行結果: 100.00TB

[PHP]PHPを始めた頃に思っていた細かい疑問

「まず何から始めればいいのか」

当然ですが PHP を扱うには PHP を実行できる環境を手に入れなければなりません。
要するにサーバーです。レンタルサーバー上で実験的なプログラムを実行して練習するのは極めて危険な行為なので、基本的には手持ちのパソコンの中にサーバー環境を作ります。
Windows なら XAMPP を、Mac なら MAMP をインストールすれば簡単に構築できます。
どちらも無料です。MAMP の PRO 版は有料ですが無料版でも十分です。


「テキストエディタ?統合開発環境?」

ソースコードを書くにはテキストエディタか統合開発環境(IDE)が必要になります。
どちらを選べばいいかは迷うかもしれませんが、まずはテキストエディタです。
最終的には併用する形になるかもしれませんが最初の頃に IDE が必要になることは有りません。

[参考]
Windows 用テキストエディタの比較
Mac 用テキストエディタの比較


「文字コード、改行コードは何を使う?」

多くのテキストエディタは文字コードを選択できます。
日本語扱う以上 UTF-8、Shift-JIS、EUC-JP、ISO-2022-JP というのが何のことなのか調べておいて下さい。
ソースコードを書く時、特別なケースを除けば「UTF-8」です。「UTF-8N」「UTF-8(BOMなし)」という選択肢があるならそれを選べば問題有りません。「UTF-8(BOM)」を選んではいけません。

改行コードは「LF」に統一した方がいいですが、おそらく FTP ソフトでアップロードするときに自動的に統一されると思うのであまり神経質にならなくても良いと思います。


まずは「Hello, World!」

どんな解説書でもとりあえずはこれです。
下記ソースコードをファイルに保存して実行して下さい。

<?php
echo 'Hello, World!';

実行と言われても・・・という人はブラウザのアドレスバーに「http://localhost/(ファイル名)」を入力してアクセスするだけです。
ファイルをどこに保存するのかは XAMPP なのか MAMP なのかによります。
詳しくは「Document Root」という単語で検索して下さい。


「ソースコードの終わりは『?>』をつけるべき?」

ソース全体が PHP の場合は基本的にはつけません。
HTML 文章の中で部分的に PHP を使う時だけつけます。

<title><?php echo $title;?></title>

「省略してもよい」というよりも「必要でない限り省略すべき」です。
php ファイルを include する際、「?>」以降の無意味な改行コードやスペースが混入するとヘッダーの出力などに思わぬ悪影響を与える可能性があるからです。


何を作ればいいのか?

次の課題を順番にこなすのが良いと思います。

・「Hello, World」
・足し算&掛け算
・数値が 10 以上なら「OK」と表示
・1~10 の数字をループを使って表示
・「あいうえお」を foreach で一文字ずつ表示
・ランダムな挨拶文を表示
・ユーザー定義関数を使った足し算&掛け算
・アクセスカウンター
・一行ずつ追加で書き込める掲示板
・日記
・データベース(MySQL/PostgreSQL)を使った日記

入門者向け解説書で「メールフォームを作ろう」みたいなものが有りますが作ってはいけません。危険です。
「どうして?」と思うかもしれませんが、そう思っている間は手を出すべきでは有りません。


「英語が読めない」

英語だから読めないのでは有りません。専門用語だから読めないのです。
「Special relativity」を「特殊相対性理論」と日本語にしたところで意味までは理解できません。
プログラミングをする際に出てくる英語は簡潔で型通りです。
そのうち慣れます。

【頻出単語】

・invalid (正しくない/ルールに従っていない)
・failed (失敗した)
・required (~が必要)
・variable (変数)
・undefined (未定義の/宣言されていない)
・unexpected (予期せぬ/想定した型でない)
・fatal (致命的な/処理を中断せざるをえないほどの)
・syntax (構文上の/文法的な)
・denied (否定された/拒否された)

変数名や関数名、ファイル名にも英語を使いましょう。
ローマ字を使ってはいけません。


「インデントには何を使う?」

ソースコードを読みやすくするために半角スペースやタブを使って字下げをするのが一般的です。
半角スペースなら4つ入れるのが基本です。
私はタブの方が好きですがプロジェクト内で統一しましょう。
この話題は戦争の火種になりかねないデリケートなものなので他人に押し付けてはいけません。


「オブジェクト指向って何?」

あたかも難しそうな単語を使って初心者を震え上がらせようとするために作られた言葉です。
「クラスや関数が使えるようになるとプログラムが綺麗に書けるよ」という程度の意味だと思っておけば良いです。

律儀に Wikipedia を読んで「オブジェクト指向(オブジェクトしこう)とは、オブジェクト同士の相互作用として、システムの振る舞いをとらえる考え方である。」の一文で挫折しないで下さい。


「将来はマニュアルなしでもスラスラと書けるようになりたい」

駄目です。

プログラミングは入学試験ではありません。オンラインマニュアルが利用できる環境ならどんなプロフェッショナルでも参考にしています。
PHP 自体もバージョンが変われば仕様も変わります。定期的にマニュアルをチェックする癖をつけておかないとかえって危険です。