PHP関連

提供: 文具堂 Wiki三昧
移動先: 案内検索

ホスト名判定

function isProductionEnv(){
	return $_SERVER['HTTP_HOST'] == 'www.example.com';
}

スマホ判定

iOS, Androidをスマホと判定する場合

function isSPhone(){
        return preg_match("/(iPhone|Android|iPod|iPad)/", $_SERVER['HTTP_USER_AGENT']);
}

空入力判定

いきなり$_GET['callback']を使うとNoticeを発生する。

if (!isset($_GET['callback']) || $_GET['callback'] === ""){
  print "empty¥n";
}

if (isset($_GET['callback']) && $_GET['callback'] !== ""){
  print "not empty¥n";
}

Content-typeの出力

header("Content-type: text/javascript");
header("Content-Type: application/json; charset=UTF-8");

ファイルパス

絶対パス: __FILE__
require時でも呼び出し元のファイルではなく__FILE__が記述されているファイルのパス。
$_SERVER['SCRIPT_FILENAME'] は実行している呼び出し元のファイル。

ディレクトリパス: dirname(__FILE__)
ディレクトリパス (PHP 5.3.0以降): __DIR__ でもOK

define("APP_DIR", realpath(dirname(__FILE__).'/..'));
/../などの参照をすべて解決し、正規化した絶対パスを返す

画像リサイズ

Icebeat | class.image

$thumb = new Image('dir/image.jpg');
//$thumb->name('image2');      
$thumb->width(200);
$thumb->save();

配列

foreachで要素の編集

$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
    $value = $value * 2;
}
unset($value); // 別のところで使われると不具合を起こすので最後の要素への参照を解除

配列を特定個数ずつ分割

array_chunk(array("a", "b", "c", "d", "e", "f", "g"), 3);
/*
array(
  0 => array(
    0 => "a",
    1 => "b",
    2 => "c",
  ),
  1 => array(
    0 => "d",
    1 => "e",
    2 => "f",
  ),
  2 => array(
    0 => "g",
  ),
)
*/

要素をプッシュ array_push

$arr = array();
$arr[] = 1;
$arr[] = 2;

array_push($a, 3, 4);

配列を文字列で連結 join

joinはimplode()のエイリアス

join(',', array(1,2,3,4,5));
"1,2,3,4,5"

配列を複数の変数に代入

list($a, $b, $c) = array(1, 2, 3);

配列の最後の要素

$arr = array(1,2,3,4,5);
end($arr)
5

配列を抽出 スライス

PHP: array_slice - Manual

array array_slice ( array $array , int $offset [, int $length = NULL [, bool $preserve_keys = false ]] )
array_slice($arr, 2, 2)
array(
  0 => 3,
  1 => 4,
)

array_slice($arr, 2)
array(
  0 => 3,
  1 => 4,
  2 => 5,
)

array_slice($arr, 2, -1)
array(
  0 => 3,
  1 => 4,
)

文字列を分割 split

split()はPHP5.3ではDeprecated

explode('.', 'example.com')
array(
  0 => "example",
  1 => "com",
)

explode(',', '1,2,3,4,5')
array(
  0 => "1",
  1 => "2",
  2 => "3",
  3 => "4",
  4 => "5",
)

時刻日付 DateTime

PHP: DateTime - Manual

// 生成
$time = new DateTime('2050/4/5 11:34');

$today = new DateTime('today');
$tomorrow = new DateTime('tomorrow');

// タイムゾーン
$time->getTimezone()->getName();
// "Asia/Tokyo"

// 表示形式
$time->format(DateTime::ATOM);
// "2050-04-05T11:34:00+09:00"

$time->format('c'); // ISO 8601 日付
// "2050-04-05T11:34:00+09:00"

$time->format('Y/m/d'));
// "2050/04/05"

// 時間の進退 (破壊的)
$time->modify('+10days');
// "2050-04-15T11:34:00+09:00"

// 差分
$start = new DateTime('2014/2/6 12:33:23');
$end   = new DateTime('2014/5/29 1:57:56');

$diff = $start->diff($end);
/*
object(DateInterval)#6 (8) {
  ["y"]=>
  int(0)
  ["m"]=>
  int(3)
  ["d"]=>
  int(22)
  ["h"]=>
  int(13)
  ["i"]=>
  int(24)
  ["s"]=>
  int(33)
  ["invert"]=>
  int(0)
  ["days"]=>
  int(111)
}
*/

// 有効な日付か判定
checkdate(2, 29, 2012)
// bool(true)

checkdate(11, 31, 2012)
// bool(false)

PHP: date - Manual (フォーマット詳細)

フォーマット文字 内容
Y 年。4桁
m 月。2桁
n 月。1桁のとき0をつけない。
d 日。2桁
j 日。1桁のとき0をつけない。
w 曜日。0 (日曜)〜6 (土曜)。
H 時。24時間表示。2桁
i 分。2桁
s 秒。2桁

文字列

正規表現マッチング

$type = "image/png";
preg_match("/^image\/(png|jpeg|gif)$/",$type)
1

$type = "text/plain";
preg_match("/^image\/(png|jpeg|gif)$/",$type)
0

置換

$type = "image/png";
str_replace('image/', '', $type)
"png"

一文字ずつ分割・指定文字数ずつ分割 (PHP5)

str_split("hoge")
array(
  0 => "h",
  1 => "o",
  2 => "g",
  3 => "e",
)

str_split("hoge", 2)
array(
  0 => "ho",
  1 => "ge",
)

エラーの表示

ini_set('display_errors', 1);
error_reporting(E_ALL);
//error_reporting(E_ALL ^ E_NOTICE);

.htaccess

php_flag display_errors On

文字コードの指定

php.iniを変更せずにマルチバイト文字列関数 (mbstring)を使えるようにする方法

mb_language('Japanese');
ini_set('default_charset', 'UTF-8');
ini_set('mbstring.detect_order', 'auto');
ini_set('mbstring.http_input'  , 'auto');
ini_set('mbstring.http_output' , 'pass');
ini_set('mbstring.internal_encoding', 'UTF-8');
ini_set('mbstring.script_encoding'  , 'UTF-8');
ini_set('mbstring.substitute_character', 'none');
mb_regex_encoding('UTF-8');