タグ「php」が付けられているもの


Movable Type 5.2.9

この開発日誌には書いていませんでしたが、一昨年頃?にMovable Typeを5に
アップデートしていました。単にプログラムを更新しただけでしたので、
記事は何も書いていませんでしたが。。。

さて、今月に入りやっとサイト運営にも手をかけられるようになりましたので、
そのMovable Type 5を最新版にアップデートしておきました。
合わせて、記事に付けてたランキング用バナーのところに、
新たにdtn開発日誌用のソーシャルリンクも貼り付けておきました。
まだどこも0件ですが、宜しければクリックして下さいませ。
social_link.gif


一年以上放置して死んでいたコンテンツを復旧させるのに、他にも色々と細かいところを
修正かけていたのですが、中でもAPIのレスポンスデータをパースするあたりを
大きく変更しておきました。

APIデータの連携部分は、PHP4だった頃に作ったものが多かったので、
xml_parser_create関数でXMLをパースし、foreach文でぐるぐる回して
↓のように要素を引っこ抜いたりしていたのですが、、、



$p = xml_parser_create();
$ERROR = xml_parse_into_struct($p,file_get_contents($q),$vals,$index);
xml_parser_free($p);
foreach ($val as $key1 => $val1){....}

とっくの昔にPHP5になっていたので、SimpleXMLが標準で使えるようになっていたので、
ニュースAPI、検索API等のXMLパースが必要だった部分を全て作り直しておきました。

SimpleXMLは使い方も楽で、何やら速度も速いような気がします。。。



$Result = simplexml_load_file($q);
//Yahoo検索APIのレスポンスから全レコード数を取得するときは↓でOK
$TOTAL = $Result -> SiteSearchResults -> attributes() -> TotalCount;

ただ、肝心のAPI提供がどんどん少なくなっているので、企業様方に
なんとか頑張っていただきたいなぁと思いますね。

被リンク数取得用php

dtnディレクトリでは、登録サイト様のSEOチェックツールを
オマケでご用意しておりました。
とは言いましても、単にMETAタグの情報を表示したり、
被リンク数と検索インデックス数を取得して表示させてただけですので、
ほとんど必要ない機能だとは思っていますが、、、

さて、久しぶりにこのページを見てみたところ、
どのサイトも被リンク数が0件となってしまっておりました。

数年前は各社の検索エンジンでは、検索APIを大盤振る舞いで
解放してくれていたので、被リンク数・インデックス数も
気楽にAPIで取得出来ていたのですが、Yahoo!、Googleも
検索用APIは次々サービス提供終了となってしまったようで、
どうやらレスポンスが何もない状態となっていたようです。。。

このままでは申し訳ないので、代わりの方法で数値を取ろうと思いましたが、
APIが無い以上、数値を取得するにはHTTP_Requestとかで
検索結果ページを丸っと取得して数値を引っ張るしかないかなぁ
とも思っておりました。
ただ、、、前にもやったことはありましたが、データ取得→数値引っこ抜きに
非常に時間がかかってしまうので、全くダメなんですよね。。。

という訳で、色々探してみたところ、公式にはサービス終了となった
Google Search APIがまだ使えるよということで、プログラム
公開している人がいたので、これで対応してしまいました。
これも近々使えなくなるとは思いますので、この先どうしましょうかねぇ。。。


function GoogleBL($domain){
	$url="http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=link:".$domain."&filter=0";
	$ch=curl_init();
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_USERAGENT,$_SERVER['HTTP_USER_AGENT']);
	curl_setopt($ch, CURLOPT_REFERER,"YOUR_REFERER");	//リファラ入れないとエラーになりました
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
	curl_setopt($ch, CURLOPT_HEADER, 0);
	curl_setopt($ch, CURLOPT_NOBODY, 0);
	curl_setopt($ch, CURLOPT_TIMEOUT, 30);
	$json = curl_exec($ch);
	curl_close($ch);
	$data=json_decode($json,true);
	if($data['responseStatus']==200){
		return $data['responseData']['cursor']['resultCount'];
	}else{
		return false;
	}
}

