Facebookファンページのいいねしているユーザーを取得する

FQLで簡単に取得できます。

likeテーブル、page_fanテーブルのどちらかで取得できますが、今回はファンページをいいねしているかユーザーをチェックしたかったので、page_fanテーブルを使って取得するようにしました。

SELECT page_id,type,profile_section,created_time FROM page_fan WHERE uid = me() AND page_id = [page_id]

対象のサーバーがPHP4だったのでFacebookのSDKでは対象外なので、JavaScriptで取得するように実装したコードはこちらです。

<!-- facabook like -->
<script type="text/javascript">

  window.fbAsyncInit = function () {
    // init
    FB.init({
      appId: '[appId]',
      status: true,
      cookie: true,
      oauth: true,
      xfbml: true
    });

    // login
    $("#facebook_login").click(function () {
      FB.login(function (resp) {
        if (resp.authResponse) {
          checkLike();
        }
      }, {perms: 'read_stream'});
    });

    var checkLike = function () {
      FB.api(
        {
            method : 'fql.query',
            query : 'SELECT uid,page_id,type,profile_section,created_time FROM page_fan WHERE uid = me() AND page_id = [page_id]'
        },
        function(response) {
            //console.log(response);
            var form = '<form name="regist_form" id="regist" method="post" action="regist.php">';
            var result = 'ng'
            if (response.length > 0 && response[0].page_id == '[page_id]') {
                // ok
                result = 'ok'
                form += '<input type="hidden" name="uid" value="'+response[0].uid+'" />';
            }
            form += '<input type="hidden" name="mode" value="'+result+'" />';
            form += '</form>';
            $('body').append(form);
            $('#regist').submit();

        });
    }

  };

  // javascript SDK load
  $(function () {
    // script create
    (function () {
      var e = document.createElement('script');
      e.src = document.location.protocol + '//connect.facebook.net/ja_JP/all.js';
      e.async = true;
      document.getElementById('fb-root').appendChild(e);
    } ());
  });

</script>
<div id="fb-root"></div>
<!-- facabook like -->

[appId]、[page_id]は任意のものに変更します。

  • パーミッションは”read_stream”にしてログインを要求
  • ログインが成功して、ユーザーが承認したら、FQLで対象のファンページにいいねしているかチェックする
  • いいねしてたら、regist.phpにPOSTする

という流れです。

page_fan – Facebook開発者.

iTunesConnectへ申請する方法

iPhoneやiPadのアプリを作成したら、AppStoreに掲載するためにiTunesConnectからアプリを申請します。
初めて、申請してみたのでその時の備忘録です。

目次

  • 申請の準備(開発証明書、AppID、プロビジョニングファイル作成)
  • iTunesConnectにアプリの情報登録
  • アプリのビルド、サブミット

申請の準備(証明書、App ID、プロビジョニングファイル作成)

証明書については、

suusuke – blog – プロビジョニングファイル作成から実機転送手順.

で書いたとおり既に作成している状態です。

App IDの作成

iOS Dev Center – Apple Developer.

iOS Dev CenterからApp IDを作成します。

  • 右側にあるリンクから「iOS Provisioning Portal」に移動。
  • 左側にあるリンクから「App IDs」→「New App ID」→「Create App ID」へ移動。
  • 「Description」に通称または説明を入力。
  • 「Bundle Seed ID (App ID Prefix)」は複数ある場合は、適切なものを選択。(私の場合はひとつしかないので選択不可。複数チーム登録している場合など選択できる?)
  • 「Bundle Identifier (App ID Suffix)」は”com.domainname.appname”の様な形式で入力する。
  • Submitを押す。

プロビジョニングファイル作成

  • 左のメニューから「Provisioning」に移動して「Distribution」タブをクリック
  • 「New Profile」を押して「Create iPhone Distribution Provisioning Profile」へ移動する。
  • 「Distribution Method」→「App Store」
  • 「Profile Name」→プロファイルの名前。(アプリ名と同じでなくてもOK。ただ同じ方が分かりやすい。)
  • 「Distribution Certificate」→公開用証明書作ったときの名前が表示されている
  • 「App ID」→作成したAppIDを選択
  • 「Devices (optional)」→Ad Hoc版を作成する場合は必要ですが、今回はApp Storeようなので選択なし
  • 「Submit」クリック
  • しばらくするとStatusが「Pending」から「Active」になるので、Downloadを押してダウンロード・保存
  • 「[Profile Name].mobileprovision」を適当な場所に保存
  • ダブルクリックすると、Xcodeのオーガナイザに登録されます。

