Monthly Archives: 9月 2015

ios開発にプッシュ通知を実装する方法

1.Push通知
UILocalNotification *notification = [[[UILocalNotification alloc] init] autorelease];
NSDate *pushDate = [NSDate dateWithTimeIntervalSinceNow:15]; if (notification != nil) {
// push time
notification.fireDate = pushDate;
// set zone
notification.timeZone = [NSTimeZone defaultTimeZone];
// 時間間隔
notification.repeatInterval = kCFCalendarUnitDay;
// push sound
notification.soundName = UILocalNotificationDefaultSoundName;
// push content
notification.alertBody = @”arkgame.com provide it”; notification.applicationIconBadgeNumber = 1;
NSDictionary *info = [NSDictionary dictionaryWithObject:@”name”forKey:@”key”];
notification.userInfo = info;
//push add UIApplication
UIApplication *app = [UIApplication sharedApplication]; [app scheduleLocalNotification:notification];
}

2.プッシュ通知の取得
– (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification*)notification{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@”iWeibo” message:notification.alertBody delegate:nil cancelButtonTitle:@”ok” otherButtonTitles:nil];
[alert show];
application.applicationIconBadgeNumber -= 1;
}

3.プッシュ通知の解除
// UIApplicationの取得
UIApplication *app = [UIApplication sharedApplication];
//プッシュの配列を取得
NSArray *localArray = [app scheduledLocalNotifications];
//通知オブジェクトの宣言
UILocalNotification *localNotification;
if (localArray) {
for (UILocalNotification *noti in localArray) {
NSDictionary *dict = noti.userInfo;
if (dict) {
NSString *inKey = [dict objectForKey:@”key”];
if ([inKey isEqualToString:@”key value”]) {
if (localNotification){
[localNotification release];
localNotification = nil;
}
localNotification = [noti retain];
break;
}
}
}
//同じキーが既に存在するかどうか
if (!localNotification) {
localNotification = [[UILocalNotification alloc] init];
}
if (localNotification) {
//プッシュの解除
[app cancelLocalNotification:localNotification];
[localNotification release];
return;
}
}

「ios開発」ファイルを削除するサンプルコード

サンプルコード
NSFileManager *defaultManager;
defaultManager = [NSFileManager defaultManager];
[defaultManager removeFileAtPath: tildeFilenamehandler: nil]

「ios開発」plistファイルの読み込む方法

サンプルコード:
NSString *path = [[NSBundle mainBundle] pathForResource:@”filename_startnews24″ ofType:@”plist”];
// file data type array
NSArray *array=[NSArray arrayWithContentsOfFile:path];
//file data type *dictionary
NSDictionary *dictionary = [NSDictionary dictionaryWithContentsOfFile:path];

nginxで帯域制限をする方法メモ

方法1
http{
limit_zone one $binary_remote_addr 10m;
limit_conn one 5;
# limit_req_zone $binary_remote_addr zone=one2:10m rate=5r/s;
# limit_req zone=one2 burst=5;
中略
}

server {
中略
location / {
#limit zone
limit_conn one 10;
limit_rate 10k;
}
}
方法2
iptables -A INPUT -p tcp –dport 80 -m limit –limit 8/s -j ACCEPT

Linuxでmod_cband0.9.7.5をインストールしてBand Widthを 制御する

1.インストール
# wget http://pkgs.fedoraproject.org/repo/pkgs/mod_cband/mod-cband-0.9.7.5.tgz/md5/5c5d65dc9abe6cdc6931b6dd33be5018/mod-cband-0.9.7.5.tgz
# tar zxvf mod-cband-0.9.7.5.tgz
# cd mod-cband-0.9.7.5
# ./configure –with-apxs=/usr/local/apache/bin/apxs
#whereis apxs
# make
# make install

2.http.confに下記内容を追加
LoadModule cband_module /usr/lib64/httpd/modules/mod_cband.so

3.設定
ServerAdmin admin@arkgame.com
DocumentRoot /var/www/html/bandwidth
ServerName bandwidth.arkgame.com
ErrorLog /var/log/httpd/bandwidth/error_log
CustomLog /var/log/httpd/bandwidth/access_log combined

CBandSpeed 1024 100 30 #
CBandRemoteSpeed 20kb/s 5 4
4.Apacheが再起動

PHPでのSQLインジェクションを防止するコード

PHPコード下記:
if (@get_magic_quotes_gpc ()) {
$_GET = sec ( $_GET );
$_POST = sec ( $_POST );
$_COOKIE = sec ( $_COOKIE );
$_FILES = sec ( $_FILES );
}
$_SERVER = sec ( $_SERVER );
function sec(&$array) {
//配列の判断
if (is_array ( $array )) {
foreach ( $array as $k => $v ) {
$array [$k] = sec ( $v );
}
} else if (is_string ( $array )) {
//addslashesを呼び出す
$array = addslashes ( $array );
} else if (is_numeric ( $array )) {
$array = intval ( $array );
}
return $array;
}
//整数フィルタ
function num_check($id) {
if (! $id) {
die ( ‘パラメータを空にすることはできません!’ );
}
else if (inject_check ( $id )) {
die ( ‘無効なパラメータ’ );
} //ェクションの判断
else if (! is_numetic ( $id )) {
die ( ‘無効なパラメータ’ );
}
//数字の判断
$id = intval ( $id );
//整型化
return $id;
}
//キャラクターフィルタ
function str_check($str) {
if (inject_check ( $str )) {
die ( ‘無効なパラメータ’ );
}
//インジェクションの判断
$str = htmlspecialchars ( $str );
//htmlを変換
return $str;
}
function search_check($str) {
$str = str_replace ( “_”, “\_”, $str );
$str = str_replace ( “%”, “\%”, $str );
$str = htmlspecialchars ( $str );
return $str;
}
//
function post_check($str, $min, $max) {
if (isset ( $min ) && strlen ( $str ) < $min) { die ( ‘$min以上バイト’ ); } else if (isset ( $max ) && strlen ( $str ) > $max) {
die ( ‘最大$max個バイト’ );
}
return stripslashes_array ( $str );
}
//インジェクション処理メソッド
function inject_check($sql_str) {
return eregi ( ‘select|inert|update|delete|\’|\/\*|\*|\.\.\/|\.\/|UNION|into|load_file|outfile’, $sql_str );
}
function stripslashes_array(&$array) {
if (is_array ( $array )) {
foreach ( $array as $k => $v ) {
$array [$k] = stripslashes_array ( $v );
}
} else if (is_string ( $array )) {
$array = stripslashes ( $array );
}
return $array;
}

