Archive for the ‘PHP’ Category



19
5月

nginx+php+mysql+memcached+wordpressの組み合わせ


巷で噂のnginx+php+mysql+memcached+wordpressの組み合わせをVirtualBox上のCentOS6で構築してみた。

構築方法はネット上にたくさんあるので割愛。

http://d.hatena.ne.jp/red_snow/20101026/1288057498
http://blog.kubox.info/?p=175
http://blog.iss.ms/2011/01/08/130929
http://docs.komagata.org/4809
http://www.barasu.org/pc/4545.html

個人的な感想としては相当なアクセス(ウチではありえないw)がないと、apache+php+wordpress+WP Super Cacheとの差はない気がする。

nginxのconfがもうちょっとapacheライクな書き方だったらわかりやすいんだけどなぁ。

あとphpがモジュール化できたらなぁ・・・と思う。

nginxってなんかdjb(qmailとか)に近いイメージを持っているのは私だけだろうか・・・

apacheがこれに対抗して進化してくれれば個人的には嬉しい( ´ー`)

9
5月

php5.3.13がリリース!


予想通りすぐにリリースされましたね( ´ー`)

ということで早速RPM作りました。
※本家にアップされているので中止しました。

他にもここ数日下記RPMをひっそりアップしてます。

bind-9.8.2
postfix-2.8.10

次はMySQL5.5.24のRPMを作る予定。

VineSeedに5.5.23のRPMソースがあるからちゃちゃっと5.5.24のRPMを作れるといいんだけどなぁ・・・

6
5月

PHP5.3.12がリリースされた・・・が・・・


PHP5.3.12がリリースされたのでRPM作ろうかと思ったけど脆弱性対策が不十分らしいので、またすぐリリースされるかな~?

PHP 5.3.12とPHP 5.4.2、脆弱性が完全には修正されていないことが判明

