PHP と JavaScript の連想配列

言語を横断縦断していると、頭のなかがごちゃごちゃになってきます。。

PHPの連想配列

$a = array();
$a['dog']  = 'わん';
$a['cat'] = 'にゃん';
$a['mouse']  = 'ちゅー';

一行でまとめると

$a = array('dog'=>"わん" , 'cat':'にゃん' , 'mouse':'ちゅー')

JavaScriptの場合 書き方はいろいろありますが、PHPと一番近い書き方

var a= {};
a['dog']  = 'わん';
a['cat'] = 'にゃん';
a['mouse']  = 'ちゅー';

一行で書くと、

var a= {'dog':'わん' , 'cat':'にゃん' , 'mouse':'ちゅー'};

ちなみにC#では

Hashtable ht = new Hashtable();
ht["dog"] = "わん";
ht["cat"] = "にゃん";
ht["mouse"] = "ちゅー";

となります。

0

MySQL 数値のデータ型

UNSIGNED
BIT 0~1
TINYINT -128~127 0~255
BOOL BOOLEAN TINYINT(1) true/false
SMALLINT -32768~32767 0~65535
MEDIUMINT -8388608~8388607 0~16777215
INT INTEGER -2147483648~2147483647 0~4294967295
BIGINT -9223372036854775808~9223372036854775807 0~18446744073709551615
FLOAT -3.402823466E+38~-1.175494351E-38 0 1.175494351E-38~3.402823466E+38 0 1.175494351E-38~3.402823466E+38
DOUBLE DOUBLE PRECISION REAL -1.7976931348623157E+308~-2.2250738585072014E-308 0 2.2250738585072014E-308~1.7976931348623157E+308 0 2.2250738585072014E-308~1.7976931348623157E+308
DECIMAL(M,D) DEC(M,D) NUMERIC(M,D) FIXED(M,D) DOUBLEと同じなので、Mは65まで DECIMAL(6,2)のとき、-9999.99~9999.99 Dを省略時はD=10になる DECIMAL(6,2)のとき、0~9999.99
金額や経緯度のような近似誤差を許容しない数値は、DECIMALを使う。 ただし、有効桁数が6桁以下ならfloatでもOK ZEROFILL を付けると、UNSIGNEDが自動的に付加されて、かつ桁数分0で埋められる。  
0

MySQL 日時のデータ型

MySQLで扱える日時に関するデータ型

DATE '1000-01-01' ~ '9999-12-31'

DATETIME '1000-01-01 00:00:00' ~ '9999-12-31 23:59:59'

TIME -838:59:59 ~ 838:59:59

YEAR 1901 ~ 2155 及び 0000

TIMESTAMP '1970-01-01 00:00:01' ~ '2038-01-19 03:14:07'

MySQL 日付と時刻型の概要
http://mysql.stu.edu.tw/doc/refman/5.1-olh/ja/date-and-time-type-overview.html

参考サイト:日付型と時刻型
http://www.dbonline.jp/mysql/type/index4.html

0

S-JISで文字化けしたりトラブったりするダメ文字たち

S-JISでいじくっていると文字化けしたり、正規表現でトラブったりするダメ文字があります。
とくにバックスラッシュ\(0x5c)が含まれている場合、PHPのマジッククォートの影響を受けるので注意が必要。

もっとも、はなっからUTF-8を使えば問題ないのですが、 CSVファイルをダウンロード、アップロード、ごにょごにょ。。する場合にWindows環境を意識しないといけないのでメモ。

2バイト目に、\(0x5c) が含まれる文字
―ソЫ噂浬欺圭構蚕十申曾箪貼能表暴予禄兔喀媾彌拿杤歃濬畚秉綵臀藹觸軆鐔饅鷭偆砡

2バイト目に、@(0x40) が含まれる文字
ァА院魁機掘后察宗拭繊叩邸如鼻法諭蓮僉咫奸廖戞曄檗漾瓠磧紂隋蕁襦蹇錙顱鵝纊犾