詳細はこちらでご確認を。

YouTube、ニコニコ動画の動画ID

先日のトラブル以来、画像掲示板プログラムの修正を続けております。
imgbbs_dtn_2012.gif
色々見直していると、突貫で作って放置してしまっていただけに、
もはや正常に動かなくなっていたり、最初から機能していなかった部分も
多々見つかり。。。なんともお恥ずかしいばかりです。
 
特に目立ったのは、YouTubeとニコニコ動画の動画IDを引っこ抜くあたりが
先方の仕様変更もあって、全然うまく動いていなかった気がします。
そこで、取り急ぎですが、この部分の修正作業をしてみました。
 
ちなみに。動画IDをプログラムで正確に抜き取りさえ出来れば、
HTML中に小窓で表示させるのはIDはめ込むだけなので超簡単です。
こんな感じで縦横サイズも指定できてしまいます。



embed src="http://www.youtube.com/v/'.$動画ID.'" type="application/x-shockwave-flash" wmode="transparent" width="横サイズ" height="縦サイズ"


 
さて、少々手間なのが、この動画IDをURLから抜き取る作業です。
YouTube、ニコニコ動画共に、動画を見ている時のブラウザURLを見ると、
パラメータが山ほどくっついてたりして、そこから動画IDだけ抜き取らなければ
いけないので、これが少々厄介です。
かといって、投稿時に『sm00000000』や『v=XXXXXXX0XXX』みたいな部分だけを
コピペして下さいというのも手間だったり、ミスも多いと思うので、
正規表現使ってIDだけ引っこ抜く必要があります。
という訳で、あれこれやってこんな形になりました。


preg_match('@[&?]v=([^&]+)|be/(.+)$@',$URL, $match); //YouTube

preg_match('/[a-zA-Z0-9]{8,10}$/',$URL, $match);  //ニコニコ


ニコニコ動画の場合は、この前にパラメータ部分を消し去ったりもしてますが、
なんとか抜き取りできております。
また先方の仕様変更があったらダメになりそうですが、当面は大丈夫でしょう。
 
 
ところで。ここ最近のサーバートラブルの影響もあってか、
肝心の訪問者数が減りまくっておりまして、なんとも困った話です。
荒れるよりはマシかもしれないですが、寂しい話です。

掲示板に荒し対策をしました

先週になりますが、画像掲示板をふと見てみると、
全てのスレッド画像が異様な画像で埋め尽くされてしまっておりました。
imgbbs-arashi.gif
 
余所の画像掲示板でも、昔に似たような騒ぎがあったような記憶がありますが、
こんな過疎掲示板にも攻撃が来るとはさすがにちょっと驚きました。
と共に、プログラム制作の時間がなく、荒し対策処理をやっていなかったことを
心から後悔致しました。。。
 
さて、そうこうしてる間に、サーバーがますます不安定になってきたので、
仕事帰りで眠い目をこすりつつ、大急ぎでプログラムの見直し作業に着手しました。

どうやら連続投稿を制限していなかったこと、最大スレッド数(100スレッド)を
超えた際に最古データを削除していましたが、この削除処理機能に不具合があり、
投稿データが無限増殖していたことがサーバー障害の原因となっていたようです。
 
 
この対処を続ける間もDoS攻撃は続いており、まずは一旦httpdを落とし、
その間にプログラムを修正しつつ、異常な書き込みにより
削除されてしまった書き込みをバックアップから復旧するという、
激しいリカバリ作業をするはめになってしまいました。。。
 
朝方やっと落ち着いてきたようなので、httpd startさせてみましたが、
急いで作ったプログラムが不具合だらけだったのか、
昼間dfしてみた結果がまたまた悲惨なことになってました。。。


Filesystem    1K-blocks     Used   Avail Capacity  Mounted on
/dev/aacd0s1e  22020096 22****** 0    102%    /
/dev/aacd0s1e         1        1       0   100%    /skel
devfs                 1        1       0   100%    /dev
/dev/aacd0s1d         1        1       0   100%    /ports

