PHP – メモリ使用量を取得する

メモリの取得に外部コマンドを実行する必要があるかと思ったらmemory_get_usage()みたいなのがあるんだな

<?php
print_r(memory_get_usage());
echo PHP_EOL;
$array = array();
for ($i = 0; $i < 100000; $i++) {
$array[] = $i;
}
print_r(memory_get_usage());
echo PHP_EOL;

実行するとこうなる

$ php test.php
225192
14874264

PHP – 月末を取得する

月末を取得するにはこうする

echo date('Y-m-d', mktime(0, 0, 0, date('m') + 1, 0, 2015));

月の数値が求めたい月の+1となるところがポイントだな

PHP – 多次元配列を再帰的に最速(多分)で回したい

array_walk_recursive()を使えば多次元配列の要素に対してforEachみたいなことができる。注意したいのはkeyとvalueのセットになる項目に対してということだな。本当に要素に対してって感じで、詳しくは実行結果をみてもらうと言いと思う。

<?php
$array = [
'やばいおじさん' => [
'年齢' => '55',
'職業' => '無職',
'趣味' => 'パチンコ',
'子孫' => [
'頑張る子供1' => [
'年齢' => '37',
'職業' => '会社員',
'趣味' => 'ゴルフ',
],
'頑張る子供2' => [
'年齢' => '35',
'職業' => '会社員',
'趣味' => '囲碁',
'子孫' => [
'清い子供' => [
'年齢' => '17',
'職業' => '学生',
'趣味' => '勉強'
],
'清い子供2' => [
'年齢' => '16',
'職業' => '学生',
'趣味' => '勉強'
]
],
]
],
'裕福なおじさん' => [
'年齢' => '55',
'職業' => '会社員',
'趣味' => '資産運用',
'子孫' => [
'悪い子供1' => [
'年齢' => '20',
'職業' => '無職',
'趣味' => '徘徊'
]
]
]
]
];
array_walk_recursive($array, function($value, $key) {
echo $key . $value . PHP_EOL;
});

実行すると

$ php test.php
年齢55
職業無職
趣味パチンコ
年齢37
職業会社員
趣味ゴルフ
年齢35
職業会社員
趣味囲碁
年齢17
職業学生
趣味勉強
年齢16
職業学生
趣味勉強
年齢55
職業会社員
趣味資産運用
年齢20
職業無職
趣味徘徊

使えるシーンとしてはまあ多次元配列の要素を使って前処理したいとか。mapじゃないので値返ってこないので、そこだけ注意だな。

Macにphp-gdを入れたい

MacのデフォルトPHPphp-gd入ってなかった。yum使えないしどうするか。。。と悩んでいたら、よくわかんないんだけどPHP5.6インストールすればいいよっていう情報があって私はそれの真似した。手順でこけたのでメモっておくw

まずこうしてインストール

curl -s http://php-osx.liip.ch/install.sh | bash -s 5.6

そして.bashrcでexport

export PATH=/usr/local/php5/bin:$PATH

パス通すの忘れちゃうと古いやつが使われちゃう

Macで左クリックが使えなくなった

Macbookで左クリックが使えないンゴ…。PMCのリセットとかいろいろ試したがLogicoolのマウスが暴走していただけのようだ。ずっと左クリック長押しの信号のようなものが送信されていたってわけだな。結論としてマウスの電源を切って解決したw

┌(┌՞ਊ՞)┐キェァァァェェェェァァァww

PHP – ファイル名とサイズを指定して画像の一括リサイズ

Macには画像変換をするsipsというコマンドがある。これを使うのが一番楽だと思うけど、WindowsとかLinux環境でも実行できるものを作るという話があったので作った。

<?php
$resizePlan = [
'携帯壁紙.png' => '1080x1920',
'iPad壁紙.png' => '1536x2048'
];
list($width, $height) = getimagesize("original.png");
foreach ($resizePlan as $name => $size) {
list($resizeWidth, $resizeHeight) = explode('x', $size);
$image_p = imagecreatetruecolor($resizeWidth, $resizeHeight);
$image = imagecreatefrompng("icon.png");
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $resizeWidth, $resizeHeight, $width, $height);
imagejpeg($image_p, 'assets/' . $name, 100);
}

使い方は簡単で以下のように、このPHPファイルとフォルダと元画像original.pngを設置する

$ tree
.
├── assets
├── original.png
└── resize.php

同じ階層へ移動して

php resize.php

と実行するだけ。Macであればsipsを使ったほうが遥かに楽だけどね。

JavaScript – ページ内のCSSファイルを取得する

CSSをリアルタイムに更新するみたいなことを実現したい時に使えるかも。仕組みはlink要素を全て取得しrel属性にstylesheetと定義されたものをfilterで絞ってからforEachで回してhref属性を出力してるよ

Array.prototype.filter.call(document.getElementsByTagName('link'), function(img) {
return img.getAttribute('rel') === 'stylesheet';
}).forEach(function(img) {
console.log(img.getAttribute('href'));
});

Webページのコンテンツを抽出する時に正規表現を使うより、DOMを扱えるライブラリを使ってこういう風に処理したほうがより確実な結果が得られると思う

JavaScript – onloadを任意のタイミングで実行する

onloadを手動で実行したいケースはないか。例えば最初からscriptが設置されていれば動くが、何らかの事情で後からscriptを埋め込んで、強制的にonloadを実行させたいパターンがデバッグ目的とかであるかと思う。

対策として一番簡単なのは、onloadを設定する時にcallbackを変数などに格納しておき、デバッグコンソールからその変数を実行して強制的に動かす方法。

var onloadFunctions = [];
var setOnload = function(callback) {
onloadFunctions.push(callback);
window.addEventListener('load', callback, false)
};
var runOnload = function() {
onloadFunctions.forEach(function(func) {
func();
});
};
setOnload(function() {
console.log('hoge');
});

こうしておけばonloadとしても動くし、デバッグコンソールからrunOnload()と打ち込んで手動で実行させることもできる。

JavaScript – バイト数をKB MB GBなどに変換する

参考にさせてもらったのはこれ。かなり分かりやすかったぞ。

qiita.com

いろいろ端折っちゃったけどこんな感じ

var formatBytes = function(bytes) {
var units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
var exp = Math.floor(Math.log(bytes) / Math.log(1024));
var result = (bytes / Math.pow(1024, Math.floor(exp)));
return (result < 0 ? '-' : '') + result.toFixed(2) + units[exp];
};

変なところあったら教えて