phpでの16進数をRGB数値に変換するソースコード

PHPコード:
function hex2rgb($hexColor){
$color=str_replace(‘#’,”,$hexColor);
if (strlen($color)> 3){
$rgb=array(
‘r’=>hexdec(substr($color,0,2)),
‘g’=>hexdec(substr($color,2,2)),
‘b’=>hexdec(substr($color,4,2))
);
}else{
$color=str_replace(‘#’,”,$hexColor);
$r=substr($color,0,1). substr($color,0,1);
$g=substr($color,1,1). substr($color,1,1);
$b=substr($color,2,1). substr($color,2,1);
$rgb=array(
‘r’=>hexdec($r),
‘g’=>hexdec($g),
‘b’=>hexdec($b)
);
}
return $rgb;
}

PHPでクライアントIPアドレスを取得するサンプルコード

方法1
function get_real_ipstartnews24(){
$ip=false;
if(!empty($_SERVER[‘HTTP_CLIENT_IP’])){
$ip=$_SERVER[‘HTTP_CLIENT_IP’];
}
if(!empty($_SERVER[‘HTTP_X_FORWARDED_FOR’])){
$ips=explode (‘, ‘, $_SERVER[‘HTTP_X_FORWARDED_FOR’]);
if($ip){ array_unshift($ips, $ip); $ip=FALSE; }
for ($i=0; $i < count($ips); $i++){
if(!eregi (‘^(10│172.16│192.168).’, $ips[$i])){
$ip=$ips[$i];
break;
}
}
}
return ($ip ? $ip : $_SERVER[‘REMOTE_ADDR’]);
}
方法2
function getIp(){
$ip=’未知IP’;
if(!empty($_SERVER[‘HTTP_CLIENT_IP’])){
return is_ip($_SERVER[‘HTTP_CLIENT_IP’])?$_SERVER[‘HTTP_CLIENT_IP’]:$ip;
}elseif(!empty($_SERVER[‘HTTP_X_FORWARDED_FOR’])){
return is_ip($_SERVER[‘HTTP_X_FORWARDED_FOR’])?$_SERVER[‘HTTP_X_FORWARDED_FOR’]:$ip;
}else{
return is_ip($_SERVER[‘REMOTE_ADDR’])?$_SERVER[‘REMOTE_ADDR’]:$ip;
}
}
function is_ip($str){
$ip=explode(‘.’,$str);
for($i=0;$i<count($ip);$i++){ if($ip[$i]>255){
return false;
}
}
return preg_match(‘/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/’,$str);
}
方法3
function get_real_ip_startnews24(){
static $realip;
if(isset($_SERVER)){
if(isset($_SERVER[‘HTTP_X_FORWARDED_FOR’])){
$realip=$_SERVER[‘HTTP_X_FORWARDED_FOR’];
}else if(isset($_SERVER[‘HTTP_CLIENT_IP’])){
$realip=$_SERVER[‘HTTP_CLIENT_IP’];
}else{
$realip=$_SERVER[‘REMOTE_ADDR’];
}
}else{
if(getenv(‘HTTP_X_FORWARDED_FOR’)){
$realip=getenv(‘HTTP_X_FORWARDED_FOR’);
}else if(getenv(‘HTTP_CLIENT_IP’)){
$realip=getenv(‘HTTP_CLIENT_IP’);
}else{
$realip=getenv(‘REMOTE_ADDR’);
}
}
return $realip;
}

PHPでのutf-8文字列の長さを取得するコード

サンプルコード:
function utf8_strlen($string){
$string=trim($string);
if(empty($string)) return 0;
preg_match_all(“/./us”, $string, $match);
return count($match[0]);
}

PHPでファイルをダウンロードするサンプルコード

サンプルコード:
function download_func($file_url,$new_name=”){
if(!isset($file_url)||trim($file_url)==”){
return ‘500’;
}
if(!file_exists($file_url)){ //ファイルが存在するかどうか
return ‘404’;
}
$file_name=basename($file_url);
$file_type=explode(‘.’,$file_url);
$file_type=$file_type[count($file_type)-1];
$file_name=trim($new_name==”)?$file_name:urlencode($new_name).’.’.$file_type;
$file_type=fopen($file_url,’r’); //ファイルをオープン
//ファイルのタグを入力
header(“Content-type: application/octet-stream”);
header(“Accept-Ranges: bytes”);
header(“Accept-Length: “.filesize($file_url));
header(“Content-Disposition: attachment; filename=”.$file_name);
//ファイルの内容を出力
echo fread($file_type,filesize($file_url));
fclose($file_type);
}

2 / 41234