アーカイブ

‘PHP’ タグのついている投稿

PHPで連想配列からセレクトボックスを生成する自作関数

2010 年 11 月 16 日 コメントはありません

以前に作成したので忘備録として。

毎回毎回セレクトボックスのHTMLを書くのが面倒だったので関数化してみました。

続きを読む…

カテゴリー: プログラミング タグ: ,

PHP + fcgi + suEXEC + php.ini 設定メモ

2010 年 9 月 1 日 コメントはありません

前回PHP + fcgi + suEXEC 設定メモを投稿しましたが
今回はさらにphp.iniを個別に適用する方法について記載します。

  1. php-cgi.shを利用する場合
    1. 前回作成したシェルスクリプトを書き換えます。
      適用する設定毎にファイルが必要になります。
    1. 指定したphp.iniファイルを利用する
      1. #!/bin/sh
        exec /usr/bin/php-cgi -c /home/username/public_html/php.ini
    2. デフォルトのphp.iniから特定のディレクティブのみ変更する
      1. #!/bin/sh
        exec /usr/bin/php-cgi -d display_errors=0 -d extension=http.so
  2. php-cgiを利用する場合
    1. シェルスクリプトを利用せずphp-cgiのコピーを利用します。
      Apacheの設定(httpd.conf)を変更するだけなので便利です。
    2. 準備
      1. VPSへSSHで接続
      2. $ su
      3. # cp /usr/bin/php-cgi /var/www/username/php-cgi
      4. # chown username:username /var/www/username/php-cgi
      5. # chmod 700 /var/www/username/php-cgi
    1. 指定したphp.iniファイルを利用する
      1. FCGIWrapper “/home/kubota/php-cgi -c /home/username/public_html/php.ini” .php
    2. デフォルトのphp.iniから特定のディレクティブのみ変更する
      1. FCGIWrapper “/home/kubota/php-cgi -d display_errors=0 -d extension=http.so” .php

私はphp-cgiをコピーして利用するよう設定しました。
お好みで使い分けてみてくださいね。

そういえば、このブログのバナーを作りました&貰いました。
サイドバーに貼ってありますので、暇な方は是非ご覧くださいw

追伸 : このブログはYahoo!に見放されている模様><;
「個人的自由帳」の検索結果 – Yahoo!検索
個人的自由帳 – Google 検索
でも、まだ希望はある…はずw

カテゴリー: サーバ タグ: , ,

PHP + fcgi + suEXEC 設定メモ

2010 年 8 月 28 日 コメントはありません

SaaSesのVPS上で設定した際の覚え書きです。
OSはCentOS 64bit版です。

  1. Virtualminの設定
    1. mod_fcgidが初期状態から入っているのかは確認していませんが
      自力でmod_fcgidがインストールできる場合はVirtualminは不要かも?
    1. Virtualminをインストール
    2. Virtualminを日本語化
      1. 言語ファイルをUTF-8へ変換+リネーム
        1. config.info.ja_JP.euc → config.info.ja_JP.UTF-8
        2. ja_JP.euc → ja_JP.UTF-8
      2. Virtualmin上へ言語ファイルを追加
        1. module.infoは上書きする必要無し
    3. ブラウザでVIrtualminを表示
    4. システム設定→設定情報の再確認
      1. 以下のように表示されれば完了です。
        このシステムでVirtualminを動かすための準備が済みました。
  2. fcgiの設定
    1. VPSへSSHで接続
    2. $ su
    3. # /usr/sbin/suexec -V
      1. 以下の赤字部分をメモします。
        -D AP_DOC_ROOT=”/var/www
    4. # mkdir /var/www/username
    5. # vi /var/www/username/php-cgi.sh
      1. php-cgi.shの内容は以下の通りです。
        #!/bin/sh
        exec /usr/bin/php-cgi
    6. # chown username:username /var/www/username
    7. # chown username:username /var/www/username/php-cgi.sh
    8. # chmod 700 /var/www/username/php-cgi.sh
    9. # vim /etc/httpd/conf/httpd.conf
      1. 以下のような設定を追加します。
        SuexecUserGroup username username
        AddHandler fcgid-script .php
        FCGIWrapper /var/www/username/php-cgi.sh .php
        Options +ExecCGI

