- Summary
PHPによるデザインパターン入門は2009-09-14に絶版となり、原稿を公開。
- Reference
書籍「PHPによるデザインパターン入門」の原稿テキストを公開します - Do You PHP はてな
http://d.hatena.ne.jp/shimooka/20100301/1267436385
PHPによるデザインパターン入門|サポート|秀和システム
http://www.shuwasystem.co.jp/books/7980/1516-4/1516-4.html
PHPによるデザインパターン入門 - Do You PHP?
http://www.doyouphp.jp/book/book_phpdp.shtml
Google ブックス - PHPによるデザインパターン入門
http://books.google.co.jp/books?id=sXNh4TeQeBIC
- Summary
PHPでTwitter APIのOAuthを使う方法。
PEARの HTTP_OAuthを利用する。
1. Twitter での操作
1-1. Twitter にアプリケーションを登録する。
1-2. Consumer Key と Consumer secret を取得する。
2. アプリケーションからTwitter APIを利用する。
2-1. リクエストトークンを取得する。
2-2. 認証用 URL を取得する。
2-3. ユーザーから承認を受ける (bot の場合は自分でやる)。
2-4. アクセストークンを取得する。
2-5. API にアクセスする。
- 1-1. Twitter にアプリケーションを登録する。
Register a new application からアプリケーションを登録する。
| Application Name | from XXXの部分にあたる。日本語も可能。 |
| Description | アプリケーションの説明文。 |
| Application Website | アプリケーションのウェブサイト。Application Name のリンク先URLを指定する。 |
| Organization | アプリケーションを管理する組織名。 |
| Website | 組織のウェブサイト。 |
| Application Type | Browser を指定すると、ユーザーがアクセス権を承認したあと、 Callbak URL にリダイレクトする。Client を指定した場合は「クライアントソフトに戻ってこのコードを入力してね」と表示される。 |
| Callback URL | Application Type を Browser にした場合に入力する。ユーザーがアクセス権を承認した後、この URL にリダイレクトする。サービスの URL が確定してない場合は、仮で入れておくか Application Type を Client にしておいて、後で設定しても良い。 |
| Default Access type | アプリケーションに与えられる権限。Read & Write か Read-only か。 |
| Use Twitter for login | 自分のアプリケーションで「Sign in with Twitter (Twitter でログイン) 」を利用する場合はチェックを入れる。 |

