アクセスカウンタ
読者登録
メールアドレスを入力して登録する事で、このブログの新着エントリーをメールでお届けいたします。解除は→こちら
現在の読者数 0人
プロフィール
月読☆彡
オーナーへメッセージ
QRコード
QRCODE

2007年09月25日

さくらインターネット「phpをhtmlで動かしたい」

さくらインターネットでphpを拡張子phpとして表示するのではなく、htmlとして見せたい場合

[1] /usr/local/bin/配下にあるphpを、php化したいhtmlのあるディレクトリ配下にコピーします。
[2]そのphpをphp.cgiにリネームします。
[3]同じディレクトリ内に.htaccessを配置。
AddHandler myphp-script .html
Action myphp-script /php.cgi

を記述する。

参考:小粋空間:.html のままPHPを有効にする

これで、php化したhtmlが見られるとのことです。
しかし、私が管理している大半のさくら共用サーバでは500 Internal Server Errorになってしまいました。

以下、同じように500 Internal Server Errorの原因チェック。
[1] ディレクトリのパーミッション、php.cgiのパーミッションが705もしくは755になっているか 。
[2] .htaccessの綴りはあっているか 。
[3].htaccessの最後は改行されているか 。
[4] .htaccessをアスキーモードでアップロードしているか 。

上記の確認・変更をしてもダメな場合はtelnetで直接乗り込んでコピー、リネーム、作成を行う。
原因はたぶん改行コードかFTPでアップするときの何らかのミスが原因だろうと思う。

telnetでの作業
[1]phpが置いてある/usr/local/bin/に移動
# cd /usr/local/bin/

[2]phpをコピーする
# cp php /home/自分のディレクトリ名/www/置きたいディレクトリ名/

[3]リネームする
# cd /home/自分のディレクトリ名/www/置きたいディレクトリ名/
# php php.cgi

[4]パーミッションを755(または705)に変更する
# chmod 755 php.cgi

[5].htaccessを新規に作成して保存
# vi .htaccess
# AddHandler myphp-script .html
# Action myphp-script /php.cgi
# :wq

[2]まで行えばFTPでリネーム、パーミッション変更し、さくらのコントロールパネルからファイルマネージャーにアクセスし、.htaccessを作成しても正常に動作した。  

Posted by 月読☆彡 at 16:52Comments(4)

2007年09月21日

予期しないエスケープ文字

フォーム書き込み時に勝手に「¥」(バックスラッシュ)が付いてしまった。。。
例えば、「パソコン」→「パソ¥コン」、「表示」→「表¥示」のような感じで。
これは、PHPの設定ファイル(PHP.ini)の「magic_quotes_gpc」という項目がONに設定されているためだそうです。
「magic_quotes_gpc」がON設定となっている場合、フォームから受け取った文字の中に「¥(バックスラッシュ)」「"(ダブルクォーテーション)」「'(シングルクォーテーション)」があった際、その後ろに自動で「¥」をつけるのです。こちらは「エスケープ処理」と言い、悪意あるユーザに不正な処理(SQL injection なんて有名ですね)をさせないためにも有効な設定となっています。
んで、S-JIS の文字コードには「0x5c」を含むものがあり、「0x5c」が「¥」と同じ文字コードであることがそもそもの問題なのです。たとえば、「パソコン」の「ソ」のコードは「0x83 0x5c」なので、「パソコン」→「パソ¥コン」となるわけですね。

原因が分かれば対処方法もおのずと見えてきます。まず、真っ先に思いつく方法として「PHP.ini」内の「magic_quotes_gpc」を「OFF」にすることが挙げられます。簡単ですが、問題もあって・・・。まず、レンタルサーバなど共用にてWebサーバを使用している場合にはこの設定は勝手に書き換えることができません。自分だけの都合で他人様に迷惑かけちゃだめですよね。まぁ、可能性としてサーバの管理者が「Apache」の「AllowOverride」の設定を「ALL」にしてくれているならば、「.htaccess」でユーザごとにこの制御が可能です。「.htaccess」ファイルの中に以下の1行を加えて下さい。

php_flag magic_quotes_gpc off

これで一応は解決できるのですが、既述の通りこれではセキュリティに不安が残ります。そこで、次のように不要なときにはバックスラッシュを取り除く処理を加えてやる方法をお奨めします。

if (get_magic_quotes_gpc()) {
$str = stripslashes($str);
}


「stripslashe」はバックスラッシュが取り除かれた文字列を返します(2つ並んだバックスラッシュは1つのバックスラッシュになります)。逆に必要項目にバックスラッシュを加えたい場合は「addslashes」を使用します。こちらはデータベースへの問い合わせなどに際してクォートされるべき 文字の前にバックスラッシュを挿入した文字列を返します、とのことです(PHPマニュアル参照)。

【引用元URL】
PHP実験室  

Posted by 月読☆彡 at 19:20Comments(0)PHP

2007年08月07日

トータル件数取得

MySQLを使い掲示板などを作成してると、現在の表示件数とトータルの件数を取得したい場合がある。

仮に100件近くレコードがあるとして、21件目から10件分を取得するとする。

SELECT code, name, subject, body, date
FROM bbs_data ORDER BY code
LIMIT 10 OFFSET 20;

そうすると普通にレコードが返ってくる。その後に全体のカウントを取得する。

SELECT COUNT(code) as count
FROM bbs_data;

上記のようにする事でもトータル件数を取得する事が出来るが、下記の方法を使えばもっと簡単にトータル件数を取得できる。

SELECT SQL_CALC_FOUND_ROWS code, name, subject, body, date
FROM bbs_data
ORDER BY code
LIMIT 10 OFFSET 20;

SELECT文にSQL_CALC_FOUND_ROWSキーワードを追加するだけ

そのあとに

SELECT FOUND_ROWS() as count;

を実行するとLIMIT(OFFSET)を無視した件数が取得できる。
ここで直前のQueryのSQL_CALC_FOUND_ROWSを抜くとLIMITが反映されたレコード数を返す。

ちなみにFOUND_ROWS()は直前に実行したQueryの結果のレコード数を返す。  

Posted by 月読☆彡 at 13:33Comments(0)MySQL