PHPでエクセルを読み込んで表示させるライブラリ「PHP Excel Reader」

0

20100429 01 PHPでエクセルを読み込んで表示させるライブラリ「PHP Excel Reader」
PHP Excel Reader」はエクセルをPHPで読み込む事ができるライブラリです。
セルの値や書式を取得してPHPで扱う事が簡単にできるようになります。

jQueryのバリデートをPHPで書けるライブラリ「ValidForm Builder」

0

20100413 05 jQueryのバリデートをPHPで書けるライブラリ「ValidForm Builder」
フォームの入力チェックにサーバーサイドとクライアントサイドのどちらを使われていますか?

実際にユーザービリティやシステム設計を考えるとどちらのチェックも必要になる事が多いのですが、両方書くのは結構大変です。

そこでPHPコードを書くだけでjQueryのバリデートも同時に出力しているライブラリ「ValidForm Builder」の登場です。

詳しくは以下

PHP製のテンプレートライブラリ「Template Inheritance」

0

20100403 01 PHP製のテンプレートライブラリ「Template Inheritance」
Template Inheritance」はPHPで使えるテンプレート用のライブラリです。
ヘッダーやフッターの要素をincludeするかのように設定可能です。
プログラムは全てPHPコードで記述するため、テンプレート言語を学ぶ必要がないのが特徴です。

全体レイアウトを1ファイルで管理する際にSmartyを使うほどでも、、、な小規模サイトに良さそうです。

詳しくは以下

オープンソースのPHP製アクセス解析ソフト「SlimStat」

0

20100310 041 オープンソースのPHP製アクセス解析ソフト「SlimStat」
SlimStat」はオープンソースでできたアクセス解析ソフトです。Google Analyticsのような解析ソフトを自前で構築する際(Analyticsが何かの理由で使えない場合)のためなどに、覚えておいても良いかもしれません。

詳しくは以下

既存サイトに簡単に組み込みができるCMS「Phpns」

0

20100308 03 既存サイトに簡単に組み込みができるCMS「Phpns」

執筆時のバージョン2.2.4

Phpnsは既存のサイトに簡単に組み込む事できるCMSです。通常CMSを使用する場合は独自のディレクトリ構造の中に公開ディレクトリがある場合が多いのですが、Phpnsは吐き出された1行のコードを読み込むだけでCMSが設置できるようになっています。

PHPなどに詳しく無い方でも簡単に設定できるのも魅力です。

詳しくは以下

CentOSにAPCをインストールする方法

0

apc21 CentOSにAPCをインストールする方法
APCはPHPの中間コードのキャッシュや最適化を行う拡張モジュールです。基本的にPHPを使うサーバーに全て入れてよいようです。
本日とあるサーバーにインストールしたのでやり方をメモ。

環境

まずは環境ですが、CentOS 4.4 + PHP 5.1.6 です。

事前準備

まず、peclが入っているかどうか調べます。

# pecl list-all apc
All packages:
=============
Package            Latest   Local
pecl/KTaglib       0.2.0           Library to edit audio properties and tags on MPEG and OGG files
pecl/FliteTTS                      Text to speech voice synthesis for PHP
pecl/Ovrimos                       Ovrimos interface
pecl/DTrace        1.0.3           A Solaris Dtrace provider
pecl/inclued       0.1.0           Clued-in about your inclueds
pecl/zookeeper     0.1.0           PHP extension for interfacing with Apache ZooKeeper
…
…
…
…

インストールされているパッケージが表示されれば、このSTEPは読み飛ばしてOKです。
なければインストールます。

# yum install -y php-pear
Setting up Install Process
Setting up repositories
update                    100% |=========================|  951 B    00:00
base                      100% |=========================| 1.1 kB    00:00
…
…
…

phpizeもインストールします。

# yum install -y php-devel

apxsも無ければインストール

# yum install -y httpd-devel

これでやっとpeclがインストールできます。

インストール

peclコマンドでインストールできます。

# pecl install APC

無事にインストールが完了すると以下のようなメッセージがでます。

Build process completed successfully
Installing '/var/tmp/pear-build-root/install-APC-3.0.19//usr/lib/php/modules/apc.so'
install ok: channel://pecl.php.net/APC-3.0.19
You should add "extension=apc.so" to php.ini

ふむふむ。php.iniに追加しろって事ですね。
って事でphp.iniに以下の行を追加。場所はどこでもかまいません。

extension=apc.so

iniファイルを編集したらapacheを再起動します。

