PHP自作関数いろいろ

Last-modified: 2015-03-18 (水) 17:11:25

文中にURLが含まれていたらリンク付きに変換する

/**
 * 文中にURLが含まれていたらリンク付きに変換する
 * @param string $str
 * @return string
*/
function conv_url($str){
	$pattern = "/(http|https):\/\/[-\w\.]+(:\d+)?(\/[^\s]*)?/";

	$str = str_replace("\n", "<br>", htmlspecialchars($str, ENT_QUOTES, CHARSET));

    //文字列にEmailが混じっている場合のみ下のスクリプト発動
	if(preg_match($pattern, $str)){
		preg_match_all($pattern, $str, $results);
		foreach ($results[0] as $key=>$val){
			$replace[] = '&lt;a href="'.$val.'" target="_blank">'.$val.'</a>';
		}
		$str = str_replace($results[0], $replace, $str);
	}
	return $str;
}

文中にメールアドレスが含まれていたらリンク付きに変換する

/**
 * 文中にメールアドレスが含まれていたらリンク付きに変換する
 * @param string $str
 * @return string
 */
function conv_email($str){
	$pattern = "/^[_a-z0-9-.]+(\.[_a-z0-9-]+)*@[a-z0-9-]+([\.][a-z0-9-]+)+$/i";

	$str = str_replace("\n", "<br>", htmlspecialchars($str, ENT_QUOTES, CHARSET));

	//文字列にEmailが混じっている場合のみ下のスクリプト発動
	if(preg_match($pattern, $str)){
		preg_match_all($pattern, $str, $results);
		foreach ($results[0] as $key=>$val){
			$replace[] = '&lt;a href="mailto:'.$val.'">'.$val.'</a>';
		}
		$str = str_replace($results[0], $replace, $str);
	}
	return $str;
}

ファイルをアップロードする

/**
 * ファイルをアップロードする
 * @param string $fieldName
 * @return
 */
function file_upload($fieldName, $data) {

	if(empty($_POST[$fieldName.'_tmp'])) return true;

	//-----------------------------------------------------------
	// アップロードディレクトリ
	// 環境が違う場合は
	//-----------------------------------------------------------
	$upload_dir = UPLOAD_DIR;
	$tmp_dir = UPLOAD_DIR."tmp/";
	//-----------------------------------------------------------

	// アップロードされたデータ
	$filename_tmp = $_POST[$fieldName.'_tmp'];

	// 削除フラグ!!
	if(isset($_POST[$fieldName."_del"]) && $_POST[$fieldName."_del"]==1) {
		if(file_exists($upload_dir.$_POST[$fieldName])) {
			unlink($upload_dir.$_POST[$fieldName]);
		}

	} else {

		// テンポラリ的においてあるファイルをupload/コピーする。
		if(file_exists($tmp_dir.$filename_tmp)) {

			// ファイルコピー!!
			if( ! copy($tmp_dir.$filename_tmp, $upload_dir.$filename_tmp)) {
				die("<br><b>faild in uploading file. </b><br>check form's enctype [multipart/form-data?]<br>". $tmp_dir.$filename_tmp." -----> ".$upload_dir.$filename_tmp."<br>");
			}
			/*
			 //////////////////////////
			// passiveサーバーにもコピーする
			//////////////////////////
			if(!strstr(@$_SERVER["SERVER_NAME"],"dev") && !strstr(MYHOST, "dev")){
			if($servers[0]==MYHOST){
			$host = $servers[1];
			} else {
			$host = $servers[0];
			}
			$cmd = "/usr/bin/rsync -a " ." ".$upload_dir.$filename_tmp . " wwwuser@". $host .":" . $upload_dir;
			exec($cmd, $result);
			}
			*/
			// コピーしたら、テンポラリファイルを消す
			unlink($tmp_dir.$filename_tmp);
		}
	}
}

csvエクスポート

/**
 * csvエクスポート
 * @param string $filename
 * @param array $header
 * @param array $data
 * @return boolean
 */
function doExport($filename, $data, $header_arr=null) {

	/////////////////////////////////////////////
	// header
	/////////////////////////////////////////////
	// ヘッダーの指定がない場合は、データ配列のキーから取得する
	if(empty($header_arr)) {
		foreach ($data as $val) {
			foreach($val as $key2 => $val2) {
				if(is_numeric($key2)) continue;

				$header_arr[] = $key2;
			}
			break;
		}
	}
	$csv[] = implode(",", $header_arr)."\r\n";

	/////////////////////////////////////////////
	// data
	/////////////////////////////////////////////
	foreach ($data as $val) {

		$tmp = array();
		// 内容をフォーマット
		foreach($val as $key2 => $val2) {
			if(is_numeric($key2)) {
				unset($val[$key2]);
				continue;
			}

			$val2 = preg_replace("/\r\n|\r|\n/", chr(13), $val2);	// 半角のダブルクォートを全角のダブルクォートに置換
			$val2 = preg_replace("/\"/", "\"\"", $val2);			//半角のダブルクォートを全角のダブルクォートに置換
		//	$val[$key2] = ereg_replace(",",",", $val2);		//半角カンマを全角カンマに置換
			$val2 = "\"". $val2 . "\"";				//内容を半角ダブルクォートで括る
			$tmp[] = $val2;
		}
		// カンマ区切りの一行へ
		$csv[] = implode(",", $tmp)."\r\n" ;
	}

	if(empty($csv)) return false;

	// ログを書く
	$common_dao = new common_dao();
	$common_dao->writeLog(7, true);

	// ダウンロードするファイル名
	$down_file = $filename."_".date('YmdHis') . '.csv';
	/*	*/
	////////////////////////////////////////////////////////////////////
	// CSVの出力
	header ("Content-Type: application/force-download");
	header ("Content-Disposition: attachment; filename=" . $down_file);
	header ("Content-Description: File Transfer");
	header ("Content-Length: " . strlen(join("",$csv)) );

	foreach ($csv as $mval) {
		echo mb_convert_encoding($mval, "SJIS-win", CHARSET);
		//echo $mval;
		flush();
		ob_flush();
		usleep(10000);
		//	exit();
	}
}

パスワードのハッシュ化

// パスワードのハッシュ化
function getPassHash($password){
	$salt = PASSWORD_SALT;
	return hash('sha512', $password . $salt);
}