ホームページ >バックエンド開発 >PHPチュートリアル >PHP共通関数集(1)_PHPチュートリアル
/**
* addslashes によって処理された文字列または配列を返します
* @param $string 処理される文字列または配列
* @return 混合
*/
関数 new_addslashes($string){
if(!is_array($string)) returnaddslashes($string);
foreach($string as $key => $val) $string[$key] = new_addslashes($val);
$string を返します;
}
/**
* ストリップスラッシュによって処理された文字列または配列を返します
* @param $string 処理される文字列または配列
* @return 混合
*/
関数 new_stripslashes($string) {
if(!is_array($string)) return ストリップスラッシュ($string);
foreach($string as $key => $val) $string[$key] = new_stripslashes($val);
$string を返します;
}
/**
* addslashe によって処理された文字列または配列を返します
* @param $obj 処理される文字列または配列 www.2cto.com
* @return 混合
*/
関数 new_html_special_chars($string) {
if(!is_array($string)) return htmlspecialchars($string);
foreach($string as $key => $val) $string[$key] = new_html_special_chars($val);
$string を返します;
}
/**
* セキュリティフィルター機能
*
* @param $string
* @戻り文字列
*/
関数safe_replace($string) {
$string = str_replace('%20','',$string);
$string = str_replace('%27','',$string);
$string = str_replace('%2527','',$string);
$string = str_replace('*','',$string);
$string = str_replace('"','"',$string);
$string = str_replace("'",'',$string);
$string = str_replace('"','',$string);
$string = str_replace(';','',$string);
$string = str_replace('<','<',$string);
$string = str_replace('>','>',$string);
$string = str_replace("{",'',$string);
$string = str_replace('}','',$string);
$string を返します;
}
/**
* 0 ~ 28 の ASCII コードで制御文字をフィルターします
* @return 文字列
*/
関数trim_unsafe_control_chars($str) {
$rule = '/[' 。 chr(1) 。 「-」。 chr(8) 。 chr(11) 。 「-」。 chr(12) 。 chr(14) 。 「-」。 chr(31) 。 ']*/';
return str_replace ( chr ( 0 ), '', preg_replace ( $rule, '', $str ) );
}
/**
* テキストフィールドの内容を書式設定します
*
* @param $string テキストフィールドの内容
* @戻り文字列
*/
関数トリムテキストエリア($string) {
$string = nl2br ( str_replace ( ' ', ' ', $string ) );
$string を返します;
}
/**
* テキストをjs出力に適した文字列にフォーマットします
* @param string $string 処理対象の文字列
* @param intval $isjs 文字列整形を行うかどうか、デフォルトは実行
* @return string 処理された文字列
*/
関数 format_js($string, $isjs = 1)
{
$string = addedlashes(str_replace(array("r", "n"), array('', ''), $string));
$isjsを返しますか? 'document.write("'.$string.'");' : $string;
}
/**
* JavaScript コードタグをエスケープします
*
* @param $str
* @return 混合
*/
関数トリム_スクリプト($str) {
$str = preg_replace ( '/<([/]?)script([^>]*?)>/si', '<\1script\2>', $str );
$str = preg_replace ( '/<([/]?)iframe([^>]*?)>/si', '<\1iframe\2>', $str );
$str = preg_replace ( '/<([/]?)frame([^>]*?)>/si', '<\1frame\2>', $str );
$str = preg_replace ( '/]]>/si', ']] >', $str );
$str;
を返します
}
/**
* 現在のページの完全な URL アドレスを取得します
*/
関数 get_url() {
$sys_protocal = isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == '443' ? 'https://' : 'http://';
$php_self = $_SERVER['PHP_SELF'] ? safe_replace($_SERVER['PHP_SELF']) :safe_replace($_SERVER['SCRIPT_NAME']);
$path_info = isset($_SERVER['PATH_INFO']) ? safe_replace($_SERVER['PATH_INFO']) : '';
$relate_url = isset($_SERVER['REQUEST_URI']) ? safe_replace($_SERVER['REQUEST_URI']) : $php_self.(isset($_SERVER['QUERY_STRING']) ? '?'.safe_replace($_SERVER['QUERY_STRING']) : $path_info);
return $sys_protocal.(isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '').$relate_url;
}
/**
* 文字インターセプトは UTF8/GBK をサポートします
* @param $string
* @param $length
* @param $dot
*/
関数 str_cut($string, $length, $dot = '...') {
$strlen = strlen($string);
if($strlen
$string = str_replace(array(' ',' ', '&', '"', ''', '"', '"', '—', '<', '>', '·' 、'…')、array('∵'、' '、'&'、'"'、''"、'"'、'"'、'—'、'<'、'>'、' ·', '…'), $string);
$strcut = '';
if(strto lower(CHARSET) == 'utf-8') {
$length = intval($length-strlen($dot)-$length/3);
$n = $tn = $noc = 0;
while($n < strlen($string)) {
$t = ord($string[$n]);
if($t == 9 || $t == 10 || (32
$tn = 1; $n++; $noc++;
elseif(194
$tn = 2; $n += 2; $noc += 2;
elseif(224
$tn = 3; $n += 3; $noc += 2;
elseif(240
$tn = 4; $n += 4; $noc += 2;
elseif(248
$tn = 5; $n += 5; $noc += 2;
elseif($t == 252 || $t == 253) {
$tn = 6; $n += 6; $noc += 2;
} その他 {
$n++;
}
if($noc >= $length) {
休憩;
}
}
if($noc > $length) {
$n -= $tn;
}
$strcut = substr($string, 0, $n);
$strcut = str_replace(array('∵', '&', '"', "'", '"', '"', '—', '<', '>', '・', ' …')、array(' '、'&'、'"'、'''、'"'、'"'、'—'、'<'、'>'、'・'、'…' )、$strcut);
} その他 {
$dotlen = strlen($dot);
$maxi = $length - $dotlen - 1;
$current_str = '';
$search_arr = array('&',' ', '"', "'", '"', '"', '—', '<', '>', '·', '…', '∵');
$replace_arr = array('&',' ', '"', ''', '"', '”', '—', '<', '>', '·', '…', ' ');
$search_flip = array_flip($search_arr);
for ($i = 0; $i
$current_str = ord($string[$i]) > 127 ? $string[$i].$string[++$i] : $string[$i];
if (in_array($current_str, $search_arr)) {
$key = $search_flip[$current_str];
$current_str = str_replace($search_arr[$key], $replace_arr[$key], $current_str);
}
$strcut .= $current_str;
}
}
$strcut.$dot を返します;
}
/**
* リクエストIPを取得
*
* @return IP アドレス
*/
関数 ip() {
if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
$ip = getenv('HTTP_CLIENT_IP');
elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
$ip = getenv('HTTP_X_FORWARDED_FOR');
elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
$ip = getenv('REMOTE_ADDR');
} elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
$ip = $_SERVER['REMOTE_ADDR'];
}
return preg_match ( '/[d.]{7,15}/', $ip, $matches ) ? $matches [0] : '';
}
関数 get_cost_time() {
$microtime = マイクロタイム ( TRUE );
$microtime を返す - SYS_START_TIME;
}
/**
*プログラム実行時間
*
* @return int 単位 ms
*/
関数execute_time() {
$stime = 爆発 ( ' ', SYS_START_TIME );
$etime = 爆発 ( ' ', マイクロタイム () );
returnnumber_format (($etime [1] + $etime [0] - $stime [1] - $stime [0]), 6 );
}
/**
* 生産随机字符串
*
* @param int $length 输出长度
* @param string $chars 可、默认:0123456789
* @return string 文字串
*/
関数ランダム($length, $chars = '0123456789') {
$ハッシュ = '';
$max = strlen($chars) - 1;
for($i = 0; $i
$hash .= $chars[mt_rand(0, $max)];
}
$ハッシュを返します;
}
/**
* 文字列を配列に変換します
*
* @param string $data string
* @return array データが空の場合は、空の配列を返します
*/
関数 string2array($data) {
if($data == '') return array();
eval("$array = $data;");
$array を返します;
}
/**
* 配列を文字列に変換します
*
* @param 配列 $data 配列
* @param bool $isformdata 0の場合、new_stripslashes処理は使用されません、オプションのパラメータ、デフォルトは1です
* @return string データが空の場合は空を返します
*/
関数 array2string($data, $isformdata = 1) {
if($data == '') return '';
if($isformdata) $data = new_stripslashes($data);
return addedlashes(var_export($data, TRUE));
}
/**
* バイト数を他の単位に変換します
*
*
* @param string $filesize バイトサイズ
* @return string 戻りサイズ
*/
関数 sizecount($filesize) {
if ($filesize >= 1073741824) {
$filesize =round($filesize / 1073741824 * 100) / 100 .' GB';
elseif ($filesize >= 1048576) {
$filesize =round($filesize / 1048576 * 100) / 100 .' MB';
elseif($filesize >= 1024) {
$filesize =round($filesize / 1024 * 100) / 100 。 「KB」;
} その他 {
$filesize = $filesize.'バイト';
}
$filesize を返します;
}
/**
* 文字列の暗号化および復号化関数
*
*
* @param string $txt 文字列
* @param string $operation ENCODE は暗号化、DECODE は復号化、オプションのパラメーター、デフォルトは ENCODE、
* @param string $key キー: 数字、文字、アンダースコア
* @戻り文字列
*/
関数 sys_auth($txt, $operation = 'ENCODE', $key = '') {
$key = $key ? $key : pc_base::load_config('system', 'auth_key');
$txt = $operation == 'エンコード' ? (文字列)$txt :base64_decode($txt);
$len = strlen($key);
$code = '';
for($i=0; $i
$code .= $txt[$i] ^ $key[$k];
}
$コード = $オペレーション == 'デコード' ? $code :base64_encode($code);
$コードを返します;
}
/**
* 语言文处理
*
* @param string $ language 标表示符
* @param array $pars エスケープ配列、二次元配列、'key1'=>'value1','key2'=>'value2',
* @param string $modules 複数のモジュールは半角カンマで区切ります(例: member, guestbook
)
* @return string 言語文字
*/
function L($ language = 'no_ language',$pars = array(), $modules = '') {
static $LANG = array();
static $LANG_MODULES = array();
static $lang = '';
If(定義済み('IN_ADMIN')) {
$lang = SYS_STYLE : 'zh-cn';
} その他 {
$lang = pc_base::load_config('system','lang');
}
If(!$LANG) {
require_once PC_PATH.'langages'.DIRECTORY_SEPARATOR.$lang.DIRECTORY_SEPARATOR.'system.lang.php';
If(define('IN_ADMIN')) require_once PC_PATH.'langages'.DIRECTORY_SEPARATOR.$lang.DIRECTORY_SEPARATOR.'system_menu.lang.php';
if(file_exists(PC_PATH.'言語'.DIRECTORY_SEPARATOR.$lang.DIRECTORY_SEPARATOR.ROUTE_M.'.lang.php')) require PC_PATH.'言語'.DIRECTORY_SEPARATOR.$lang.DIRECTORY_SEPARATOR.ROUTE_M.'.lang.php';
}
If(!emptyempty($modules)) {
$modules =explode(',',$modules);
foreach($modules AS $m) {
If(!isset($LANG_MODULES[$m])) には PC_PATH.'langages'.DIRECTORY_SEPARATOR.$lang.DIRECTORY_SEPARATOR.$m.'.lang.php';
が必要です
}
}
If(!array_key_exists($ language,$LANG)) {
return $LANG['no_ language'].'['.$ language.']';
} その他 {
$言語 = $LANG[$言語];
if($pars) {
foreach($pars AS $_k=>$_v) {
$ language = str_replace('{'.$_k.'}',$_v,$ language);
}
}
return $ language;
}
}
/**
* テンプレート通話
*
* @param $module
* @param $template
* @param $stag
* @return 不明なタイプ
*/
関数テンプレート($module = 'コンテンツ', $template = 'インデックス', $style = '') {
If(strpos($module, 'plugin/')!== false) {
$plugin = str_replace('plugin/', '', $module);
return p_template($plugin, $template,$style);
}
$module = str_replace('/', DIRECTORY_SEPARATOR, $module);
If(!emptyempty($style) && preg_match('/([a-z0-9-_]+)/is',$style)) {
elseif (emptyempty($style) && !define('STYLE')) {
If(定義済み('SITEID')) {
$siteid = サイトID;
} else {
$siteid = param::get_cookie('siteid');
}
if (!$siteid) $siteid = 1;
$sitelist = getcache('sitelist','commons');
if(!emptyempty($siteid)) {
$style = $sitelist[$siteid]['default_style'];
}
elseif (emptyempty($style) && 定義された('STYLE')) {
$style = スタイル;
} その他 {
$style = 'デフォルト';
}
if(!$style) $style = 'デフォルト';
$template_cache = pc_base::load_sys_class('template_cache');
$compiledtplfile = PHPCMS_PATH.'caches'.DIRECTORY_SEPARATOR.'caches_template'.DIRECTORY_SEPARATOR.$style.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.'.php';
if(file_exists(PC_PATH.'templates'.DIRECTORY_SEPARATOR.$style.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.'.html')) {
if(!file_exists($compiledtplfile) || (@filemtime(PC_PATH.'templates'.DIRECTORY_SEPARATOR.$style.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.'.html') > @filemtime($compiledtplfile))) {
$template_cache->template_compile($module, $template, $style);
}
} その他 {
$compiledtplfile = PHPCMS_PATH.'caches'.DIRECTORY_SEPARATOR.'caches_template'.DIRECTORY_SEPARATOR.'default'.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.'.php';
if(!file_exists($compiledtplfile) || (file_exists(PC_PATH.'templates'.DIRECTORY_SEPARATOR.'default'.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.'.html') && filemtime(PC_PATH.'templates'.DIRECTORY_SEPARATOR .'default'.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.'.html') > filemtime($compiledtplfile))) {
$template_cache->template_compile($module, $template, 'default');
elseif (!file_exists(PC_PATH.'templates'.DIRECTORY_SEPARATOR.'default'.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.'.html')) {
showmessage('テンプレートが存在しません。'.DIRECTORY_SEPARATOR.$style.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.'.html');
}
}
$compiledtplfile を返す;
}
/**
* カスタムエラーを出力
*
* @param $errno エラー番号
* @param $errstr エラーの説明
* @param $errfile エラーファイルアドレス
* @param $errline エラー行番号
* @return 文字列エラーメッセージ
*/
function my_error_handler($errno, $errstr, $errfile, $errline) {
if($errno==8) return '';
$errfile = str_replace(PHPCMS_PATH,'',$errfile);
if(pc_base::load_config('システム','エラーログ')) {
error_log(''.date('m-d H:i:s',SYS_TIME).' | '.$errno.' | '.str_pad($errstr,30).' | ' .$errfile.' | '.$errline."rn", 3, CACHE_PATH.'error_log.php');
} その他 {
$str = '