どうも、isamです。
前回のサニタイズに引き続き、今回はフォームの入力値の入力チェックを簡潔化する関数を紹介します。
使い方はブロックを参照!
/**
* フォームの値をルールに従い走査しエラーがあった場合、エラーキー配列を返す
*
* <code>
* $key_func = array(
* 'id' => array("is_numeric" => array("%%_val_%%", array('error' => "数字以外の文字が入力されています"))),
* 'pid' => array("is_numeric" => array("%%_val_%%", array('error' => "数字以外の文字が入力されています")))
* );
*
* $error = queryValidateCheck($_REQUEST, $key_func);
* </code>
*
* @param $request [...]
こんにちわ、isamです。
今日はフォームの値をサニタイズする自作関数の紹介!
使い方はブロックを参照!
/**
* 配列を再帰的にサニタイズフィルタリング
*
* <code>
* $filter_func = array(
* 'trim' => array("%%_val_%%"),
* 'htmlspecialchars' => array("%%_val_%%", ENTQUTOES),
* 'str_replace' => array("\0", "", "%%_val_%%")
* );
*
* $key_func = array(
* 'id' => array("intval" => array("%%_val_%%")),
* 'pid' => array("intval" => array("%%_val_%%"))
* );
*
[...]
こんにちわ!isamです。
今日のエントリは忘れっぽい自分へのメモです。
PHPインストール(ソース)編(Fedora, CentOS)
PHPを落としてきていると仮定して話を進めます。
まず先にPHPのインストールと実行に必要な各種ライブラリをyumで落とします。
[]# yum -y install flex libxml2-devel
[]# yum -y install zlib-devel libpng-devel
[]# yum -y install libjpeg-devel
PHPのインストールを開始します。
[/usr/local/src/php-5.x.x]# ./configure –prefix=DIR \
> –enable-mbstring –enable-ftp \
> –with-apxs2=DIR/bin/apxs \
> –with-gd –with-zlib –with-jpeg-dir \
> –with-pgsql=DIR –with-mysql=DIR \
> –with-pear=DIR
[/usr/local/src/php-5.x.x]# make && make install
以上でPHPのインストールは完了!
どうもisamです。
今日はjavascriptな気分って言う事で自分用のユーティリティライブラリを作ってみます。
いい悪いは取り敢えず別にして簡潔にかけるものというテーマで作っていきます。
ではコード!
var $ = {
id : function(id) {
return document.getElementById(id);
},
name : function(name) {
return document.getElementsByName(name);
},
tag : function(tag) {
return document.getElementsByTagName(tag);
},
event : function(obj, func, type) {
if (obj.addEventListener) {
//Netscape等
obj.addEventListener(type, func, false);
} else if (obj.attachEvent) {
//IE
obj.attachEvent(‘on’+type, func);
}
},
create : function(tag, obj, text) {
var t = document.createElement(tag);
for(var o in obj) {
t.setAttribute(o, obj[o]);
}
if(text != “”) {
t.appendChild(document.createTextNode(text));
}
return t;
},
add : function(obj, child) {
obj.appendChild(child);
}
}
使い方はこんな感じ
<form name="test_ie" action="./" method="get">
<select name="pull">
<option [...]
久々の更新!
どうもisamです。仕事場が変わって忙しくしておりました。。。
やっと落ち着いてきたのでできるだけ更新するように頑張ります。
それでは今日はPHPネタでいこうと思います。
今日のお題はこちら!
■Formの処理を楽にする関数を作成してみよう!
PHPだと$_GETや$_POSTや$_REQUESTのグローバル変数からFormの値を取得します。
その際、一旦バリデートして変数に入れたりすると思いますが、毎回trimだhtmlspecialcharsだと連続で書いたりするのは面倒だと思います。
また面倒くさくてバリデートなしでグローバル変数をそのまま使ったりなどあるかと思います。
そんな時に関数を作っておくと楽チンになります。
それでは早速コードにいってみましょう!
<?php
/**
* Formの値をバリデートして取得する
*
* @param string $key 取得したいキー
* @param array $func 適用したい関数の関数名配列
* @param string $type どのグローバル変数を使うか (g=$_GET:p=$_POST:r=$_REQUEST)
* @return string $val キーの値
*/
function param($key, $func, $type) {
switch($type) {
case "g" :
if(isset($_GET[$key])) {
$val = $_GET[$key];
}else{
return '';
}
break;
case "p" :
if(isset($_POST)) {
$val = $_POST[$key];
}else{
return '';
}
break;
case "r" :
default:
if(isset($_REQUEST[$key])) {
$val = $_REQUEST[$key];
}else{
return '';
}
break;
}
if(is_array($func)) {
foreach($func as $function) {
if(function_exists($function)) {
$val = $function($val);
}
}
}else{
if(function_exists($function)) {
$val = $function($val);
}
}
return $val;
}
使い方は至って簡単で取得したいキーとバリデート用関数名とグローバル変数の種類を指定するだけ!
<?php
//URLのクエリが?str=<html><body></body></html>%0D%0Aだった場合で
//エスケープと末尾の空白を削除したい場合
$str = param("str", array("trim", "htmlspecialchars", "g"));
echo $str;
//ouput:
//<html><body></body></html>
ユーザ定義関数も指定できますので色んなバリデートが可能です。
これを利用してセキュリティを強くしましょう!
ではまた!
どうも、isamです。
PHPとjqueryを使ったwebノート「Sticky notes」をダウンロードしてみました。
次のURLよりzipファイルがダウンロードできるのでダウンロードして解凍してFTPでサーバの任意の箇所にアップロードしてください。
ダウンロードURL:本家 http://demo.tutorialzine.com/2010/01/sticky-notes-ajax-php-jquery/demo.zip
編集機能追加バージョンURL:http://php.iklv.net/note/demo.zip
設置が終わったらデータベースを作成してdemoフォルダに入っているtable.sqlのSQL文を使ってデータベースにテーブルを作成してください。文字コードはUTF-8で。
あとはconnect.phpにデータベースの情報をいれて再アップし直せば使えます。
編集機能追加バージョンはノートをダブルクリックすると編集できるようになっています。あとは編集して更新ボタンを押せばOKです。
本家のscript.jsとadd_note.htmlを変更しています。また編集機能用のサーバ側のファイル、update_post.phpを追加しています。
編集機能がついたdemoはこちらから
マニュアルは本家のを(英語)みてみてください。
時間があったらデリートも実装してみようかな!
ではまた!
お久しぶりのisamです。
今日はSmarty用のテンプレート関数プラグインを紹介します。
今回はここにコードはのせませんが下記リンクよりコードを公開していますのでよかったら見てみてください。
アップデートは随時していきます。よろしければ感想や意見頂けるとありがたいです。
SmartyからTwitterの自分のお友達のタイムラインを簡単に取得するプラグイン
Google Code for twitter-by-php
SmartyからTwitterの自分のタイムラインを簡単に取得するプラグイン
Google Code for twitter-by-php
各プラグインの使い方はこちらに書いています。
ではまた!
また長らく間があがってしまいましたが、外国為替のレートをつぶやくtwitter_botを作って見たのでご紹介します。
followは下記より。
follow by @currency_rater
wordpressのプラグインのCurrencyTickerを解析して得たAPIのURLをcurlでたたきに行って
結果をtwitterのAPIを介してつぶやきます。為替APIの都合上15分間隔更新にしています。
※一分おきに取得しに行くとアクセス拒否されるのでもしCRONなど動かす場合は最低でも15分間隔にしてください。
以下コードです。
#!/usr/bin/php
<?php
$url = "http://www.webservicex.net/CurrencyConvertor.asmx/ConversionRate?FromCurrency=%s&ToCurrency=%s";
$fromCode = array("USD", "EUR", "CNY", "KRW", "TWD");
$toCode = "JPY";
$running=null;
$ch = array();
$chUrl = array();
$chBody = array();
$mh = curl_multi_init();
$push = array();
foreach($fromCode as $code) {
$chUrl[$code] = sprintf($url, $code, $toCode);
$ch[$code] = curl_init(trim($chUrl[$code]));
curl_setopt($ch[$code], CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch[$code], CURLOPT_HTTPGET, TRUE);
curl_setopt($ch[$code], CURLOPT_TIMEOUT, 10);
curl_multi_add_handle($mh,$ch[$code]);
}
do {
curl_multi_exec($mh,$running);
} while ($running > 0);
foreach($fromCode as $code) {
$chBody[$code] = trim(strip_tags(curl_multi_getcontent($ch[$code])));
curl_multi_remove_handle($mh,$ch[$code]);
curl_close($ch[$code]);
}
curl_multi_close($mh);
foreach($chBody as $key => $val) {
$code = $key;
$rate = strlen($val) < 1 ? "" : (float)($val);
if($rate == "") {
$push[$key] = "-";
continue;
}
switch($code) {
case "KRW" :
$push[$key] = round($rate, 4);
break;
default :
$push[$key] = round($rate,2);
break;
}
}
$data = "";
$update_time = date("Y-m-d H:i:s");
foreach($push as $key => $val) {
$data .= "JPY > ". $key ." : ". $val . " ";
}
$data .= " generate_time => " . $update_time;
$url = "http://twitter.com/statuses/update.xml?";
$username = "username";
$password = "password";
$params = "status=". rawurlencode($data." #followmeJP");
$result = file_get_contents($url.$params , false, stream_context_create(array(
"http" => array(
"method" => "POST",
"header" => "Authorization: Basic ". base64_encode($username. ":". $password)
)
)));
自分用に作成した場合は、$data = "";以下を修正してください。
お久のisamです。
今日はPHPの絵文字ライブラリのMobilePictogramConverterを紹介します。
開発はrysterさんがしてます。
プログラムのダウンロードURLを探してみたけどリンク先がただのリンクだらけのところになってしまう。どこいったんだろう?
もっていない人はMobilePictogramConverterで検索して見つけてね!
このライブラリとても簡単で使いやすいんですが、絵文字コードを一々各キャリアの所からみつけてこなきゃいけないのでドコモ用のShift_JISの10進コードのリストをPHPで動的に作ってみました。
以下コードです。
<?php
require_once(dirname(__FILE__) . "/" . "Carrier/map/table.php");
require_once(dirname(__FILE__) . "/" . "MobilePictogramConverter.php");
$emoji = array();
foreach($table as $val) {
$data = $val;
if(!preg_match("/^[0-9]+$/", $data)) continue;
$emoji[] = $data;
}
sort($emoji);
$emoji1 = array_unique($emoji);
$v = count($emoji1);
$rows = 30;
$cols = ceil($v / $rows);
$ss = 1;
$vv = 1;
ob_start();
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>絵文字リスト</title>
<style>
.emoji_box {
width:100%;
}
.emoji_boxes {
float: left;
}
.clear {
clear: both;
}
</style>
</head>
<body>
<div style="width: 100%; height: 20px; padding: 3px;">
絵文字リスト
</div>
<div style="height: 10px;"></div>
<div class="emoji_box">
<div class="emoji_boxes">
<?php foreach($emoji1 as $e) : ?>
<?php if($ss == ($vv + 30)) : ?>
<?php $vv += 30; ?>
</div>
<div class="emoji_boxes">
<?php endif; ?>
<div class="emoji">
<?php echo "".$e.";"; ?>
<input type="text" size="9" value="<?php echo "&#".$e.";"; ?>" onfocus="this.select();window.clipboardData.setData('text',this.value);">
</div>
<?php $ss++; ?>
<?php endforeach; ?>
<div class="clear"></div>
</div>
</body>
</html>
<?php
$body = ob_get_clean();
$str = $body;
$option = MPC_FROM_OPTION_WEB;
$mpc =& MobilePictogramConverter::factory($str, MPC_FROM_FOMA, MPC_FROM_CHARSET_SJIS, $option);
if (is_object($mpc) == false) {
die($mpc);
}
$path = "img/";
$mpc->setImagePath($path);
header("Content-Type: text/html; charset=Shift_JIS");
echo $mpc->autoConvert();
?>
あまりきれいなコードではないですが、これで絵文字と絵文字コード(Shift_JIS10進数)一覧を出せます。パスなどは適宣ご自身の環境に合わせてください。
あとは絵文字コードをペタペタ貼り付けてMobilePictogramConverterから変換をかければOKです。
※javascriptでonfocusイベントを拾っていますが、IEしか対応しておりません。
※IEの場合は絵文字コードをクリックしただけでコピーされます。
※他のブラウザに対応するのがめんどくさかったため放置です。すいません。
ではまた次の機会に!
どうも、isamです。
お盆に入りました。みなさんは帰省している最中でしょうか?
俺は、自分の家でゆっくりしてます。
今日は、ob_start関数とob_get_cleanについて軽く話そうかと思います。
※それぞれの関数の詳しい情報は以下よりご覧ください。
ob_start ob_get_clean
使い方は以下です。
<?
//出力バッファリングを有効にし内部バッファにHTMLを保存していく
ob_start();
//出力したい内容をecho又はprintしていく
echo "<html>";
echo "<body>";
echo "テストサイト";
echo "</body>";
echo "</html>";
//現在の内部バッファに保存されているデータを取得して内部バッファをクリアする
$buff = ob_get_clean();
echo $buff; //一気に内容を出力する
例えば文字コードの変換を行いたい時や、ファイルの文字コードと出力する際の文字コードが違う場合等に文字化けを起こさず出力できるようになります。
・一番文字化けしない方法
ファイルの文字コード、データベースの文字コードを全てUTF-8で統一し、
出力する際に違う文字コードなどに一気に変換して出力する
特に携帯サイトは文字コードをShift_JISにしなければいけなく文字化けを起こしやすい文字コードになります。
これを防ぐためにデータをUTF-8で保存して、PHP側で処理をし出力する際に文字コードをUTF-8からShift_JISに変換し、PHPのheader関数を使いこのデータはHTMLデータで文字コードはShift_JISですよと教えてあげる事でWEBブラウザは文字コードを認識して教えてもらった文字コードで描画していきます。
下記参考コードです。
sample.php
ファイルの文字コード UTF-8
<?
//出力バッファリングを有効にし内部バッファにHTMLを保存していく
ob_start();
//出力したい内容をecho又はprintしていく
echo "<html>";
echo "<body>";
echo "携帯テストサイト";
echo "</body>";
echo "</html>";
//現在の内部バッファに保存されているデータを取得して内部バッファをクリアする
$buff = ob_get_clean();
//データをUTF-8からShift_JISに変換
$buff = mb_convert_encoding($buff, "Shift_JIS", "UTF-8");
//生のヘッダーを送信する
header("Content-Type: text/html;charset=Shift_JIS");
echo $buff; //一気に内容を出力する
これで文字化け知らずのサイトを作れるようになります。
参考にして頂ければと思います。
他にもob_flushやob_end_flush等の関数もあるのでPHPマニュアルをみて参考にしてみてください。
ではまた今度!