Archives by date

You are browsing the site archives by date.

【PHP】ファイル、ディレクトリのパーミッションを取得する。

めも。

下記はファイル、ディレクトリ共にパーミッション777のもので実験。

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

$dirPerms = fileperms($fileDir);
$filePerms = fileperms($filePath);

var_dump($dirPerms, $filePerms);
↓
int(16895) int(33279)

但しfileperms()関数で取得できるパーミッション情報は、上記の通り10進数で表現されるため、普段見慣れている形式で取得したい場合は、8進数形式にフォーマットしてやる必要がある。

$dirPerms = substr(sprintf('%o', fileperms($fileDir)), -4);
$filePerms = substr(sprintf('%o', fileperms($filePath)), -4);

var_dump($dirPerms, $filePerms);
↓
string(4) "0777" string(4) "0777"

sprintf()の第1引数「%o」は引数を8進数にフォーマットするという意味。その後、substr()で得られた値の後ろから4文字を切り出すことで、見慣れた4桁のパーミッション表現を取得することが出来る。

 

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

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