2バイト目に、[(0x5b) が含まれる文字
ーゼЪ閏骸擬啓梗纂充深措端甜納票房夕麓兌喙媼彈拏杣歇濕畆禺綣膽藜觴躰鐚饉鷦倞劯

2バイト目に、](0x5d) が含まれる文字
‐ゾЬ云馨犠珪江讃従疹曽綻転脳評望余肋兢咯嫋彎拆枉歉濔畩秕緇臂蘊訃躱鐓饐鷯偰硎

2バイト目に、^(0x5e) が含まれる文字
/タЭ運蛙疑型洪賛戎真楚耽顛膿豹某与録竸喊嫂弯擔杰歐濘畤秧綽膺蘓訖躾鐃饋鷽偂硤

2バイト目に、_(0x5f) が含まれる文字
\ダЮ雲垣祇契浩酸柔神狙胆点農廟棒誉論兩喟媽彑拈枩歙濱畧秬綫臉蘋訐軅鐇饑鸚傔硺

2バイト目に、`(0x60) が含まれる文字
AチЯ荏柿義形港餐汁秦疏蛋伝覗描冒輿倭兪啻嫣彖拜杼歔濮畫秡總臍藾訌軈鐐饒鸛

2バイト目に、{(0x7b) が含まれる文字
+ボк閲顎宮鶏砿施旬須捜畜怒倍府本養几嘴學悳掉桀毬炮痣窖縵艝蛔諚轆閔驅黠垬葈

2バイト目に、}(0x7d) が含まれる文字
マм厭笠急迎閤枝殉図挿筑党媒扶凡抑凩嘲孺怡掵栲毳烋痾竈繃艟蛩諳轗閘驀黨埇蕓

2バイト目に、|(0x7c) が含まれる文字
ポл榎掛弓芸鋼旨楯酢掃竹倒培怖翻慾處嘶斈忿掟桍毫烟痞窩縹艚蛞諫轎閖驂黥埈蒴

2バイト目に、~(0x7e) が含まれる文字
×ミн円樫救鯨降止淳厨掻蓄冬梅敷盆欲凭嘸宀恠捫桎毯烝痿窰縷艤蛬諧轜閙驃黯蕙

0

PHP 日時を取得したり判定したり

日付を表示したり計算したりするのにつかう関数

//今日の日時(ローカル)を取得する
echo date("Y年m月d日 H時i分s秒");

//任意の日時(ローカル)を取得する
echo date("Y-m-d H:i:s" , mktime(1, 2, 3, 4, 5, 2006));

//日時(ローカル)を数値(int)で取得する
echo idate('Y');
echo idate('Y',time());

//曜日を日本語で取得する
$weeks = array('日', '月', '火', '水', '木', '金', '土');
$week = $weeks[idate("w")];
echo date("Y年m月d日($week)");

//現在のタイムスタンプ(ローカル)を取得する
$now = time();
echo date("Y-m-d H:i:s" , $now);

//日時(ローカル)を配列で取得する
$today = getdate();
print_r($today);

文字から日付を取得したい場合 strtotime を使います。
入力書式はGUNマニュアルを参照

//英文形式の日時からタイムスタンプ(ローカル)を取得する
$timestamp = strtotime('1972-09-24');
print_r(getdate($timestamp));

APIなど、ときどきグリニッジ標準時が必要になることが有ります。

//現在のグリニッジ標準時(GMT)を取得する
echo gmdate("Y-m-d H:i:s");

//グリニッジ標準時(GMT)を取得する
echo date("Y-m-d H:i:s" , gmmktime());

ユーザーが入力した日付がおかしくないかチェックするとき。

//日付が妥当かどうか(入力された日付のチェック)
echo (checkdate(2, 29, 2012))?'True':'False';

画像やデータファイルなんかのファイルの更新時をチェック。 __FILE__で自分自身(phpファイル)を表します。

//ファイルの更新日時のタイムスタンプを取得する
echo filemtime (__FILE__);
0

サンプルデータとして個人情報をテキトーに生成してくれるステキサイト

WordPressのプラグイン開発なり、システム開発なりしてると、サンプルデータがほしくなる時がありますよね。

デバッグ作業では、なるべく大量のデータが欲しくなったりもしますが、それをちまちま作るのは大変です。
とおもったら、こんな便利なサイトが!

なんちゃって個人情報 疑似個人情報生成

もう、素敵すぎ。

0

WordPressのDBや関数を外部ファイルから利用できるようにする

プラグインを開発中、CSVでデータベース中にある、とあるデータをダウンロードできるようにしようとしたのですが、その際どうしてもWordPress外部のプログラムファイルにアクセスする必要があります。

そうすると、WordPressのコアにアクセスしないので、WordPressで用意されている、超便利な関数が利用できなかったり、WordPressのデータベースにアクセスするにも、独自にコードを用意する必要があったり、いろいろ面倒で、というか、そうするとWordPressを使っている値打ちが半減する気がしたので調べてみたら、ありました!

require_once( dirname(__FILE__) . '/wp-load.php' );

たったこれだけ。
とっても参考になったサイト:wordpress関数を外から使うにはwp_load.phpを読み込む

たとえば、プラグインフォルダにあるmy-plugin.phpというファイルから呼び出すときは、 /wp-content/plugins/my-plugin/my-plugin.php のようにルートまでに4階層あるので、

require_once( dirname(dirname(dirname(dirname( __FILE__ )))) . '/wp-load.php' );

と、dirnameを4個つらねて階層分たどればOK!

これで、DBへ面倒な接続なんかしなくても、$wpdbが利用できます。
ていうか、プラグイン開発する際にはないとこまりますね。  

0

WordPress プラグイン開発でつかうURL関係関数

プラグインで実行中のファイルのURL

echo plugin_basename(__FILE__);
// myplugin/downLoad.php のように返してくる。 

__FILE__ は現在のファイルのディレクトリを示します。(URLではない)
ちなみに、WP_PLUGIN_DIR でプラグインディレクトリ(URLではない)を取得できます。
ちなみにちなみに、dirname(__FILE__)で、現在のファイルのディレクトリ(URLではない)を取得できます。

フルパスを得たければ、公式リファレンスでは、

$x = WP_PLUGIN_URL.'/'.str_replace(basename( __FILE__),"",plugin_basename(__FILE__));

とあるが、

echo plugins_url('' , __FILE__);

のほうがシンプル

任意のファイルのURLを取得するときは、

echo plugins_url("downLoad.php?data=5", __FILE__);

なかんじで。

URLパラメータ

URLにパラメータを付加したい場合は、

$old_url = $_SERVER['REQUEST_URI'];
$new_url = esc_url(add_query_arg(array('data'=>'5') , $old_url));

上の例では、現在のURLにパラメータを付加しているけれど、それなら、

$new_url = esc_url(add_query_arg(array('data'=>'5')));

でOK パラメータを削除するには、

$new_url = esc_url(add_query_arg(array('data'=>false)));
//または
$new_url = esc_url(add_query_arg('data'));

任意のURLにパラメータ ちなみに、JavaScriptでのパラメータ付加はこちら。
JavaScript URLのパラメータを取得、設定する

0

PHP 値の受け渡しで気をつけること。

$_GET、$_POST、$_COOKIE の値の受け取りは、セキュリティ上気をつけないといけないですが、 毎回コードを書くのも面倒なので。

class common{
   public static function getGET($name){
        $ret = filter_input(INPUT_GET, $name);
        if (isset($ret)){
            $ret =str_replace("\0", "", $ret);//Nullバイト攻撃対策
            return htmlspecialchars($ret, ENT_QUOTES, 'UTF-8');
        }
        return '';
    }

    public static function getPost($name){
        $ret = filter_input(INPUT_POST, $name);
        if (isset($ret)){
            $ret =str_replace("\0", "", $ret);//Nullバイト攻撃対策
            return htmlspecialchars($ret, ENT_QUOTES, 'UTF-8');
        }
         return '';
    }

    public static function getCookie($name){
        $ret = filter_input(INPUT_COOKIE, $name);
        if (isset($ret)){
            $ret =str_replace("\0", "", $ret);//Nullバイト攻撃対策
            return htmlspecialchars($ret, ENT_QUOTES, 'UTF-8');
        }
         return '';
    }
}

で、呼び出すときは、

$data = common::getGet('data');

のようにして使える。   参考:PHP - $_GET, $_POSTなどを受け取る際の処理 参考:PHP開発エンジニア必読!最低限必要なセキュリティ対策

0