【PHP】ファイル操作を行う際の注意メモ。

自分用。

ファイルの最終更新時間をtouch()などで更新した後、再度取得する際はファイルのステータスキャッシュをクリアしてやる必要がある。

$filePath = '/path/to/targetFile.ext';

echo date('Y-m-d H:i:s', filemtime($filePath))."\n";

touch($filePath);

echo date('Y-m-d H:i:s', filemtime($filePath))."\n";

clearstatcache();

echo date('Y-m-d H:i:s', filemtime($filePath))."\n";
↓
2013-08-24 09:27:54
2013-08-24 09:27:54
2013-08-24 09:32:05

出力結果の2行目でもわかる通り、touch()にてファイルの最終更新日時を変更しているにもかかわらず、キャッシュの所為で更新前の値が取得されてしまっている。
ファイル操作周りの関数を実行した後は、正しい値を取得するためにもキャッシュの挙動には十分注意されたし。

ちなみにtouch()で最終更新日時を更新できることを始めて知った。

【PHP】round()で少数を丸める際、指定できるオプションまとめ。

浮動小数点をround()で丸めた時、通常は四捨五入された値が返されるが、第3引数に動作モードを指定してやることで、丸め方を指定することが出来る。

ちなみに第2引数は丸め込みたい桁数を指定する。

echo round(5.4); // 5
echo round(5.5); // 5
echo round(1.234567, 3); // 1.235
echo round(1234567, -3); // 1235000
echo round(5.5, 0, PHP_ROUND_HALF_UP); // 6
echo round(5.5, 0, PHP_ROUND_HALF_DOWN); // 5
echo round(5.5, 0, PHP_ROUND_HALF_EVEN); // 6
echo round(5.5, 0, PHP_ROUND_HALF_ODD); // 5
echo round(5.555, 2, PHP_ROUND_HALF_EVEN); // 5.56
echo round(5.555, 2, PHP_ROUND_HALF_ODD); // 5.55

モードの詳細は以下の通り。

定数 詳細
PHP_ROUND_HALF_UP 端数を切り上げ
PHP_ROUND_HALF_DOWN 端数を切り捨て
PHP_ROUND_HALF_EVEN 端数を偶数に丸め込む
PHP_ROUND_HALF_ODD 端数を奇数に丸め込む

「PHP_ROUND_HALF_EVEN」、「PHP_ROUND_HALF_ODD」に関しては多少理解しづらいかもしれないが、
値がど真ん中であれば偶数/奇数に丸め、それ以外は近い方に丸めるという処理が行われる。
よって5.4の場合、出力はいずれのモードであっても5になり、5.6であれば6ということになる。
5、5.5、12.55、など「.5」のように値が中央になりうる場面において、どっちに丸め込むかを指定することが出来るということである。

 

【PHP】文字列が全角漢字であるかを調べる。

正規表現で常用漢字かどうかを判断できるらしいので調べてみた。

$str = '山田五郎';
$regex = '^[一-龠]+$';
$res = mb_ereg_match($regex, $str);

var_dump($res);
↓
bool(true)

$regexの部分はよく「’^[亜-腕弌-熙]+$’」という指定方法が紹介されているが、UTF-8環境の場合上記のような指定にすることで全ての漢字にマッチさせることが可能とのこと。これは便利だね。

【CSS】リッチなデザインのボタンを生成してくれるサービス。

見つけたのでメモ。

ちょっとボタンが必要になったときに便利。

詳細は以下公式URLを参照されたし。
http://css-button-generator.com/

例えばこんなようなボタンが簡単につくれる。

hogepiyo

生成されたCSSは以下の通り。