再度、httpdを落とし、データをロールバックし直し、
プログラムに修正を施しまくりまして、やっと今日ぐらいに
サイトが落ち着きを取り戻してきた感じがします。

お陰様で、今回はcrontabファイルの中身が消えてしまったり、
他のファイル、サーバー全体への影響も予想以上に大きく、
過去いくつかの掲示板でも痛い思いはしてきましたが、
一番影響が大きかった気がします。
 
復旧までの数日間、一部の書き込みが消えてしまったりと、
ご利用者の皆様にも大変ご迷惑をお掛け致しました。
心からお詫び申し上げます。
 
仕事の関係で、サイト更新作業に時間をかけることが非常に困難であるので、
ユーザーさんのマナーに期待してサイト運営を続けてしまっておりますが、
中には悪意のある方がいることも十分肝に銘じ、
今後もサイト運営を継続していきたいと思います。
 
色々とご連絡下さった皆様、本当に有難うございました。
まずはこの場を借りまして、御礼申し上げます。

PHP Warning:file_get_contents

夕方頃にdtn.jpを見てみたところ、あちこちに仕込んだAPIのデータが
表示されてないことに気が付きました。
APIのデータが取れないので、人気検索語やニュース、
電力使用状況グラフもでないので、何やら素っ気ない感じです。
yahoo_api_down.png
 
dtnで使ってる、人気ランキングやニュース情報は、
Yahoo! JAPAN Webサービスを使って引っ張ってきているので、
Yahoo!のサービス自体が止まってるかとも思ったのですが、
公式ブログやtwitterを見ても特にそんな情報はなく。。
では、APIの使用回数制限に引っかかったかなぁとも思ったのですが、
この過疎サイトでそんなことある訳もなく。
 
という訳で、急ぎ色々と調べてみました。
 
すると、サーバのログにありました。PHP Warningが山ほど!
どうやらfile_get_contentsがエラーを吐いてるようです。