$consumer_key = '[1-2で取得したConsumer key]'; $consumer_secret = '[1-2で取得したConsumer secret]'; include 'HTTP/OAuth/Consumer.php'; $consumer = new HTTP_OAuth_Consumer($consumer_key, $consumer_secret); $http_request = new HTTP_Request2(); $http_request->setConfig('ssl_verify_peer', false); $consumer_request = new HTTP_OAuth_Consumer_Request; $consumer_request->accept($http_request); $consumer->accept($consumer_request); session_start(); // リクエストトークン を取得 $callback = '[Twitter に登録した Callback URL]'; $consumer->getRequestToken('https://twitter.com/oauth/request_token', $callback); $_SESSION['request_token'] = $consumer->getToken(); $_SESSION['request_token_secret'] = $consumer->getTokenSecret(); // 認証用 URL を取得 $auth_url = $consumer->getAuthorizeUrl('https://twitter.com/oauth/authorize'); // アクセストークンを取得する $verifier = $_GET['oauth_verifier']; $consumer->setToken($_SESSION['request_token']); $consumer->setTokenSecret($_SESSION['request_token_secret']); $consumer->getAccessToken('https://twitter.com/oauth/access_token', $verifier); $_SESSION['access_token'] = $consumer->getToken(); $_SESSION['access_token_secret'] = $consumer->getTokenSecret();
$consumer->setToken($_SESSION['access_token']); $consumer->setTokenSecret($_SESSION['access_token_secret']); $status = 'つぶやきの内容'; $response = $consumer->sendRequest("https://twitter.com/statuses/update.xml", array('status' => $status), "POST"); echo htmlspecialchars($response->getBody());
require_once 'Services/Twitter.php'; require_once 'HTTP/OAuth/Consumer.php'; try { $twitter = new Services_Twitter(); $oauth = new HTTP_OAuth_Consumer( 'consumer_key', 'consumer_secret', 'auth_token', 'token_secret'); $twitter->setOAuth($oauth); $msg = $twitter->statuses->update("I'm coding with PEAR right now!"); print_r($msg); } catch (Services_Twitter_Exception $e) { echo $e->getMessage(); }
- Summary
Twitter botのスクリプト。
以下の動作が可能。
- 用意した文章を順番に投稿。
- 用意した文章をランダムに投稿。
- reply を受けると、ランダムに文章を返す。
- 特定の語を含む reply を受けると、特定の文章を返す。
- Reference
プログラミングができなくても作れるTwitter botの作り方
http://pha22.net/text/twitterbot.html
Services_Twitter
http://labs.transrain.net/products/services_twitter/
phaのニート日記
http://d.hatena.ne.jp/pha/
- Reference
iPhone.goodegg.jp - App StoreからiPhoneアプリ情報を取得するPHPサンプル
http://iphone.goodegg.jp/archives/4552
- Summary
PHPMailerでGmailのSMTPを利用してメールを送信する。
ポート465からSMTP over SSLを利用する。
- Source
<?php mb_language("japanese"); mb_internal_encoding("UTF-8"); require("class.phpmailer.php"); $mailer = new PHPMailer(); $mailer->IsSMTP(); $mailer->Host = 'ssl://smtp.gmail.com:465'; $mailer->SMTPAuth = TRUE; $mailer->Username = 'user@gmail.com'; // Gmailのアカウント名 $mailer->Password = 'gmail_password'; // Gmailのパスワード $mailer->From = 'from@gmail.com'; // Fromのメールアドレス $mailer->FromName = mb_encode_mimeheader(mb_convert_encoding("Fromの名前","JIS","UTF-8")); $mailer->Subject = mb_encode_mimeheader(mb_convert_encoding("メールのタイトル","JIS","UTF-8")); $mailer->Body = mb_convert_encoding("メールの内容","JIS","UTF-8"); $mailer->AddAddress('friend@example.com'); // 宛先 // $mailer->AddReplyTo($email, $from); if(!$mailer->Send()) { echo "Message was not sent<br/ >"; echo "Mailer Error: " . $mailer->ErrorInfo; } else { echo "Message has been sent"; } ?>
- Summary
Pear::MailでGmailのSMTPを利用してメールを送信する。
ポート587からSTARTTLSを利用する。
- Source
<?php mb_language("japanese"); mb_internal_encoding("UTF-8"); require_once 'Mail.php'; $params = array( 'host' => 'smtp.gmail.com', 'port' => 587, 'auth' => true, 'username' => 'example@gmail.com', 'password' => 'password', 'debug' => true, ); $headers = array( 'From' => 'example@gmail.com', 'To' => 'example@gmail.com', 'Subject' => mb_encode_mimeheader(mb_convert_encoding("メールのタイトル","JIS","UTF-8")) ); $recipients = 'example@gmail.com'; $body = mb_convert_encoding("メールの内容","JIS","UTF-8"); $smtp = Mail::factory('smtp', $params); $e = $smtp->send($recipients, $headers, $body); if ( PEAR::isError($e) ) echo $e->getMessage() . "\n"; ?>
- Reference
MobilePictogramConverter 絵文字変換ライブラリ
http://php-develop.org/MobilePictogramConverter/
PHPとか (開発者のblog)
http://d.hatena.ne.jp/ryster/
- Usage
$purifier = new HTMLPurifier(); $clean_html = $purifier->purify( $dirty_html );
- Reference
symfony Web PHP framework
http://www.symfony-project.com/
CodeZine - symfony入門: symfonyで始めるPHPフレームワーク
http://codezine.jp/a/article/aid/704.aspx
FrontPage - Symfony.jp Symfonyの日本語情報
http://symfony.jp/
- Summary
設定すべき項目は以下.
;; Disable Output Buffering output_buffering = Off ;; Set HTTP header charset ; default_charset = EUC-JP ;; Set default language to Japanese mbstring.language = Japanese ;; HTTP input encoding translation is enabled. mbstring.encoding_translation = off ;; Set HTTP input encoding conversion to auto mbstring.http_input = pass ;; Convert HTTP output to EUC-JP mbstring.http_output = pass ;; Set internal encoding to EUC-JP mbstring.internal_encoding = EUC-JP ;; Do not print invalid characters mbstring.substitute_character = none mbstring.detect_order = SJIS,EUC-JP,JIS,UTF-8,ASCII
- 誤解1: default_charsetはデフォルトの文字コードのことではない.
default_charsetは,出力時にHTTPヘッダとして送信する文字コード名のこと.
default_mimetype = 'text/html'
default_charset = 'utf-8' の場合
header('Content-Type: text/html; charset:utf-8');
ob_start("mb_output_handler")
- Summary
二つの画像を合成し,Watermark加工が行なえる.
- Source
function emboss($pic1,$patt) { header("Content-type: image/png"); $source=imagecreatefromjpeg($pic1); // Source $pattern=imagecreatefromjpeg($patt); // pattern list($width, $height) = getimagesize($pic1); list($widthpatt, $heightpatt) = getimagesize($patt); $new_width=$width; $new_height=$width/$widthpatt*$heightpatt; if($new_height>$height){ $offset=intval(($new_height-$height)/2); } elseif($new_height<$height){ $offset=intval(($new_height-$height)/2); } else{ $offset=0; } $image_p = imagecreatetruecolor($new_width, $new_height); $pattern = imagecreatefromjpeg($patt); imagecopyresampled($image_p, $pattern, 0, 0, 0, 0, $new_width, $new_height, $widthpatt, $heightpatt); $im = imagecreatetruecolor($width, $height); for($y=0; $y < $height; $y++) { for($x=0; $x < $width; $x++) { $colors=imagecolorsforindex($source, imagecolorat($source, $x,$y)); $pattern_color=imagecolorsforindex($image_p, imagecolorat($image_p, $x,($y+$offset))); //changes brightness depending on luminance if(($y+$offset+1)>0 &&($y+$offset)<($new_height-1)){ $brightness=abs(($pattern_color['red']*50/255)-50); if($pattern_color['red']<150){ $change=true;} else{ $change=false; $tally=0; } if($change&&$tally<2){ $highlight=1.8; $tally++; } else{ $highlight=1; } $brightness = $brightness * $highlight; } else{ $brightness=0; } $r=(($colors['red']+$brightness)>255)? 255 : ($colors['red']+$brightness); $g=(($colors['green']+$brightness)>255)? 255 : ($colors['green']+$brightness); $b=(($colors['blue']+$brightness)>255)? 255 : ($colors['blue']+$brightness); $test=imagecolorallocate($im, $r,$g,$b); imagesetpixel($im,$x, $y, $test); } } imagepng($im); imagedestroy($im); } emboss("me.jpg","patternsq.jpg"); //emboss("magic800.jpg","patternsq.jpg"); //emboss("crop.jpg","patternsq.jpg");
<img src="emboss.php" />
- Summary
function joinwavs($wavs){ $fields = join('/',array( 'H8ChunkID', 'VChunkSize', 'H8Format', 'H8Subchunk1ID', 'VSubchunk1Size', 'vAudioFormat', 'vNumChannels', 'VSampleRate', 'VByteRate', 'vBlockAlign', 'vBitsPerSample' )); $data = ''; foreach($wavs as $wav){ $fp = fopen($wav,'rb'); $header = fread($fp,36); $info = unpack($fields,$header); // read optional extra stuff if($info['Subchunk1Size'] > 16){ $header .= fread($fp,($info['Subchunk1Size']-16)); } // read SubChunk2ID $header .= fread($fp,4); // read Subchunk2Size $size = unpack('vsize',fread($fp, 4)); $size = $size['size']; // read data $data .= fread($fp,$size); } return $header.pack('V',strlen($data)).$data; }
joinwavs(array("1st.wav","2nd.wav","3rd.wav"));
- Summary
register_globals = on 前提のプログラムを,
register_globals = off にするための方法.
- Reference
PHPのregister_globalsをoffにする
http://cgi36.plala.or.jp/tera5/v/security/register_globals1/chap01.html
- Reference
SourceForge.net: PhpUnit
http://sourceforge.net/projects/phpunit/
PHPUnit
http://www.go-pear.org/manual/ja/html/package.php.phpunit.html
Do You PHP? - PhpUnit - 最強のユニットテスト自動化ツール
http://www.doyouphp.jp/tips/tips_phpunit.shtml
PEAR hacks - PHPUnitの使い方
http://www.aglabo.com/agl/proevo/PHP/PEAR/phpunit-howto.html
PhotoCabi-diary - 2004-11-18 - PHPUnitの使い方
http://www.photocabi.net/mt/archives/000049.html
- Source
### Smarty # usage: {{smarty('検索語')}} sub smarty { my ($str) = @_; my $prefix = 'http://smarty.php.net/manual/en/search.php?query='; my $enc = url_encode($str); return qq(<a href="$prefix$enc">$str</a>); }
- Summary
Smartyを使った開発でデバッグを行う方法.
- 常にデバッギングコンソールをポップアップ表示
$smarty->debugging = true;
$smarty->debugging = true; $smarty->assign('_smarty_debug_output', 'html');
$smarty->debugging_ctrl = 'URL';
{debug}
{debug output='html'}
{$foo|@debug_print_var}
{$foo|@debug_print_var:2:100}
- Reference
Sooey - 2006-11-20 - PHPUnit 3.0リリース
http://www.sooey.com/journal/2006/11/20/633/
PHPUnit ポケットガイド
http://www.phpunit.de/pocket_guide/3.0/ja/
- via
オレンジニュース - 2006-11-21
http://secure.ddo.jp/~kaku/tdiary/20061121.html#p02
- Reference
Zend Developer Zone | AJAX Chat Tutorial
http://devzone.zend.com/node/view/id/1234
- via
phpspot開発日誌 - ZendFrameworkでAjaxを使ったチャットシステムを作るチュートリアル
http://phpspot.org/blog/archives/2006/11/zendframeworkaj.html
- Summary
日本語を使う場合はUTF-8の変数を渡す必要がある.
require_once('Services/JSON.php'); $json = new Services_JSON(); $obj = array( 'id' => array( 'foo', 'bar', array('aa' => 'bb') ), 'foobar' => $string, 'a' => 123 , 'b' => true ); $js = $json->encode($obj); echo $js;
- Reference
SourceForge.net: ajaxcore
http://sourceforge.net/projects/ajaxcore/
Ajaxian - AjaxCore: PHP Ajax Framework
http://ajaxian.com/archives/ajaxcore-php-ajax-framework
- via
PHPプロ! - Ajax アプリ開発用 PHPフレームワーク「AjaxCore」
http://www.phppro.jp/news/238