iTunesConnectにアプリの情報登録

事前準備

  • Store用の説明文の用意します。ちなみに、iPhone用のStoreは一行全角23文字表示されます。
  • スクリーンショットの用意。形式は、jpg / tif / png。下記はサイズ。単位はpxです。
    (iPhoneの場合のサイズ:960×640, 960×600, 640×960, 640×920, 480×320, 480×300, 320×480, 320×460)
    (iPadの場合のサイズ:1024×768, 1024×748, 768×1024, 768×1004)
  • Store用アイコンを用意。形式は、jpg / tif / pngで、サイズは512×512。

iTunes Connectにてアプリの情報を登録する。

iTunesConnectはiOS Dev Centerからアクセスします。

「Manage Your Applications」の「Add New App」をクリック 。

初回のみ”Company Name”(Storeに表示される名前)を入力。

第1ページ

  • 「Default Language」を設定。
  • Application name – アプリの名前 。
  • SKU Number – 他のアプリとかぶらない任意の番号 。自分はその日の日付と0001。
  • Bundle ID – 先ほど作ったやつ。今からアップロードするアプリと対応されます。

第2ページ

  • Availability Date – app storeに出る日。
    (※審査が終わった日か、ここで設定した日の遅い方が採用されます。)
  • Price Tier – 値段を設定します。
  • Discount for Educational Institutions- 教育機関向けの場合、割引するか。
  • 売る国を選ぶ場合ここで設定します。デフォルトだと、全部選択されてます。

第3ページ

  • 最初に選んだ「Default Language」の表示設定です。
    (※Englishで作成して、後で日本語版を作成しました。)
  • Version Number – バージョン。プロジェクトと同じ数字。基本は1.0。
  • Description – アプリの説明。
  • Primary Category – 自分が思う1番のカテゴリを選択。
  • Secondary Category – 自分が思う2番のカテゴリを選択。
  • Keywords – 検索キーワード。カンマ区切りで入力。
    (※100bytes以内。いくらでも入力できてしまうので、優先順位の高い順に記入していくと無難)
  • Copyright – 例を参考に入力。
  • Contact Email Address – 連絡先のメアド。
  • Support URL – アプリのサポートのためのサイトを記入。
  • App URL (optional) – 自分のアプリの紹介サイトを記入。
  • Review Notes (optional) – アプリ審査の為の追加情報。
    (※ユーザー登録が必要なアプリなら、サンプルのアカウントを記入が必須)
  • Rating – レーティング。適切に選択。
    (※Apple側であとで変更する場合があるようです)
  • EULA – End User License Agreement (EULA)を自分で設定したい場合はここで設定する。
  • Images – 先ほど用意しておいたスクリーンショットとかを指定する。
    (※サイズが間違ってる場合はErrorとなります。)
  • 確認画面みたいなのになるので、「View Details」で確認する。

別言語を追加する場合

  • 「Manage Localizations」をクリック。
  • 「Add New Language」をクリックして、言語を追加していく。
  • Languageを選び、同じ事を選択言語でやる。
  • すべて終わったら「Done」をクリック。
    (※ここまでやると、アプリの専用ページやURLができるので、アプリURLを使う場合はここから取得する。その際、URLに「/us/」とあれば、「/jp/」に変えておけば日本語のAppStoreURLになります。)
  • 「Ready to Upload Binary」をクリック します。
  • 暗号化技術とかを使っているのか聞かれるので、Yes/Noを選択。
  • そのうちステータスが「Waiting For Upload」になるので、待つ。

