_onichannn

PHPのfile_get_contents()とreadfile()の違い。

前も調べた気するけど忘れないように一応メモ。

■file_get_contents()

一度変数にぶち込むのでメモリを喰う。
数万?数十万行とかあるファイルを読ませるとmemory_limitにぶち当たる。

■readfile()

読み込むと同時に標準出力するのでメモリを気にしなくていい。
「out of memory」エラーが出る場合は、ob_get_level()で出力バッファリングを無効にすればよい
※公式より

jQueryでHTML5のdata属性を扱う方法。

jQueryで要素を指定する際、IDやクラス以外で選択したい場合に便利。

data属性は下記の通り、ハイフン以降に任意の文字列を設定することで利用できる。

<div data-hoge="huga">piyo</div>

例えば上記の「data-hoge」属性にアクセスしたい場合は下記の記述でアクセスが可能。

$('div').data('hoge');

また以下のように、data属性に対しオブジェクトを代入することで複数の値を一度に管理できる。

<div data-info='{"my":"banana","favorite":"apple","fruit":"orange"}'>自己紹介</div>

アクセスする際は下記の通り。

$('div').data('info').my;
$('div').data('info').favorite;
$('div').data('info').fruit;

そして最後にjQuery側からdata属性を設定する方法。
これは普通にattr()関数を用いて設定すればよい。

$('div').attr({
    'data-hoge': 'huga',
    'data-info': '{"my":"banana","favorite":"apple","fruit":"orange"}'
});

Javascriptにて無名関数を即座に実行する方法。

自分用メモ。

極めて文法的なお話。

まず無名関数の基本。

var func = function(){
    // 処理
};

上記は無名関数を変数funcに代入した際の例。
実行する際は以下のように記述する。

func();

ところで、この例のように無名関数はいったん変数に詰め込んでやらないと実行できないのだろうか。
答えは否である。但し文法に注意する必要がある。

まずは普通にfuncの部分をまんま無名関数に置き換えてみる。

function(){...}();

が、これは文法的にNGとされる。ではどうすればよいか。
答えは下記の通り。

(function(){...})();

これで望みどおりの挙動を実現する事が出来る。
「function(){}」自体をもう一度括弧「()」で囲うのがポイント。
引数を渡す際も通常通り、最後の括弧に変数を入れてやればよい。

例)

(function(){...})(this);

この書き方を上手に応用すると、Ajax処理のコールバックに、オブジェクト内の関数を指定することが出来たりする(いわゆるクロージャ?)。
Javascriptは本当に奥が深い。

jQueryにて変数の型を判定する。

メモ。

$.type()関数を用いる。

var obj = {};
var res = $.type(obj);
console.log(res);
↓
// object

今回はオブジェクトの型判別に利用したが、他にもstring、number、boolean、arrayといった型の判別が可能。

PHPにてgetaddrinfo failedにぶち当たった。

例えばfile_get_contentsでURLを指定した時。
sshからphpを叩くと正常に返ってくるのにapacheを通したブラウザから叩くと下記のようなエラーになる。

php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution

これが調べたけど全然解決しない。ただ分かったことはDNSの名前解決周りでこけているであろうという事。

視点を切り替えapache、DNSといったキーワードで調べていると、HostnameLookupsをどうのこうのという記事を発見。
そこでhttpd.conf内にあるHostnameLookupsの項目を調査してみたところOffになっているではありませんか。
とりあえず下記のように設定をOnに変更しhttpdを再起動。

HostnameLookups On

するとapacheを介してもfile_get_contentsが動いた!やった!!けどクッソ遅い!!!なんで!!!!
再度調査開始である。今回はapache、遅い、で検索すると意外とすんなりヒット。
しかし見つけた記事はといえば、HostnameLookupsをOffにしろと書いているではありませんか。
いやいや、それやるとネットワークが外でていってくれないんすよ、とか思いつつとりあえずやってみる。

変更後httpdを再起動してアクセスしてみると、あれ?ちゃんと動いてる。しかも早い!なんで!!
エラー吐いて終わるだろうと予想していたのに、じゃあ最初の状態はなにがよろしくなかったんすかね…。

これがまれによくある気にしちゃいけないヤーツーである。
※原因が判明し次第まとめよう。笑

ExcelでIF文を入れ子にする。

メモ。

=IF(論理式, [真], IF(論理式, [真], IF(論理式 [真], [偽])))

各式の[偽]にもう一回IFを入れてやればいいだけ。これは案外普通。

Excelにて現在の行数を求める。

メモ。

=ROW()

これで現在の行数が帰ってくる。
今回使ったのは100行毎の処理を書きたかったので下記のような使い方をした。

=MOD(ROW(), 100)

これで、割り切れた時、余りが1の時、それ以外時の処理を分岐させることが出来た。

Excelにて割り算のあまりを求める。

嵌ったのでメモ。

=MOD(10, 3)
↓
1

わざわざ関数使うのかよ!「%」じゃねぇのかよ!笑
ついでに比較演算子の等号も使い方が違うので注意。

例えば、

=MOD(10, 3) == 1
↓
error

=MOD(10, 3) = 1
↓
TRUE

等号一つでいいのかよ!いろいろと勝手が違うな…。

非常にやきもきしたひとときであった。