これでとりあえず作業は完了です。
phpinfoの画面でapcの項目があるか確認します。

apc1 CentOSにAPCをインストールする方法

アップグレード

apcのアップグレードは以下のコマンドで。

# pecl upgrade apc

ベンチマーク

ApacheBenchでどのくらい効果が変わったか測定します。
1000件のリクエストを100の同時接続で計測した結果です。

# ab -n 1000 -c 100 http://127.0.0.1/*****/test.php

Benchmarking 127.0.0.1 (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Finished 1000 requests

Server Software:        Apache/2.0.63
Server Hostname:        127.0.0.1

Document Path:          /*****/test.php
Document Length:        1257 bytes

Concurrency Level:      100
Time taken for tests:   13.193656 seconds
Complete requests:      1000
Failed requests:        557
   (Connect: 0, Length: 557, Exceptions: 0)
Write errors:           0
Total transferred:      1897728 bytes
HTML transferred:       1504335 bytes
Requests per second:    75.79 [#/sec] (mean)
Time per request:       1319.366 [ms] (mean)
Time per request:       13.194 [ms] (mean, across all concurrent requests)
Transfer rate:          140.45 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    5  17.9      0      80
Processing:    74  923 879.0    498    5931
Waiting:       56  919 880.2    497    5930
Total:        102  929 877.3    502    5931

Percentage of the requests served within a certain time (ms)
  50%    502
  66%    974
  75%   1209
  80%   1371
  90%   2181
  95%   2667
  98%   3048
  99%   4531
 100%   5931 (longest request)

トータルで13秒でした。
ふーむ。早くなってるんですかね。念のためapcを無効にして再度ベンチを図ってみました。

# ab -n 1000 -c 100 http://127.0.0.1/*****/test.php

Benchmarking 127.0.0.1 (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Finished 1000 requests

Server Software:        Apache/2.0.63
Server Hostname:        127.0.0.1
Server Port:            80

Document Path:          /*****/test.php
Document Length:        1257 bytes

Concurrency Level:      100
Time taken for tests:   32.801446 seconds
Complete requests:      1000
Failed requests:        3
   (Connect: 0, Length: 3, Exceptions: 0)
Write errors:           0
Total transferred:      1651341 bytes
HTML transferred:       1258341 bytes
Requests per second:    30.49 [#/sec] (mean)
Time per request:       3280.145 [ms] (mean)
Time per request:       32.801 [ms] (mean, across all concurrent requests)
Transfer rate:          49.14 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0   62 171.8      0     599
Processing:   288 2895 1431.8   2741   22702
Waiting:        8 2886 1441.0   2740   22701
Total:        616 2958 1410.4   2760   23294

Percentage of the requests served within a certain time (ms)
  50%   2760
  66%   2896
  75%   2959
  80%   2987
  90%   3437
  95%   4084
  98%   6956
  99%   9495
 100%  23294 (longest request)

トータルで32秒でした。おお!19秒も違いますね。
まさか、倍以上違うとは、、、

まだ入れてない方はぜひ。

参考

ちなみに高速化モジュールは他にも以下のようなものがあります。

  • eAccelerator
  • PHPA(PHP Accelerator)
  • XCache

今回はyumから入れたいという理由でAPCを採用しました。

導入にあたっては以下の記事を参考にさせていただきました。ありがとうございます。

APC(Alternative PHP Cache)再び – Do You PHP?

PHP(というかWordPress)高速化のためにAPC(Alternatice PHP Cache)入れた – IDEA*IDEA ~ 百式管理人のライフハックブログ

CakePHPで認証付きの静的ページを作る

1

CakePHP1.2で管理者用の静的ページを作る(認証付き)というエントリーを見つけました。

静的ページで良いんだけど認証ユーザーにだけ見せたい場合とかってみんなどうやってるんでしょうね。自分のやり方を忘れないためにエントリー。

やり方としてはPagesにアクセスされた際にapp_controllerにて、ログインユーザー以外は非表示になるよう処理を振り分けます。

コードはこんな感じです。

<php
class AppController extends Controller {
    var $lockedPages = array('agreement');
    function beforeFilter()
    {
        // pages controllerかどうかをチェック
        if ($this->name == 'Pages')
        {
            // pagesなら引数を受け取る
            $path = $this->passedArgs;

            // 認証ユーザーしか閲覧できないページか調べる
            if (isset($path[0]) && in_array($path[0], $this->lockedPages))
            {
                //ここでpagesのdisplayをロック
                $this->Auth->deny('display');
            }
        }
    }
}?>

$lockedPagesに、認証ユーザーにだけ見せたいPageを配列で指定するだけで簡単に量産することが可能です。
これだとルーティングも特に変更する必要はありません。

どっかの記事にのってたのを参考にしたはずなんですが、元記事が見つけられませんでした。

pages_controllerをapp以下に持ってきた方が色々カスタマイズするには便利なんだけど、静的ページを見せたいだけならいっつもこんな感じです。

PHPでメールアドレスをスパム収集から回避する「hide_email」

0

hide email PHPでメールアドレスをスパム収集から回避する「hide email」
hide_emailはPHPでメールアドレスをソースから隠す関数です。

通常メールアドレスをそのままHTMLに記述してしまうとロボットなどにアドレスを収集され、ものすごいスパムの嵐を体験することになってしまいます。

この関数を使用すると、JavaScriptを生成し、ロボットなどがメールアドレスだと認識できないようにします。

以下のコードで実行可能なようです。

<php
echo hide_email('myadress@example.com');

function hide_email($email) {
    $character_set  = '+-.0123456789@ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz';
    $key = str_shuffle($character_set); $cipher_text = '';  $id = 'e'.rand(1,999999999);
    for ($i=0; $i<strlen($email); $i+=1) $cipher_text.= $key[strpos($character_set,$email[$i])];
        $script = 'var a="'.$key.'";var b=a.split("").sort().join("");var c="'.$cipher_text.'";var d="";';
        $script.= 'for(var e=0;e<c.length;e++)d+=b.charAt(a.indexOf(c.charAt(e)));';
        $script.= 'document.getElementById("'.$id.'").innerHTML="<a href=\\"mailto:"+d+"\\">"+d+"</a>"';
        $script = "eval(\"".str_replace(array("\\",'"'),array("\\\\",'\"'), $script)."\")";
        $script = '<script type="text/javascript">/*<![CDATA[*/'.$script.'/*]]>*/</script>';
    return '<span id="'.$id.'">[javascript protected email address]</span>'.$script;
 }
?>

サイトにはJavaScriptを生成してくれるジェネレータもありますので、興味のある方は見てみてください。

WEBサーバーのファイルを管理できるWordPressプラグイン「AjaXplorer」

0

ajaxplorer WEBサーバーのファイルを管理できるWordPressプラグイン「AjaXplorer」
AjaXplorerはFTP接続すること無く、WEBサーバー上のファイルを管理する事ができるツールです。PHPとJavaScriptを使用することでエクスプローラー風の画面を表示し、自由にファイルを操作することが可能です。

特徴的なのはGoogle Analyticsを使用してどのファイルがダウンロードされたかなどの統計が取れることです。
スタンドアロンなPHPスクリプトも用意されているようですが、WordPressに組み込むことも可能になっているため、初心者でも簡単に使用することが可能になってます。

ファイルはサムネイル表示や削除など、通常のエクスプローラーと変わらない操作を指定することが可能です。
データベースは特に使用していないとの事なので、PHP5が使用可能であれば動作するようです。

ユーザーにサーバーのファイルを操作させる場合に使用してみるのはいかがでしょうか。

クロスドメインの制約を外す事ができるproxy「Simple PHP Proxy」

2

simplephpproxy クロスドメインの制約を外す事ができるproxy「Simple PHP Proxy」

JavaScriptやActionScriptで外部のXMLを読み込む場合などにクロスドメインの制約で読み込めない場合があります。
Flashの場合は外部サイトにcrossdomain.xmlを設置してもらったりする、JavaScriptの場合はJSONPを使用するなど対応方法はありますが、全ての案件に対応可能なわけではないと思います。

そんな外部との連携でどうしようもできない時に使用したいのが今回ご紹介するSimple PHP Proxyです。
これは外部サイトのデータをPHPで取得する事によって、自ドメイン内でデータを表示する事ができるproxyシステムです。

外部サイトにアクセスする際には以下のオプションを指定できるようです。

  • クッキーを送信
  • Userエージェントを送信
  • GETかポストか
  • ヘッダーを送信

使い方

使い方は簡単です。
設置したPHPファイルに「url」というクエリーを追加するだけになります。

例えば以下のような感じです。

http://設置したURL/ba-simple-proxy.php?url=http://blog.verygoodtown.com/

Cookieを送信する場合は「send_cookies」という値を1に設定します。

http://設置したURL/ba-simple-proxy.php?url=http://blog.verygoodtown.com/&send_cookies=1

proxyを設置されたい方は検討してみてはいかがでしょうか。