アプリのビルド、サブミット

  • Xcodeで「Info.plist」の「Bundle identifier」と「Bundle version」を設定する。
    (※申請内容と合致するようにしましょう)
  • 画面左上にある「Scheme」のプルダウンメニューにある「Edit Scheme」をクリック 。
  • 左側のメニューの中から「Archive」をクリック 。
  • 「Build Configuration」を「Release」か確認して、「OK」をクリック。
    (※Releaseになっていなければ、Releaseにします)
  • 左側にあるプロジェクト名をクリックしたら行ける画面から、上のタブの中の「Build Settings」を選択。
  • 表示を「All」にして、その中の「Code Signing」の「Code Singing Identity」を、申請用につくったのに設定
  • 画面左上にある「Scheme」のプルダウンメニューから「iOS Device」を選択。
    (※シミュレーション用になっているとダメです)
  • 画面上部にあるメニューの「Product」から「Archive」を選択します。
  • 自動的にOrganizerの「Archives」が開くので、右上の「Validate…」をクリックし、IDとパスワードを入力。
  • Applicationを、先ほど登録したアプリ名に。Identityを自分の名前のiPhone DistributionにセットしてNextをクリック。
  • 正常にいけば、正常だよっていうお知らせとともに、右下に「Finish」が表示されるので、クリック。
    (※この時アプリのStatusは「Passed Validation」 )
  • 今度は右上の「Distribute…」をクリック。”Submit to the iOS App Store”を選択してNextを押す。
  • 正常に行けばエラーが出ない。右下のFinishをクリック。
    (※この時アプリのStatusは「Submitted」)
  • アップロードはこれで完了します。
  • iTunes Connectの該当アプリのStausを確認すると、「Waiting For Upload」→「Upload Received」→「Waiting For Review」に変わっているか確認する。

あとは、審査を待つのみ。。。

参考サイト

App StoreへのiPhoneアプリの登録手順のまとめ(Xcode4環境).

Facebookノートで書かれている記事ですが、物凄くしっかりまとまってます。

WordPressをGoArunaにバックアップ

バックアップする必要もないと思ってたので今までしてなかったのですが、折角なのでバックアップをとることにしました。
Serversmanのvpsを借りてるのですが、そこにバックアップをとってもあんまり意味ないので、GoArunaというオンラインストレージサービスにバックアップをとるようにします。

メール添付でファイルを送れるという機能があるのでGoArunaにしました。

目次

  • GoArunaアカウント作成・設定
  • DBバックアップ
  • WordPressファイルバックアップ

GoArunaアカウント作成・設定

GoAruna.

サイトからアカウントします。
[マイページ]->[受信トレイ] から”メールでアップロード”の”有効にする”をクリックします。
すると、アップロード用のメールアドレスが表示されます。

DBバックアップ

DBのバックアップにはWP-DBManagerプラグインを使用します。

WordPress › WP-DBManager « WordPress Plugins.

ファイルをダウンロードして、プラグインフォルダにアップロードするか、管理画面からzipファイルをアップロードしてインストールします。
アクセス権を設定するため、wp-dbmanager 配下にある、htaccess.txt を wp-content/backup-db に .htaccess として移動します。

[root@suusuke ~]# cp plugins/wp-dbmanager/htaccess.txt backup-db/.htaccess
[root@suusuke ~]# chown apache.apache backup-db/.htaccess 

WordPress管理画面メニューから、データベース > DB Options を選択します。

設定画面の [Automatic Scheduling] 欄にメールアドレスを設定する項目があるのでそこに設定します。

今回は、一日一回バックアップをとって、三日に一回最適化、リペアはしないという設定にしました。

WordPressファイルバックアップ

DBだけバックアップをとっても、完全に復元できないので WordPress Backup (by BTE) をつかって、画像、プラグイン、テーマもバックアップを取ります。

» WordPress Backup.

ファイルをダウンロードして、プラグインフォルダにアップロードするか、管理画面からzipファイルをアップロードしてインストールします。

設定 メニュー > WordPress Backup から設定画面で、GoArunaのアップロード用メールアドレスを入力します。

これで、日次バックアップがとれるようになりました。

最後に

Please add an .htaccess file to the backup folder (see here).

とあるので、バックアップディレクトリに.htaccessでWordpress管理画面にログインしてないとバックアップファイルがダウンロードできないように設定して終了です。

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} .*bte-wb/.*
RewriteCond %{HTTP_COOKIE} !^.*wordpress_logged_in.*$ [NC]
RewriteRule . - [R=403,L]
Options All -Indexes

横幅のサイズによってタブのサイズを変える方法

スマートフォンのサイトに限った話では無いですが、横幅(表示領域)によって要素の長さを変えたい時はあると思います。
今回は、横幅によってタブのサイズを変える必要が有ったのでその時の実装メモです。

flexible tabs – jsdo.it – share JavaScript, HTML5 and CSS

