カテゴリー別アーカイブ: php

htmlファイルを一行ずつ読み込み必要な部分だけを抜き出すphpコード

htmlファイル、特にそれだけで数百kbにも昇る膨大な量の物を読み込むとき、正規表現を利用するとかなりの負荷がかかる。

ochalog
【PHP】どどんとふチャットログ HTML ファイルからチャットログ部分を抽出する

htmlなど最初と最後の文章構成が決まっている場合、「fgets」を利用し一行ずつ読み込みそれを判定していくとかなり高速に処理できる。

一行ずつ読み込んでいく方法があったなんて知らなかったから感謝。これでテキストファイルの処理が早くなります。

/**
* どどんとふチャットログ HTML ファイルからチャットログ部分を取り出して返す
* @param string $filename ファイル名
* @return string チャットログ部分を含む HTML コード
* @return NULL 読み込みに失敗した場合
*/
function read_dodontof_chat_log($filename) {
# ファイルポインタを取得する
$handle = fopen($filename, 'r');
if ($handle === FALSE) return NULL;

$html_code = '';

# 必要な部分が出現するまで読み飛ばす
$body_start = '/^s*<body>/';
while (($line = fgets($handle)) !== FALSE) {
if (preg_match($body_start, $line)) break;
}

# 必要な部分だけ読み込む
$body_end = '|^s*</body>|';
while (($line = fgets($handle)) !== FALSE) {
# 必要な部分の外に出たら脱出する
if (preg_match($body_end, $line)) break;

$html_code .= $line;
}

# ファイルを閉じる
fclose($handle);

return $html_code;
}

body内部を抜き出すのが分かっている場合、preg_matchではなくstrposを利用するとさらに早くなる。
PHP: fgets – Manual

fgetsはfopenなどで開かれたファイルではないと動作しないそうなので注意。

google adsenseの広告をPC用とスマフォで振り分ける

サイトを運営していると、各閲覧環境である程度の見た目を保証しないといけなくなります。

google adsenseもその一つ。広告収入なんて雀の涙ですが、ある方がやはりやりがいが出ます。そのついでにこうやって記事のネタにもなります。

今回はphpで閲覧者のブラウザを判定してPC用とスマフォ用に振り分けて広告を表示しましょう。

参考にしたのはこちら。
[WP] wp_is_mobile と iPad と WP Super Cache の怖い関係 – @mekemoke

function is_mobile(){
$useragents = array(
'iPhone', // iPhone
'iPod', // iPod touch
'Android.*Mobile', // 1.5+ Android *** Only mobile
'Windows.*Phone', // *** Windows Phone
'dream', // Pre 1.5 Android
'CUPCAKE', // 1.5+ Android
'blackberry9500', // Storm
'blackberry9530', // Storm
'blackberry9520', // Storm v2
'blackberry9550', // Storm v2
'blackberry9800', // Torch
'webOS', // Palm Pre Experimental
'incognito', // Other iPhone browser
'webmate' // Other iPhone browser
'webmate' // Other iPhone browser
);
$pattern = '/'.implode('|', $useragents).'/i';
return preg_match($pattern, $_SERVER['HTTP_USER_AGENT']);
}

自分でユーザーエージェントをそれぞれ調べるのは大変だったので、大変助かりました。そのままお借りして、こうします。

function googlead() {
if(is_mobile()) { //携帯デバイス
$ad = <<<"EOD"
<div class="googlead">
<!-- aowork mobile -->
<ins class="adsbygoogle"
style="display:inline-block;width:320px;height:100px"
data-ad-client="ca-pub-6633816946643511"
data-ad-slot="9684763319"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
</div>
EOD;
} else {
$ad = <<<"EOD"
<div class="googlead">
<!-- aoringo worksS -->
<ins class="adsbygoogle"
style="display:inline-block;width:468px;height:60px"
data-ad-client="ca-pub-6633816946643511"
data-ad-slot="6565776112"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
</div>
EOD;
}

return $ad;
}

これでスマフォとPCで広告表示を変える事が出来ますね。広告以外にも、色々な場所で利用する事がでできるかと思います。

簡単に素敵なキャプチャーを設置できるphpライブラリSecurimageの設置方法

自作フォームを作る必要があったのですが、wordpressプラグインで利用するにはちょっと痒いところに手が届かないところが多く・・・手ごろなものを探していました。

続きを読む 簡単に素敵なキャプチャーを設置できるphpライブラリSecurimageの設置方法

PHPのdate()の出力で「Y2010」や「M04」のようなフォーマットにする方法

なんか上手い言葉が見つからない。

date()ではYmdとフォーマットを指定してやることで今日の日付が取得できる。20130206といったように。

で、例えば「Y2013 M02」と指定しようとすると「YYMm」と指定することになる。どうしたもんか、と思ったら普通にエスケープすればいいだけだった。とほほ。

YYMmといった具合に。

頭が凝り固まって煮こごりになっていたみたい★

wordpressでのphpプログラムでキャッシュが生成されないのぉぉぉぉおおおおお!!

pearを複数投入して簡単なwordpress上で動作するアマゾン商品一覧が出るプログラムを組んでいたのだけれど、どうしてもキャッシュが生成されない。

Manual :: Cache_Lite
WordPress で PHP で簡単にキャッシュファイルを作れる PEAR::Cache_Lite を使ってパフォーマンスを向上させてみた | ウェブル

この他いくつか参考にして簡単なプログラムを組んでみてもまったくファイルが生成されない。php単体では正常にどうさするが、wordpress上でやるとどうしてもダメ。なにか方法があるのかもしれないがお手上げでした。

正確には生成されているようなのだけれど、メモリ上かどこかに作っているいのか実体ファイルがいくらさがしても見つからない。

続きを読む wordpressでのphpプログラムでキャッシュが生成されないのぉぉぉぉおおおおお!!

投稿・更新時の$_POSTの中身

備忘録の意味合いが強いですが。

記事投稿時に飛ぶ$_postを少しのぞいてみました。ローカル環境なので実際どういうのが飛んでるのかは不明だけれど、ヒントにはなる。タグ関係の項目が二つあったりと用途がよくわからなかったりもするんだが、これは何なんだろうなあ。

続きを読む 投稿・更新時の$_POSTの中身