こんな感じで。
ユーザ毎にphp-cgi.shを作成する点がポイントですお(^ω^ )
どこか間違ってたら誰か教えてください><;

カテゴリー: サーバ タグ: , ,

PHPのヒアドキュメント内で関数(htmlspecialchars等)を利用する方法

2010 年 7 月 1 日 コメント 4 件

もう7月です。
今年も半分が終わってしまいました(^ω^;)

たまにはプログラミングっぽい話題を。

PHPで開発をやっていて「これは便利!」と思い、
現在も愛用している方法を紹介してみます。
(改めてググってみてもすぐには見つからなかったので(^ω^;))

PHPで開発を行っている際に
echoで複数行を出力したくなる場合があるかと思います。
(複数行を変数へ代入したい場合も含みます。)

そういった場合、私はヒアドキュメントを用います。

また、以下のようにヒアドキュメント内で
変数を展開できる機能は非常に有用です。

PHPソース:

<?php
$tempstr = ‘2行目’;
 
echo <<< EOT
1行目<br />
{$tempstr}<br />
3行目
EOT;

?>

出力:

1行目
2行目
3行目

ただし、関数は展開されないため、
htmlspecialchars等を利用したい場合に困ります。

PHPソース:

<?php
$tempstr = ‘<a href=”http://www.google.com/”>2行目</a>’;
 
echo <<< EOT
1行目<br />
{htmlspecialchars($tempstr)}<br />
3行目
EOT;

?>

出力:

1行目
{htmlspecialchars(2行目)}
3行目

これでは、$_GETや$_POSTで受け取ったデータを出力する際に困ってしまいます。
安全に出力するためには以下のように記述します。

PHPソース:

<?php
$tempstr = ‘<a href=”http://www.google.com/”>2行目</a>’;
$tempstr = htmlspecialchars($tempstr);
 
echo <<< EOT
1行目<br />
{$tempstr}<br />
3行目
EOT;

?>

出力:

1行目
<a href=”http://www.google.com/”>2行目</a>
3行目

こうする事で安全に出力できはしますが
正直な所、出力したい変数が多い場合は面倒ですよね。
もっとスマートに記述したい所です。

そこで、htmlspecialcharsをクラス化し変数に代入してみます。
実際には以下のようなコードをPHPソースに追加します。

PHPソース:

<?php
class HSC_Class {
  public function enc($output){
    return htmlspecialchars($output);
  }
}
$hsc = new HSC_Class();
?>

すると、以下のような形で記述できるようになります。

PHPソース:

<?php
$tempstr = ‘<a href=”http://www.google.com/”>2行目</a>’;
 
echo <<< EOT
1行目<br />
{$hsc->enc($tempstr)}<br />
3行目
EOT;

?>

出力:

1行目
<a href=”http://www.google.com/”>2行目</a>
3行目

いかがでしょうか。
事前にhtmlspecialcharsを通す必要がなくなった分、
PHPソースが分かりやすく簡素になったと思いませんか。

「$hsc->enc()」とする事により、
クラス「HSC_Class」内の関数「enc」を呼び出している事になります。

このように、
1. 必要な関数をクラス化
2. 作成したクラスを変数へ代入
3. ヒアドキュメント内で変数から関数を呼び出し
とすることにより、ヒアドキュメント内で関数が利用できます。

よろしければお試しくださいね。

そうそう、PHPの開発にはEclipseがお勧めです。
(メモリに余裕があればAll in Oneパッケージが便利です。)
初期設定が多少面倒ですが、それさえ乗り越えればかなり快適です(^ω^ )
(ちなみに、上記のPHPコード部分の配色はEclipseの物を再現してみました。)

カテゴリー: プログラミング タグ: ,