初期表示時と画面がリサイズ(スマートフォンの場合は、縦表示→横表示など)された際に、javascriptでタブのサイズを変更するようにしています。
※スマートフォン用に作成したので、IEなどのブラウザではうまく動かないかもです。。。

flexible tabs – jsdo.it – share JavaScript, HTML5 and CSS

PHPのバージョンを管理するphpbrewを使ってみた

バージョンの異なる実行環境を切り替えたり、インストールしたりと管理できるツールとしてはrvm(ruby)perlbrew(perl)nodebrew(node.js)と言ったものが有名所ですが、PHPにもphpbrewというツールがある事を知ったので使ってみました。

c9s/phpbrew · GitHub.

インストール

環境はMac OS X Lionです。
元々、入っているPHPのバージョンは5.3.8でPHP4.4.9はコンパイルして入れたものが入っています。

[suusuke@macbook ~]$ php -v
PHP 5.3.8 with Suhosin-Patch (cli) (built: Nov 15 2011 15:33:15) 
Copyright (c) 1997-2011 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2011 Zend Technologies
[suusuke@macbook ~]$ php4 -v
PHP 4.4.9 (cli) (built: Mar 26 2011 10:08:22)
Copyright (c) 1997-2008 The PHP Group
Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies

phpbrewインストール

c9s/phpbrew · GitHub に書いてある手順どおりインストールします。

[suusuke@macbook ~]$ sudo pear channel-discover pear.corneltek.com
Password:
Adding Channel "pear.corneltek.com" succeeded
Discovery of channel "pear.corneltek.com" succeeded
[suusuke@macbook ~]$ sudo pear install -a -f corneltek/PhpBrew
Password:
downloading PhpBrew-1.0.2.tgz ...
Starting to download PhpBrew-1.0.2.tgz (43,519 bytes)
............done: 43,519 bytes
downloading Universal-1.0.2.tgz ...
Starting to download Universal-1.0.2.tgz (10,805 bytes)
...done: 10,805 bytes
downloading CLIFramework-1.0.6.tgz ...
Starting to download CLIFramework-1.0.6.tgz (8,432 bytes)
...done: 8,432 bytes
downloading GetOptionKit-1.0.0.tgz ...
Starting to download GetOptionKit-1.0.0.tgz (10,801 bytes)
...done: 10,801 bytes
install ok: channel://pear.corneltek.com/Universal-1.0.2
install ok: channel://pear.corneltek.com/GetOptionKit-1.0.0
install ok: channel://pear.corneltek.com/CLIFramework-1.0.6
install ok: channel://pear.corneltek.com/PhpBrew-1.0.2
[suusuke@macbook ~]$ cd ~/
[suusuke@macbook ~]$ git clone git@github.com:c9s/phpbrew.git
Cloning into phpbrew...
Identity added: /Users/suusuke/ssh/github/id_rsa (/Users/suusuke/ssh/github/id_rsa)
remote: Counting objects: 1130, done.
remote: Compressing objects: 100% (436/436), done.
remote: Total 1130 (delta 676), reused 1014 (delta 560)
Receiving objects: 100% (1130/1130), 926.93 KiB | 244 KiB/s, done.
Resolving deltas: 100% (676/676), done.
[suusuke@macbook ~]$ cd phpbrew
[suusuke@macbook phpbrew]$ sudo pear install -f package.xml
install ok: channel://pear.corneltek.com/PhpBrew-1.1.1
[suusuke@macbook ~]$ ./phpbrew init
Phpbrew environment is initialized, required directories are created under

    ~/.phpbrew

Paste the following line(s) to the end of your ~/.bashrc and start a
new shell, phpbrew should be up and fully functional from there:

    source ~/.phpbrew/bashrc

For further instructions, simply run `phpbrew` to see the help message.

Enjoy phpbrew at $HOME!!
[suusuke@macbook ~]$ source ~/.phpbrew/bashrc 

インストールできるバージョンの確認

[suusuke@macbook ~]$ ./phpbrew/phpbrew known
Available stable versions:
	php-5.4.0
	php-5.3.10
	php-5.3.9
	php-5.3.8
	php-5.3.7
	php-5.3.2
	php-5.3.1
Available svn versions:
	php-svn-head
	php-svn-5.3
	php-svn-5.4