PHP Warning: file_get_contents(http://*****) [function.file-get-contents]: failed to open stream: no suitable wrapper could be found in /*****.php on line *****
 
 
今大風邪ひいてしまっててあまり正確には覚えていないのですが、
確か昨夜までは問題なく動いてた記憶もあるのですが....。
で、運営会社のメンテナンス情報を見てみると、サーバー緊急メンテはやったようですが、うちのと違うサーバー番号です。。でも、番号近かったから、
ついでに何か仕様変更でもしたのですかね。

さて、php.iniを確認すると、やはりallow_url_fopenがoffになってました。


allow_url_fopen Off

 
という訳で、これをOnに戻して無事解決となりました。
yahoo_api_on.png
 
Yahoo!様のAPIがないと、なんとも素っ気ないサイトってことですね。
末永くAPIを提供してくれることを祈るばかりです。

PHPのstrlen()

このタイトルを書いて、あのことだなとご想像がつく方も多いと思いますが、
まさにその通りのお話です。。。
UTF-8の環境にて、PHPのstrlen関数で文字列のカウントをすると、
全角文字が2バイトではなく1から6バイトとしてカウントされるというものでした。
 
この開発日誌を読み直してみたところ、1年前くらいにサイトの文字コードを
SJISからUTF-8に変えていたので、この間あちこち不具合あったのだろうな
と恐縮するばかりです。
 
さて、対処方法ですが、こちらに解説付きでまとめられてますので、
詳しくはリンク先をご確認頂きたいと思いますが、
要はstrlen()を使う時には文字コードをSJISに変えてしまえということでした。



strlen(mb_convert_encoding($text,"SJIS","UTF-8"))


放ったらかしの画像掲示板を少々手入れした際に、
文字カウントがどうもおかしい....と思って気が付いたのですが、
なんともお恥ずかしいお話です。
 
 
imgbbs_201109.gif
さて、その放ったらかしだった画像掲示板ですが、
ホント僅かではありますが書き込みもあったようなので、
せっかくですからサブドメイン化をして、ディレクトリと分けてみました。
それに合わせてデザインも少々変え、サイト名も画像掲示板の泉としてあります。
見よう見まねで作った掲示板プログラムですので、まだ不具合多いとは思いますが、
よろしければご利用下さい。

掲示板のバージョンアップ完了

dtnのディレクトリ部分を、テーブルレイアウトから
XHTML+CSSレイアウトへと変更しましたが、
まだやっていなかった画像掲示板部分も修正が終わりました。
これに合わせて色々不具合が発生していたプログラムも修正しておきました。
 
imgbbs_1009.jpg
 
どうやら、しばらく見ていなかったうちにYouTubeの仕様もだいぶ変わっており、
新しくなった埋め込みタグからID抽出するのも面倒だったので、
今度はURLからIDを引っこ抜くよう変えておきました。
 
ニコニコ動画の方は、各動画に、タイトル・ID・マイリスト登録数他....を
まとめたXMLデータが用意されていたので、
こちらを使ってデータ取得するようにしてみました。
  
それと、投稿フォーム部分を、JQUERYでタブ切り替えとしておいたので、
画像アップ、YouTube・ニコニコ貼り付けが、多少は分かりやすくなったかと。
imgbbs_1009-2.jpg
 
あまり人も集まらない画像掲示板ですので、
ほのぼの皆さんの情報交換にご活用下さい。

画像掲示板でニコニコ動画を対応

これまで画像掲示板では、YouTubeのみを貼り付け可能としてましたが、
せっかくなのでニコニコ動画も貼り付け対応してみました。
 
imgbbs-100307_2.png
 
プログラム的にはYouTubeの時と全く同じで、
ブログ等に貼り付け用として用意されているURLから、
キーとなる動画IDを抜き取っておき、
掲示板HTML出力時に指定タグと共に貼り付けるという感じです。
 
きちんと確認したわけではないですが、
YouTubeのIDは11文字の英数字で生成されていたのですが、
ニコニコ動画の方は、2文字の英字 + (6から7文字?)の数字になっており、
ID引っこ抜きが少々面倒な感じでした。
 
 
毎々人気のない掲示板ですが、、、
気が向いたら書込み、貼り付けしてみて下さい。
imgbbs-100307.png

gdbでphpのデバッグ

gdbでPHPをデバッグする方法について、
こちらのページで詳細に説明してあったので、
ちょっと試しにやってみました。

gdbがインストールされていれば、やり方はとっても簡単です。
まずはgdbを起動。gdbコンソールが立ち上がってくれます。


>gdb
GNU gdb 6.1.1 [FreeBSD]
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i386-marcel-freebsd".
(gdb)

起動後は、PHPのコアファイルからコマンドを読み込み。

(gdb) file /usr/local/php5/bin/php

で、デバッグしてみたいファイルを走らせればOKです。

(gdb) run /www/htdocs/index.php

問題が無ければ、こんな感じで終わってくれます。

Program exited normally.
(gdb)


やってみたところ、inlude()やrequire()をしてるところ、
ファイルを読み込んでいるところのいくつかに、
相対パスのままで指定してしまっているところが多々あり、、、
これのエラーがあちこちで出てしまってました。。。

相対パスのままでも、PHPがファイルを探して回ってくれてるので、
プログラム的には問題なく動いてしまうわけなのですが、
けっこうな負荷がかかってたと思います。
ちなみに。PHPの動きについては、こちらをご参照どうぞ

というわけで、現在参照中のファイルのフルパス+ファイル名で、
パスをきっちり書き直しておきました。

include(dirname(__FILE__) . "/etc/function.php");


少ないプロセスを大切に使わないと。

seoチェックツールの微修正

dtnのディレクトリには、オマケ的にseoチェックツールを付けてあります。
seoチェックツールとはいうものの、単に検索エンジンでの
インデックス状況をphpでまとめただけなんですけどね。。


さて、これを久しぶりに修正してみました。

というのも、apacheのエラーログを見ていたところ、
やたらめったらPHP Warningがでており、
中でも、このSiteCheck.phpのエラーがけっこうな数となっておりまして、、、。

どうやらその主な原因というのは、4XX、5XXなどの、
存在してないサイトのデータを引っ張ってこようとした時に、
PHPがエラーを吐いてるというもので、、
まぁ、、、
@でエラー制御もしてないので、当たり前といえば当たり前ですね。

毎度の思いつきの突貫作業でこのプログラムを作ったので、
URLの存在チェックや、ディレクトリ登録済みかどうかの
チェックすらもやってませんでした。

という訳で、とりあえずは、URLが存在してるかどうかの
チェック機能を新たに追加してみました。
php5だとget_headers()もありますが、これがなくとも
PHPでHTTPリクエストをしてみる」のような方法で、
ステータスが取得可能なので問題なしです。

sitechecktool_0912.png


ところで、dtnの検索インデックス状況を見てみると、
googleの被リンクが全然少ないのが分かりますね。

sitechecktool_0912_dtn.png

link:コマンドでサイトの被リンクを公開すると、
SEO対策に悪用される恐れがあるから、とはいえ、
ここまで他と比べて差があると、被リンクは上位表示に
本当に!大切なんだよとアピールしてるような感じで、
逆効果のような気もしますが、、、どうなんでしょうね?

久々に検索プログラムの修正

いつの間にかYahoo!の検索APIが仕様変更していた影響で、
dtnの検索結果画面もバグってしまっていたので、
API仕様に合わせてプログラムの修正をしてみました。

修正といっても、レスポンスフィールドが多少変更されただけなので、
xml_parse_into_structで配列化されているデータの、
引っぱり出し方を変えた程度ですが(^_^;)
xml_parse_into_struct_hairetsu.png
レスポンスフィールドにキャッシュのURLも付いたので、
パース時の配列構造が変わったみたいですね。

とりあえず、これで無事表示されるようになりました。
search_result_dtn.png

今年は「末広がりの八年目」。
しっかり管理運営も頑張ります!!

最近のアクセス状況をグラフ表示

dtnでは、アクセスランキング、人気サイトランキングを実施していますが、
せっかくのIN/OUTランキングデータをここだけで使うのはもったいないなぁと、
以前から思い続けていました。

何か良い方法はないかなぁ....と日々考えていたのですが、
そんな時、ふとjQuery Sparklinesのことを見つけ、
このSparklinesで、日々のIN、OUTをグラフで表示出来れば面白いかも(^▽^;)
と思いついたので、ちょっと作りこんでみました。

ちなみにですが、
dtnのランキングは、アクセス数を単に++していくだけだったので、
24時間毎のデータに分割するのが多少面倒でしたが、
cronなどを使い、なんとか過去7日間のデータに分割させました...(^△^;)

で。完成したのは↓みたいな感じです。
recent_dtn_access_top.png

アクセスランキング人気ランキングのページや、
ディレクトリ内の各登録リンク部分にもくっつけてあります。


ただ、少々問題がありまして....。
Sparklinesは、もちろんJavaScriptで表示しているわけですが、
カテゴリに登録リンクが100とかあると、PC側に相当な負荷がかかって、
ブラウザがフリーズしまくってしまいまして...( ̄- ̄;)

という訳で、登録サイト数が多いカテゴリは、
下層カテゴリを作って、サイトを移動させたりと、
ただ今、大急ぎでカテゴリの整理をやっております。。。


また、アクセスが全く無いサイトなどは、
↓みたいな感じで、_ _ _ _ _ _ _ と表示されるだけなので、
何がなんだか分からなくなってしまってます。。。
recent_dtn_access.png

もっとランキングが賑やかになれば、グラフっぽく見えるかなぁ、と思いますが、、、。
サイト登録して下さった方は、是非、アクセスランキング、
人気サイトランキングに参加して、グラフを賑わせてみて下さいヽ(^∇^;)ノ

6周年!サーバー移転!

2002年8月27日にdtn.jpを取得して、
今日でまる6年目となりましたヽ(^◇^;)ノ

あっという間というか、よくここまで続いたなぁというか....。
考えれば考えるほど、自分でもビックリしてしまいます(^_^;)

6yearsold.png

それにしても。。。
Yomiサーチで何にも考えずにディレクトリ型検索エンジン・・・
というか、検索付きリンク集を作ったのが最初でしたが、
まさか自分でプログラム組んでまで続けるとは思ってもいませんでした。

お陰さまでアクセス数もボチボチと増えてきて、
コンテンツを増やしたこともあり、負荷増大で
サーバーが落っこちるくらいまでに成長することも出来ました。
これも皆様のお陰と感謝するばかりです!!
ありがとうございます_(^△^;)_
7年目も頑張りますので、宜しくお願い致します!!


さてさて。
プロセス数の制限に気づいてからというもの、
VPSサーバーのapacheを1.3から2.0x、2.2xにしてみたり、
他プログラムのバージョンを上げてみたり、色々やってみていました。

ただ、VPSサーバー独自のプログラムが入ってたりして、
あまりスッキリとサーバーを再構築することが出来ず、、、。
もう面倒なので、ここらでサーバーを乗り換えてしまうことにしました(^▽^;)

現在、新サーバーへのコンテンツ移行作業中ですが、
色々バージョンが上がったおかげで、恥ずかしながら
あちこちのphpプログラムにもエラーが出てしまってまして。。。
移転完了までもうしばらくかかりそうです(@_@;)

まぁphp.iniの設定で、エラーレポートを
E_ALL & ~E_NOTICEにすれば、すんなり終わりそうなのですが、
どうせなら、きれいなプログラムにしておきたいので(^△^;)

この作業が終わり次第、DNS切り替えなどをすると思いますので、
その際にはまたお知らせいたします。

ホスト情報チェック機能

dtnに登録申請をして下さった方ならお分かり頂けると思いますが、、、。
アクセスアップの為、あちこちの検索エンジン、ディレクトリ、リンク集に
登録申請をしていく作業はかなり面倒です。。。
ホームページのタイトルを入力して、URLを入力し、カテゴリを選んで、などなど、、、。
(dtnへ登録申請をして下さった皆様、お忙しい中ホントに有難うございました!)

さて。
世の中ホントに商売上手な方が多いようで、これに目を付けたどこかの誰かが、
この面倒な作業を代行してくれるサービスをスタートしてくれました。
UNFINISHEDや、ホームページ売り上げアップコムなんかがそうですね。

で。どうやらdtnもこの登録先リストにのっかったようで、
ある日を境に、山ほど登録申請データが届くようになっていました。。。
アクセスアップサービス会社の方が、dtnに注目してくれたのはすっごい嬉しいのですが、
Toolを使って、データをあちこちのサイトに一括POSTしているらしく、
このデータがかなりムチャクチャで、、、。

最初のうちは登録数がガンガン増えるので喜んでもいたのですが、
この申請をチェックして、カテゴリを選び直して、文字化けとかを修正して、、、
と、する作業がホントに時間がかかってしまい、、、( ̄- ̄;)
このままでは、きちんと入力してくれた方のサイト確認もおろそかになってしまいそうなので、、、
やっぱり外部からの申請を拒否するようにプログラムし直しました。

といっても、プログラム的にはたった一行でしたけど。。。
if(stristr($refer,$pgm)){


これがかなり効果がありました。
それ以降、データのおかしい登録申請はゼロ。
やっと落ち着いて運営することが出来るようになりました。
登録申請数はかなり減ってしまいましたけど、、、

ただし、サイトのアクセス数はまったく変化していなかったので、
Toolを使って登録しているサイトのオーナーさんは、
自分のサイトがどこに登録されたか?なんてのは、
全く気にもしていなかったってことなんでしょうね( ̄- ̄;)