PHP - 何度も同じ関数を作るのが面倒なので関数をまとめておく
PHPを利用していく上で、毎回同じような関数を作るのも大変なので少しまとめておこうかな〜でも、使わないかも。。。
文字列を指定した文字数で分割
<?php
/**
* 文字列を指定した文字数で分割する
*
* @param string $sText 指定文字列
* @param integer $iLength 分割文字数
* @param string $sEncode 漢字コード
*/
function mbString2Array($sText, $iLength=1, $sEncode="") {
if ($sText == "") {
return array();
}
if ($sEncode == "") {
$sEncode = mb_internal_encoding();
}
$iMaxLen = mb_strlen($sText, $sEncode);
$aryText = array();
while($iMaxLen) {
$aryText[] = mb_substr($sText, 0, $iLength, $sEncode);
$sText = mb_substr($sText, $iLength, $iMaxLen, $sEncode);
$iMaxLen = mb_strlen($sText, $sEncode);
}
return $aryText;
}
?>
有効期限をチェック
<?php
/**
* 有効期限をチェックする
*
* @param string $sDate 開始日時
* @param integer $iDay 有効日数
*/
function checkExpire($sDate, $iDay) {
if ($iDay < 1) {
return false;
}
$iFeedTime = strtotime($sDate);
$iDay = 86400 * $iDay;
$iExpire = time() - $iDay;
if ($iFeedTime >= $iExpire) {
return true;
} else {
return false;
}
}
?>
現在のURLを得る
<?php
/**
* 現在のURLを得る
*
* @param boolean $bEnc URLエンコードの有無
*/
function getCurrentUrl($bEnc=false) {
$sUrl="";
if (getenv("HTTPS") == "on") {
$sUrl .= "https://";
} else {
$sUrl .= "http://";
}
$sUrl .= getenv("HTTP_HOST").getenv("REQUEST_URL");
if ($bEnc) {
return rawurlencode($sUrl);
}
return $sUrl;
}
?>
リクエストパラメータの置換
<?php
/**
* リクエストパラメータの置換
*
* 指定したkeyの値をvalueに置換える
* keyが存在しない場合には追加し、valueが空の場合には削除する
*
* @param mixed $mRep URIストリングまたはパラメータの連想配列
* @param array $aryRep 置換したいパラメータ
* @param string $sDelimiter 区切り
* @return string 置換後のURI
*/
function replaceUri($mRep, $aryRep, $sDelimiter='&') {
$aryPairs = array();
$sHost = "";
if (is_string($mRep)) {
$aryRequestUri = explode("?", $mRep, 2);
if (count($aryRequestUri) == 2) {
$sHost = $aryRequestUri[0];
$aryPairs = parseStr($aryRequestUri[1]);
} else {
if (strpos($aryRequestUri[0],"=") !== false) {
$aryPairs = parseStr($aryRequestUri[0]);
} else {
$sHost = $aryRequestUri[0];
}
}
} else {
$aryPairs = (array)$mRep;
}
if (!is_array($aryRep)) {
$aryRep = array();
}
// パラメータの変更
$aryMerged = array_merge($aryPairs, $aryRep);
unset($aryPairs);
if ($sHost) {
return $sHost."?".makeQuery($aryMerged, $sDelimiter);
} else {
return makeQuery($aryMerged, $sDelimiter);
}
}
/**
* parse_strの htmlspecialchar無し版
*
* @param string $str パース対象文字列
* @param string $sSep 区切り
* @return array
*/
function parseStr($str, $sSep="&") {
$aryResults = array();
$aryPairs = explode($sSep, $str);
foreach($aryPairs as $sPair) {
list($k, $v) = explode("=", $sPair);
$aryResults[$k] = rawurlencode($v);
}
return $aryResults;
}
/**
* クエリーを作成
*
* @param array $aryParams パラメータリスト
* @param string $sSep 区切り
* @return string クエリー
*/
function makeQuery($aryParams, $sSep="&") {
if (!is_array($aryParams)) {
return "";
}
$aryQuery = array();
foreach($aryParams as $key => $value) {
if (is_array($value)) {
foreach($value as $item) {
if ($item != "") {
$aryQuery[] = $key."=".rawurlencode($item);
}
}
} else {
if ($value != "") {
$aryQuery[] = $key."=".rawurlencode($value);
}
}
}
return implode($sSep, $aryQuery);
}
?>
画像リサイズの縦横計算
<?php
/**
* 画像リサイズの縦横計算
*
* @param integer $iWidth 画像の幅
* @param integer $iHeight 画像の高さ
* @param integer $iDim 新しい寸法
* @param boolean $bForce 拡大を許可する
* @return array 新しい寸法
*/
function resizeImage($iWidth, $iHeight, $iDim, $bForce=false) {
$fResize = false;
$aryDim["width"] = $iWidth;
$aryDim["height"] = $iHeight;
if ($bForce || ($iWidth > $iDim) || ($iHeight > $iDim)) {
$fResize = true;
}
if (!$fResize) {
return $aryDim;
}
$fAspect = $iWidth / $iHeight;
if ($fAspect > 1) {
// 幅固定
$iNewWidth = $iDim;
$iNewHeight = (int)round($iDim/$iWidth*$iHeight);
} else {
// 高さ固定
$iNewWidth = (int)round($iDim/$iHeight*$iWidth);
$iNewHeight = $iDim;
}
$aryDim["width"] = $iNewWidth;
$aryDim["height"] = $iNewHeight;
return $aryDim;
}
?>
ファイルをダウンロードさせる
<?php
/**
* ファイルをダウンロードさせる
*
* @param string $sFilename ファイル名
*/
function downloadFile($sFilename){
header('Pragma: public'); // required
header('Expires: 0'); // no cache
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: private',false);
header('Content-Type: application/force-download');
header('Content-Disposition: attachment; filename="'.basename($sFilename).'"');
header('Content-Transfer-Encoding: binary');
header('Connection: close');
readfile($sFilename); // push it out
exit();
}
?>
多次元配列のキーソート
<?php
/**
* 多次元配列のキーソート
*
* @param array $aryData 多次元配列
* @return void
*/
function recursiveKSort($aryData) {
foreach ($aryData as $key => $value) {
if (is_array($value)) {
recursiveKSort($value);
}
}
return ksort($aryData);
}
?>