Available versions from PhpStas:
	php-5.4.0
	php-5.4.0RC1
	php-5.4.0RC2
	php-5.4.0RC3
	php-5.4.0RC4
	php-5.4.0RC5
	php-5.4.0RC6
	php-5.4.0RC7
	php-5.4.0RC8
	php-5.4.0alpha1
	php-5.4.0alpha2
	php-5.4.0alpha3
	php-5.4.0beta1
	php-5.4.0beta2

インストールできるオプションの確認

[suusuke@macbook ~]$ ./phpbrew/phpbrew variants
Variants
    pdo
    pear
    gd
    openssl
    mysql
    sqlite
    pgsql
    cli
    ftp
    sockets
    apxs2
    debug
    cgi
    soap
    pcntl
    intl
    imap
    kerberos

Example:

    phpbrew install php-5.3.10 +mysql +pdo
    phpbrew install php-5.3.10 +mysql +pdo +apxs2
    phpbrew install php-5.3.10 +mysql +pdo +apxs2=/usr/bin/apxs2

PHP5.4.0をインストールして使ってみる

[suusuke@macbook ~]$ ./phpbrew/phpbrew -d install --no-test php-5.4.0
===> Downloading http://www.php.net/distributions/php-5.4.0.tar.bz2
######################################################################## 100.0%
===> Extracting...
===> Configuring php-5.4.0...
./configure '--prefix=/Users/suusuke/.phpbrew/php/php-5.4.0' '--with-config-file-path=/Users/suusuke/.phpbrew/php/php-5.4.0/etc' '--with-config-file-scan-dir=/Users/suusuke/.phpbrew/php/php-5.4.0/var/db' '--with-pear=/Users/suusuke/.phpbrew/php/php-5.4.0/lib/php' '--disable-all' '--enable-bcmath' '--enable-ctype' '--enable-dom' '--enable-exif' '--enable-fileinfo' '--enable-filter' '--enable-hash' '--enable-fpm' '--with-xsl' '--with-tidy' '--with-xmlrpc' '--enable-json' '--enable-libxml' '--enable-mbregex' '--enable-mbstring' '--enable-phar' '--enable-session' '--enable-short-tags' '--enable-simplexml' '--enable-sockets' '--enable-tokenizer' '--enable-xml' '--enable-xmlreader' '--enable-xmlwriter' '--enable-zip' '--with-bz2' '--with-mhash' '--with-pcre-regex' '--with-zlib=/opt/local' '--with-libxml-dir' '--with-curl=/opt/local' '--with-gettext=/opt/local' '--with-libedit=/usr' '--with-readline' '--enable-pdo' '--enable-cli'
configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.
configure: error: bz2 module requires libbz2 >= 1.0.0
===> Building php-5.4.0...
make: *** No targets specified and no makefile found.  Stop.
Skip tests
Build finished: 0 minutes.
===> Installing...
---> Copying php.ini-development 
Source directory: 
Done!
To use the newly built PHP, try the line(s) below:

    $ phpbrew use php-5.4.0

Or you can use switch command to switch your default php version to php-5.4.0:

    $ phpbrew switch php-5.4.0

あれ!?

configure: error: bz2 module requires libbz2 >= 1.0.0

configureでエラーになる。。。

with-bz2オプションでlibbz2のパス指定すればいいのかなと思って、パラメータで指定してみたがnot definedとなって、パラメータでは指定できないみたい。。。

[suusuke@macbook ~]$ phpbrew -d install php-5.4.0 --with-bz2=/usr/lib/libbz2.dylib 
===> Downloading http://www.php.net/distributions/php-5.4.0.tar.bz2
######################################################################## 100.0%
===> Extracting...
Variant --with-bz2 is not defined.

わからない。。。I don’t know…

追記

libbz2がインストールされてないんじゃないの?とコメント頂いたので、調べてみる。

[suusuke@macbook ~]$ ll /usr/lib/libbz2.dylib 
lrwxr-xr-x  1 root  wheel  16  9 20 02:36 /usr/lib/libbz2.dylib -> libbz2.1.0.dylib

あるよね。。。
ホントに!?

macportsで調べる

[suusuke@macbook ~]$ sudo port installed
Password:
Warning: port definitions are more than two weeks old, consider using selfupdate
The following ports are currently installed:
  apache2 @2.2.10_0+darwin_9 (active)
  ...

macportsには無かった、取り合えずmacportsが古いといっているのでselfupdateしてmacportsで入れてみる。

