PHP
PHPのTIPS
PHPでXML-RPC
2010年3月12日
Blog記事の更新をサーチエンジンなどに通知するXML RPCをPHPで実装する方法を紹介します。
まず、weblogUpdates.pingの仕様。
http://www.xmlrpc.com/weblogsCom
weblogUpdates.ping (weblogname, weblogurl, changesurl=weblogurl, categoryname="none") returns struct
ちなみに、weblogUpdates.extendedPingというpingより多くの必須パラメータがあるインターフェイスも存在する。
pingで事足りるのでpingだけを実装。
http://weblogs.com/api.html#5
PHPでXML-RPCを扱うためには、PEARのXML_RPC2を使うのが便利。APIの設計は綺麗で使いやすい。
以下にコード書いておきます。
<?php
require_once('XML/RPC2/Client.php');
$blog_title = 'おれのブログ';
$blog_url = 'http://matsu.tymy.net/';
$url_array = array(
'http://www.google.com/webmasters/tools/ping'
,'http://search.yahooapis.com/SiteExplorerService/V1/ping'
,'http://www.bing.com/webmaster/ping.aspx'
,'http://submissions.ask.com/ping'
);
$options = array(
'prefix' => 'weblogUpdates.'
);
$call_option = array(
$blog_title
, $blog_url
);
foreach($url_array as $url){
try{
$client = XML_RPC2_Client::create($url, $options);
$result = $client->remoteCall___('ping', $call_option);
if($result['flerror']){
// goo returns error but message says success.
if(strpos($result['message'], 'Thanks for the ping.') === false){
throw new UnexpectedValueException($result['message']);
}
}
}catch(UnexpectedValueException $e){
trigger_error($url."\n\n".print_r($e, true), E_USER_NOTICE);
}catch(XML_RPC2_Exception $e){
trigger_error($url."\n\n".print_r($e, true), E_USER_NOTICE);
}
}
注意
- pingサーバは使えなくなる場合が多いので、例外はしっかりハンドリングしておく。半年前の厳選20サーバ中、半分以上が存在していない状態でした。
- レスポンスのフォーマットが仕様通りじゃない
- ブログタイトルにマルチバイトを含むときはUTF-8に変換して送る処理を入れてね。または、UTF8で書く。
SSHトンネルが切れる
2010年1月15日
MySQLの接続をSSHトンネルしているといつの間にかリモートホストに切断されているときがある。
そんなときは、serveraliveintervalオプションを設定して接続する。
% /usr/bin/ssh -o serveraliveinterval=60 -N -L 3306:localhost:3306 remotehost
もしくはリモートホストの/etc/ssh/sshd_configに以下を追加して、sshdを再起動すればKeepaliveを設定できる。
KeepAlive yes ClientAliveInterval 60
Source:
http://madphilosopher.ca/2005/07/an-ssh-keep-alive-tip/
http://slashdot.jp/~gm300/journal/451300
CGI benchmarking
2009年11月13日
URLリダイレクタ
2009年11月2日

2chで、外部サイトへのURLリンクで使っているime.nuサービスみたいなのを書いてみた。
使い方
http://matsu.tymy.net/link/www.yahoo.co.jp
http://matsu.tymy.net/link/http://www.yahoo.co.jp
リンク元をさらしたくないときにはどうぞ。
PHP 5.2.10 configure error
2009年6月20日
PHP5.2.10が出たので開発環境へインストール。
5.2.8と同じオプションでconfigureしたのにこんなエラーが出た。
% ./configure --enable-mbstring --enable-soap --enable-zend-multibyte --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql=/usr/local/mysql --with-pdo-mysql=/usr/local/mysql --with-curl --with-curlwrappers --with-gd --with-jpeg-dir=/usr/lib --with-png-dir=/usr/lib --with-zlib-dir=/usr/lib --with-mcrypt
.....
configure: error: Please reinstall the libcurl distribution -
easy.h should be in <curl -dir>/include/curl/
環境は、
# cat /etc/issue Debian GNU/Linux 5.0 \n \l
headerファイルインストールして解決
# aptitude install libcurl4-gnutls-dev
PHPでFizzBuzz
2009年5月13日
while(++$i<101)echo $i%15!=0?$i%5!=0?$i%3!=0?$i:Fizz:Buzz:FizzBuzz;
- ワンライナー
- 69B
- error levelをNOTICEにしてたらerror出ると思う。
PHPでQRCode
2009年3月7日
PHPでQRコードを作る方法。
Extensionを使う。
インストール
wget http://www.opendogs.org/pub/php_qr-0.3.1.tgz tar zxvf php_qr-0.3.1.tgz cd php_qr-0.3.1 phpize ./configure --enable-qr make install /usr/local/apache2/bin/apachectl graceful
PHPコード
< ?php
$qr = new QRCode();
$qr->setMagnify(3);
$qr->setFormat(QRCode::FMT_GIF);
$qr-addData($data);
$qr->finalize();
header('Content-type: image/gif');
print $qr->getSymbol();
上記以外にもオプションがいっぱい用意されている。
APIリファレンスが見づらいなぁ。






最近のコメント