.original-btn {
	font-size:22px;
	font-family:Arial;
	font-weight:normal;
	-moz-border-radius:42px;
	-webkit-border-radius:42px;
	border-radius:42px;
	border:0px solid #83c41a;
	padding:5px 40px;
	text-decoration:none;
	background:-webkit-gradient( linear, left top, left bottom, color-stop(35%, #9dce2c), color-stop(70%, #8cb82b) );
	background:-moz-linear-gradient( center top, #9dce2c 35%, #8cb82b 70% );
	background:-ms-linear-gradient( top, #9dce2c 35%, #8cb82b 70% );
	filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#9dce2c', endColorstr='#8cb82b');
	background-color:#9dce2c;
	color:#ffffff;
	display:inline-block;
	text-shadow:0px 0px 20px #689324;
 	-webkit-box-shadow:inset 0px 0px 0px 0px #c1ed9c;
 	-moz-box-shadow:inset 0px 0px 0px 0px #c1ed9c;
 	box-shadow:inset 0px 0px 0px 0px #c1ed9c;
}
.original-btn:hover {
	background:-webkit-gradient( linear, left top, left bottom, color-stop(35%, #8cb82b), color-stop(70%, #9dce2c) );
	background:-moz-linear-gradient( center top, #8cb82b 35%, #9dce2c 70% );
	background:-ms-linear-gradient( top, #8cb82b 35%, #9dce2c 70% );
	filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#8cb82b', endColorstr='#9dce2c');
	background-color:#8cb82b;
}
.original-btn:active {
	position:relative;
	top:1px;
}

colorTheme、border-radius、shadow、gradient、size、といったパラメーターをマウスで選択し、ボタンの文字列、クラス名、フォントを選択するだけで自動的にCSSを吐き出してくれるという神サービス。

これは相当便利。今後めちゃくちゃお世話になりそう。いや、なります。笑

 

【CSS】縦幅を画面表示範囲外も含め100%に設定する方法。

モーダルウィンドウを出す際、バックグラウンドにwidth, height, 100%でシャドウマスクをかけたかった時のメモ。

普通に{height:100%}だけだと最初に表示(レンダリング)されている部分の高さに対して100%なので、下にスクロールするとマスクがかかっていない。

なので下記のようにしてやるとうまくいく模様(検証済み)。

html,body {
   margin:0px;
   height:100%;
}
body {
   min-height:100%;
   height:auto !important;
}

importantが肝らしい。まぁ単純に優先度を高めることで、ブラウザのエレメントスタイルなどに左右されないための施策かと思われる。

以外とやりたい場面多いので忘れないようにしよう。

【PHP】サポートされているエンコーディング一覧を取得する。

前回の記事←に引き続き一覧取得系関数。

文字コード周りで嵌った時の手助けになりそう。

$list = mb_list_encodings();
var_dump($list);
↓
array(73) {
  [0]=>
  string(4) "pass"
  [1]=>
  string(4) "auto"
  [2]=>
  string(5) "wchar"
  [3]=>
  string(7) "byte2be"
  [4]=>
  string(7) "byte2le"
  [5]=>
  string(7) "byte4be"
  [6]=>
  string(7) "byte4le"
  [7]=>
  string(6) "BASE64"
  [8]=>
  string(8) "UUENCODE"
  [9]=>
  string(13) "HTML-ENTITIES"
  [10]=>
  string(16) "Quoted-Printable"
  [11]=>
  string(4) "7bit"
  [12]=>
  string(4) "8bit"
  [13]=>
  string(5) "UCS-4"
  [14]=>
  string(7) "UCS-4BE"
  [15]=>
  string(7) "UCS-4LE"
  [16]=>
  string(5) "UCS-2"
  [17]=>
  string(7) "UCS-2BE"
  [18]=>
  string(7) "UCS-2LE"
  [19]=>
  string(6) "UTF-32"
  [20]=>
  string(8) "UTF-32BE"
  [21]=>
  string(8) "UTF-32LE"
  [22]=>
  string(6) "UTF-16"
  [23]=>
  string(8) "UTF-16BE"
  [24]=>
  string(8) "UTF-16LE"
  [25]=>
  string(5) "UTF-8"
  [26]=>
  string(5) "UTF-7"
  [27]=>
  string(9) "UTF7-IMAP"
  [28]=>
  string(5) "ASCII"
  [29]=>
  string(6) "EUC-JP"
  [30]=>
  string(4) "SJIS"
  [31]=>
  string(9) "eucJP-win"
  [32]=>
  string(8) "SJIS-win"
  [33]=>
  string(5) "CP932"
  [34]=>
  string(7) "CP51932"
  [35]=>
  string(3) "JIS"
  [36]=>
  string(11) "ISO-2022-JP"
  [37]=>
  string(14) "ISO-2022-JP-MS"
  [38]=>
  string(12) "Windows-1252"
  [39]=>
  string(12) "Windows-1254"
  [40]=>
  string(10) "ISO-8859-1"
  [41]=>
  string(10) "ISO-8859-2"
  [42]=>
  string(10) "ISO-8859-3"
  [43]=>
  string(10) "ISO-8859-4"
  [44]=>
  string(10) "ISO-8859-5"
  [45]=>
  string(10) "ISO-8859-6"
  [46]=>
  string(10) "ISO-8859-7"
  [47]=>
  string(10) "ISO-8859-8"
  [48]=>
  string(10) "ISO-8859-9"
  [49]=>
  string(11) "ISO-8859-10"
  [50]=>
  string(11) "ISO-8859-13"
  [51]=>
  string(11) "ISO-8859-14"
  [52]=>
  string(11) "ISO-8859-15"
  [53]=>
  string(11) "ISO-8859-16"
  [54]=>
  string(6) "EUC-CN"
  [55]=>
  string(5) "CP936"
  [56]=>
  string(2) "HZ"
  [57]=>
  string(6) "EUC-TW"
  [58]=>
  string(5) "BIG-5"
  [59]=>
  string(6) "EUC-KR"
  [60]=>
  string(3) "UHC"
  [61]=>
  string(11) "ISO-2022-KR"
  [62]=>
  string(12) "Windows-1251"
  [63]=>
  string(5) "CP866"
  [64]=>
  string(6) "KOI8-R"
  [65]=>
  string(6) "KOI8-U"
  [66]=>
  string(9) "ArmSCII-8"
  [67]=>
  string(5) "CP850"
  [68]=>
  string(6) "JIS-ms"
  [69]=>
  string(7) "CP50220"
  [70]=>
  string(10) "CP50220raw"
  [71]=>
  string(7) "CP50221"
  [72]=>
  string(7) "CP50222"
}

【PHP】サポートされているハッシュアルゴリズム一覧を取得する。

ちょっと面白かったのでメモ。

普段md5かsha512くらいしか使わないけど、今後は積極的に色々とためしてみようかな。

$list = hash_algos();
var_dump($list);
↓
array(42) {
  [0]=>
  string(3) "md2"
  [1]=>
  string(3) "md4"
  [2]=>
  string(3) "md5"
  [3]=>
  string(4) "sha1"
  [4]=>
  string(6) "sha224"
  [5]=>
  string(6) "sha256"
  [6]=>
  string(6) "sha384"
  [7]=>
  string(6) "sha512"
  [8]=>
  string(9) "ripemd128"
  [9]=>
  string(9) "ripemd160"
  [10]=>
  string(9) "ripemd256"
  [11]=>
  string(9) "ripemd320"
  [12]=>
  string(9) "whirlpool"
  [13]=>
  string(10) "tiger128,3"
  [14]=>
  string(10) "tiger160,3"
  [15]=>
  string(10) "tiger192,3"
  [16]=>
  string(10) "tiger128,4"
  [17]=>
  string(10) "tiger160,4"
  [18]=>
  string(10) "tiger192,4"
  [19]=>
  string(6) "snefru"
  [20]=>
  string(9) "snefru256"
  [21]=>
  string(4) "gost"
  [22]=>
  string(7) "adler32"
  [23]=>
  string(5) "crc32"
  [24]=>
  string(6) "crc32b"
  [25]=>
  string(7) "salsa10"
  [26]=>
  string(7) "salsa20"
  [27]=>
  string(10) "haval128,3"
  [28]=>
  string(10) "haval160,3"
  [29]=>
  string(10) "haval192,3"
  [30]=>
  string(10) "haval224,3"
  [31]=>
  string(10) "haval256,3"
  [32]=>
  string(10) "haval128,4"
  [33]=>
  string(10) "haval160,4"
  [34]=>
  string(10) "haval192,4"
  [35]=>
  string(10) "haval224,4"
  [36]=>
  string(10) "haval256,4"
  [37]=>
  string(10) "haval128,5"
  [38]=>
  string(10) "haval160,5"
  [39]=>
  string(10) "haval192,5"
  [40]=>
  string(10) "haval224,5"
  [41]=>
  string(10) "haval256,5"
}

【jQuery】配下に指定された文字列を含む要素を取り出す方法。

めも。

例えばdiv要素の配下にhogeというテキストが存在している要素を選択したい時。

<div id="piyo">hoge</div>

以下のような記述で要素を指定する事が出来る。

var elem = $('div:contains(hoge)');
var id = $(elem).attr('id');
console.log(id);
↓
piyo

これは相当便利。
てかjQueryマジ便利。