ちょっと様子を見よう( ´ー`)

26
4月

WordPressのLightBox風プラグインを自作してみた


元々はShadowBox JSを使っていたのですが、ちょっとばかし手を加えたりしていたため、ShadowBox JSがアップグレードする度に、再度修正して・・・なんてことをするのがしんどくなってきたので、この際自分で作ってしまおう!

と思い立ったのですございます。

とりあえずこのブログに組み込んで現在テスト中です。

■HTMLのリンク
ShadowBox JS

■YouTUbeのリンク
Hello My Baby, Hello My Honey, Hello My Ragtime Gal

■ニコニコ動画のリンク
イースの曲をヴァイオリンで弾いてみた その4 バレスタイン城

■画像のリンク

動画はYoutubeとニコニコ動画に対応しております。

このプラグインはiframeではなくてobjectを使っているのですが、最近のブラウザはインラインフレームの制約が厳しい(特にOperaとかOperaとか)ので対象のURL先でリダイレクトなんかされちゃうともうお手上げなんですよね。

この制約を回避できる方法があればよいんだけど、今のところ解決策は無し・・・

11
4月

PHP5.4の変更点


下位互換性のない変更点

相変わらずエグイ仕様変更するなぁ・・・

↓が結構影響がでかいんじゃないなかな・・・

呼び出し時の参照渡しをサポートしなくなりました。

7
4月

Facebookアプリで自分のウォールに投稿する


phpのcurlを使って自分のウォールに投稿する方法です。

<?php $app_id = ''; $secret = ''; $return_url = ''; //アクセストークンを取得 $token_url = "https://graph.facebook.com/oauth/access_token?" . "client_id={$app_id}" . "&redirect_uri=" . urlencode($return_uri) . "&client_secret={$secret}" . "&code={$_REQUEST["code"]}"; $access_token = str_replace('access_token=', '', file_get_contents($token_url)); //タイトル $feed["name"] = "タイトルのテスト"; //本文 $feed["description"] = "本文のテスト"; //サムネイル画像 $feed["picture"] = "http://www.example.jp/thumbnail.png"; //タイトル、サムネイル画像のリンク先URL $feed["link"] = "http://www.example.jp/"; //表示するドメイン $feed["caption"] = "apps.facebook.com"; $resp = null; try { $params = 'access_token='.$access_token; foreach ($feed as $key=>$val) { $params .= "&{$key}=".urlencode($val); } $url = "https://graph.facebook.com/me/feed"; $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_POSTFIELDS, $params); $resp = curl_exec($ch); curl_close($ch); } catch (Exception $e) { $resp = $e->getMessage(); } print_r($resp); ?>

※ちなみにウォールに投稿できる項目「message」はアプリの固定メッセージ的なものを書いてはいけないらしい。

31
3月

Facebookアプリ


ここ1ヶ月、仕事でFacebookアプリばかりを作っているのですが、FQLを使って自分のプロフィールとか友達のリストを取ろうとした時、日本語の氏名を取りたいなんて場合はGraph APIではなく、Legacy REST APIを使うと取れるようです。

サンプル

<?php $app_id = ''; $secret = ''; $return_url = ''; //アクセストークンを取得 $token_url = "https://graph.facebook.com/oauth/access_token?" . "client_id={$app_id}" . "&redirect_uri=" . urlencode($return_uri) . "&client_secret={$secret}" . "&code={$_REQUEST["code"]}"; $access_token = str_replace('access_token=', '', file_get_contents($token_url)); //uid,name,emailを取得 $fql_query = "https://api.facebook.com/method/fql.query?" . 'query=SELECT+uid%2Cname%2Cemail+FROM+user+WHERE+uid%3Dme%28%29' . "&access_token={$access_token}" . "&format=json"; $ret = json_decode(preg_replace('/("¥w+"):(¥d+)/', '¥¥1:"¥¥2"', file_get_contents($fql_query)), true); ?>

最後の

json_decode(preg_replace('/("¥w+"):(¥d+)/', '¥¥1:"¥¥2"', file_get_contents($fql_query)), true);


preg_replaceは何をしているかというとjson_decodeでそのまま変換するとuidが長すぎて「1.23456789912346E+018」みたいな感じになるのでjson_decodeの前にゴニョゴニョしてます。

4
3月

PHP5.4がリリース


PHP 5.4 がついにリリース ― Web を高速に!

ついにリリースされちゃいましたね。

5.3からすんなり移行できたらよいんだけどなぁ・・・

14
1月

PHP5.3.9がリリースされてた


ということで早速RPMを作成して自宅サーバーのPHPをアップグレード

欲しい方は下記からどうぞ~

Vine5.xで作ったRPM/SRC.RPM集

22
12月

TortoisesvnでcommitしたらWWWのDocumentRootに自動で反映させる方法(+ポートフォワーディング)


掲題のことを実現するために、まずwebdav経由の方法を考えたのですが、自宅サーバーはcgiはsuexec、phpはsuphpにより実行権限がディレクトリのオーナー(ユーザ)権限で実行されるため、webdavは現実的ではないと判断。(webdav経由だとcommit等がapacheユーザで実行されてしまうため、権限の問題が出てしまうので・・・)

次に、ssh経由の方法を考えたのですが、これも難点があって現実的ではないと判断。

何故かというと、自宅サーバーは外部から接続する場合、ゴニョゴニョして接続元のIPを許可した後、秘密鍵を使ってログインできるようになっています。これだけならいいのですが、許可したIPは一定時間経過すると自動的に無効になるようにしてあるため、commit等を行う度に毎回ゴニョゴニョしてIPを許可して・・・なんて面倒なことをやっていられないわけです。

で、最終的に、sshでポートフォワーディングさせる方法に行き着いたわけです。

■サーバー側の準備
1.svn管理+WWW公開用のアカウントを作成(以下svnuser)
2.svnuserでパスワード無しの公開鍵と秘密鍵を作成

su - svnuser ssh-keygen -t rsa


3.公開鍵をリネーム
cd .ssh/ mv id_rsa.pub authorized_keys


4.秘密鍵(id_rsa)をTortoisesvnを使うクライアントPCに持ってくる
5.svn管理用ディレクトリを作成
mkdir /home/svnuser/svnrepos


6.svnリポジトリを作成
svnadmin create /home/svnuser/svnrepos/hoge(任意の名称)


7.WWWのドキュメントルートが自動更新されるようpost-commitを設置
cd /home/svnuser/svnrepos/hoge/hooks mv post-commit.tmpl post-commit vi post-commit ----- REPOS="$1" REV="$2" #commit-email.pl "$REPOS" "$REV" commit-watchers@example.org #log-commit.py --repository "$REPOS" --revision "$REV" /usr/bin/svn up /home/svnuser/public_html/hoge/ ----- chmod 755 post-commit


8.自動更新の対象となるWWWディレクトリを作成
mkdir /home/svnuser/public_html/hoge


9.自動更新対象のディレクトリをチェックアウト
cd /home/svnuser/public_html/hoge svn checkout file:///home/svnuser/svnrepos/hoge ./

■クライアント側の準備
1.Puttyの公式から「putty.exe」「pageant.exe」「puttygen.exe」をダウンロードしてTortoisesvnのbinフォルダに保存
2.TortoiseSVNの設定メニューからネットワークの設定メニューを出して、SSHクライアントをTortoisePlink.exe(若しくはPuttyの公式からダウンロードしたplink.exe)を選択しておく
3.puttygen.exeを起動して「Load」をクリックしサーバーで作成した秘密鍵(id_rsa)を読み込む(Putty用にコンバートするか?聞かれるのでYesを選択)
4.3が完了したら「save private key」をクリックして適当な名前で保存
5.putty.exeを起動して下記を設定

■Session HostName:SSHの接続先IPまたはホスト Port:SSHの接続先ポート Connection Type:SSH Saved Session:任意の接続名称(例:svnssh) ■Connection>Data Auto-Login username:SSHでログインするユーザ(例:svnuser) ■Connection>SSH>Auth Attempt authentication using Pagent:チェックを入れる Private key file for authentication:4で作成した秘密鍵をセット ■Connection>SSH>Tunnels Source port:1024以上の任意のポート番号を設定(例:10022) Destination:localhost:22(自宅サーバーから自宅サーバーのSSHに接続) Addをクリックして保存


6.Sessionの項目に戻り「Save」をクリックして保存
7.putty.exeで続いて下記を設定
■Session HostName:localhost(クライアントPC自身のIP) Port:5のSource portで設定したポート番号(例:10022) Connection Type:SSH Saved Session:任意の接続名称(例:svntunnel) ■Connection>Data Auto-Login username:SSHでログインするユーザ(例:svnuser) ■Connection>SSH>Auth Attempt authentication using Pagent:チェックを入れる Private key file for authentication:4で作成した秘密鍵をセット Addをクリックして保存


8.Sessionの項目に戻り「Save」をクリックして保存
9.pageant.exeを起動して「Saved Sessions」から「svnssh」>「svntunnel」の順に接続する

これでTortoisesvnでcommitすると「/home/svnuser/public_html/hoge」も自動で更新されるようになるし、毎回パスワードを聞かれることもありません。

これで開発が楽になりました( ´ー`)

See Also
Subversionへポートフォワード+puttyで自動ログイン
【Subversion】mod_dav_svn(apache)経由でCommitした時に自動的にupdateを行う

now loading...