[suusuke@macbook ~]$ sudo port -d selfupdate
[suusuke@macbook ~]$ sudo port upgrade outdated
[suusuke@macbook ~]$ sudo port upgrade installed

※途中port upgradeでmysqlのアップデートに失敗してmysqlがcleanされてしまい、コンパイルするのに一日費やしてしまった。。。

[suusuke@macbook ~]$ sudo port clean mysql5-devel
[suusuke@macbook ~]$ sudo port install mysql5-devel configure.compiler=llvm-gcc-4.2

コンパイラーをllvm-gcc-4.2するとコンパイルに成功した。

macports自信とライブラリをアップデートしたら、問題なくphpbrew -d install php-5.4.0に成功した。
bz2関連のライブラリが古かったのだろうか。。。。

Serversman@vpsにてSSLを設定する方法

このブログはServersman@vpsのCentOS上で動いています。
ブログの他にもいくつかサイトが有って、SSLの必要が出てきたので設定した方法を書きます。
また、証明書は独自の証明書(オレオレ証明書)を使います。

目次

  • mod_sslインストール
  • Makefileで証明書(.crt)ファイルの作成
  • Apache(mod_ssl)の設定

mod_sslインストール

[root@suusuke ~]# yum -y install mod_ssl

Makefileで証明書(.crt)ファイルの作成

[root@suusuke ~]# cd /etc/pki/tls/certs/
[root@suusuke certs]# make server.crt
umask 77 ; \
	/usr/bin/openssl genrsa -des3 1024 > server.key
Generating RSA private key, 1024 bit long modulus
.....++++++
.................................++++++
e is 65537 (0x10001)
Enter pass phrase:
Verifying - Enter pass phrase:
umask 77 ; \
	/usr/bin/openssl req -utf8 -new -key server.key -x509 -days 365 -out server.crt -set_serial 0
Enter pass phrase for server.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:JP
State or Province Name (full name) [Berkshire]:Miyagi
Locality Name (eg, city) [Newbury]:Sendai
Organization Name (eg, company) [My Company Ltd]:suusuke
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:Keisuke Suzuki
Email Address []:k.suke.suzuki@gmail.com

Apache(mod_ssl)の設定

バーチャルホストにて、複数サイトを運用しているので、バーチャルホスト毎に、httpd-vhosts-[サイト名]-ssl.confという設定ファイルにして個別に設定する。
まずは、ssl.confの<VirtualHost _default_:443\></VirtualHost>をコピーしてコメントアウトする。

[root@suusuke certs]# vi /etc/httpd/conf.d/ssl.conf 

#<VirtualHost _default_:443>
...
この間の設定を全部コピーしてコメントアウト
...
#</VirtualHost>

すでに、httpd-vhosts-[サイト名].confという名前でバーチャルホストを設定しているので、その設定ファイルをコピーしてhttpd-vhosts-[サイト名]-ssl.confという名前の設定ファイルを作成する。
また、ssl.confでコピーしたものを追記する。

[root@suusuke ~]# cp /etc/httpd/conf.d/httpd-vhosts.conf /etc/httpd/conf.d/httpd-vhosts-ssl.conf
[root@suusuke ~]# vi /etc/httpd/conf.d/httpd-vhosts-ssl.conf 

<VirtualHost *:443> ←ポート変更
    ServerName suusuke.info
    DocumentRoot /var/www/html
    ErrorLog logs/suusuke.info-error_log
    CustomLog logs/suusuke.info-access_log combined env=!no_log
    <Directory "/var/www/html">
        Options FollowSymLinks
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>

    #ここから-----------------------------------------------------------------------
    SSLEngine on
    SSLProtocol all -SSLv2
    SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
    SSLCertificateFile /etc/pki/tls/certs/server.crt
    SSLCertificateKeyFile /etc/pki/tls/certs/server.key
    <Files ~ "\.(cgi|shtml|phtml|php3?)$">
        SSLOptions +StdEnvVars
    </Files>
    <Directory "/var/www/cgi-bin">
        SSLOptions +StdEnvVars
    </Directory>
    SetEnvIf User-Agent ".*MSIE.*" \
             nokeepalive ssl-unclean-shutdown \
             downgrade-1.0 force-response-1.0
    CustomLog logs/ssl_request_log \
              "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
    #ここまで-----------------------------------------------------------------------
</VirtualHost>

Apache再起動

[root@suusuke ~]# /etc/rc.d/init.d/httpd restart

https://suusuke.infoにアクセスしてsslでアクセスできることを確認してオーケー!

大量の.htpasswdを作成する方法

BASIC認証する際に.htacessで設定して、パスワードファイル(任意の名前).htpasswdを作成します。

大量のユーザーとパスワードを設定する場合はいちいちhtpasswdコマンドでユーザーを追加するのは大変です。

そんな時にはHtpsserというソフトを使うと簡単に大量のユーザーの.htpasswdファイルを作成できます。

Htpasserの詳細情報 : Vector ソフトを探す!.

使い方は非常に簡単で、ユーザー名とパスワードをタブ区切りのテキストで用意しておきそれをインポートすると.htpasswdファイルが出来上がります。

また、HtpasserはWindowsのソフトなのでMacやLinuxで生成する場合はこちらのshellを実行すると生成できるようです。
(userlistというファイルに[user]:[pass]というフォーマットでファイルを用意しておく)

#!/bin/bash

for fullname in `cat ./userlist` ; do
user=`expr $fullname : '\(.*:\)'`
user=`echo $user | sed 's/://'`
pass=`expr $fullname : '.*:\(.*\)'`

expect -c "
spawn htpasswd -d ./passwd-file $user
expect \"New password: \" ; send \""$pass"\r\"
sleep 1
expect \"Re-type new password: \" ; send \""$pass"\r\"
expect eof
" >> /var/log/adduser/passwd.log
done

phpでxmlを出力して受け取る方法

phpでxml関連のライブラリーは結構ありますが、一番手軽なのはPEARのXML_Serializerだと思います。
※Cakeとか、フルスッタクのフレームワークに入ってるxmlのコンポーネントがある場合はそちらのほうが手軽です。

目次

  • XML_Serializerインストール
  • XMLの出力
  • XMLの受け取り

XML_Serializerインストール

PEARでインストール

pear install XML_Serializer

手動でインストール

XML_Serializer.

からライブラリーをダウンロード、解凍して、適当な場所に保存する。

XML_UtilXML_Parserと依存しているので、合わせてダウンロードしてインストールしておく。
※PEARはインストール済みを想定。されてない場合は、インストールする必要がある。

XMLの出力

require_once 'XML/Serializer.php';

$data = array('aaa' => 'bbb', 'ccc' => 'ddd');

$options = array(
                 "indent"         => " ",
                 "linebreak"      => "\n",
                 "typeHints"      => false,
                 "addDecl"        => true,
                 "encoding"       => "EUC-JP",
                 "rootName"       => "result",
                 "defaultTagName" => "item",
                 );
$serializer = new XML_Serializer($options);
$status = $serializer->serialize($data);

if( $status === true ) {
    $xml = $serializer->getSerializedData();
    header ("Content-Type: text/xml; charset=EUC-JP");
    echo $xml;
    exit;
}
exit;

文字コードはEUC-JPに指定しています。

XMLの受け取り

require_once 'XML/Unserializer.php';

$header = array(
    "User-Agent: ".$_SERVER["HTTP_USER_AGENT"]
);
$options = array(
    "http" => array(
        "method"  => "GET",
        "content" => http_build_query(array()),
        "header"  => implode("\r\n", $header)
    )
);

$api_uri = 'http://example.com/'; // xmlを出力するURL
$xml = file_get_contents($api_uri, false, stream_context_create($options));
$obj = new XML_Unserializer();

$obj->setOption("parseAttributes", true);

$status = $obj->unserialize($xml);
if ($status === true) {
    $xml_data = $obj->getUnserializedData();
    mb_convert_variables('EUC-JP', 'UTF-8', $xml_data);
    print_r($xml_data['item']);
}

exit;

こんな感じで、xmlを読み込むことができます。
オプションは

XML_Unserializer Options.

が参考になります。
ちなみに、file_get_contentsでGETでパラメータ付きリクエスト送りたい場合は、

file_get_contents() で GET リクエストを送る場合の値は URL に持たせる | ウェブル.

xmlを出力する方でBASIC認証を指定したい場合もあると思いますが、file_get_contentsではBASIC認証されたディレクトリのファイルも取得できます。

$header = array(
    "Authorization: Basic ".base64_encode("User:Pass"),
    "User-Agent: ".$_SERVER["HTTP_USER_AGENT"]
);