MySQLやPHPのパフォーマンスを向上させる方法のメモを載せているサイト

MySQLやPHPのパフォーマンスを向上させる方法のメモを載せているサイトをいくつかメモ
Apache Bench で性能測定だ
MySQLやPHPのパフォーマンスを向上させる方法のメモ
スポンサーサイト

カメラで撮影した画像をサーバーにアップロードする方法

iPhoneのカメラで撮影した写真をサーバーにアップロードする方法です。
カメラで撮影の仕方は他のサイトで。

カメラ撮影した情報は
- (void)imagePickerController:(UIImagePickerController*)picker
didFinishPickingImage:(UIImage*)image
editingInfo:(NSDictionary*)editingInfo
で取得出来ます。

以下、アップロードするソース

// カメラ画像撮影後の処理
- (void)imagePickerController:(UIImagePickerController*)picker
didFinishPickingImage:(UIImage*)image
editingInfo:(NSDictionary*)editingInfo
{
//[self dismissModalViewControllerAnimated:YES];

// 取得したUIImageをPOST送信できるようにNSData型に変換します。
NSData* imgData = [[[NSData alloc] initWithData:UIImagePNGRepresentation(
[UIImage imageWithCGImage:[image CGImage]] )] autorelease];

NSString *mail = @"test@gmail.com"; // 写真以外の文字列とかもアップロード出来る


NSURL *cgiUrl = [NSURL URLWithString:@"http://domailn.com/test.php"];
NSMutableURLRequest *postRequest = [NSMutableURLRequest requestWithURL:cgiUrl];

//adding header information:
[postRequest setHTTPMethod:@"POST"];

NSString *stringBoundary = [NSString stringWithString:@"0xKhTmLbOuNdArY"];
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",stringBoundary];
[postRequest addValue:contentType forHTTPHeaderField: @"Content-Type"];


//setting up the body:
NSMutableData *postBody = [NSMutableData data];
[postBody appendData:[[NSString stringWithFormat:@"--%@\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"email\"\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData:[mail dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"uploadFile\"; filename=\"test.png\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData:imgData];
[postBody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",stringBoundary] dataUsingEncoding:NSUTF8StringEncoding]];
[postRequest setHTTPBody:postBody];

NSURLConnection *connection = [NSURLConnection connectionWithRequest:postRequest delegate:self];
}


これでOK。
サーバー側のPHPとかでは普通に$_POSTや、$_FILESで取得が出来るので
必要に応じて、処理をする。

DBなどに保存した情報からfacebook apiを叩く方法

通常、自分の情報にアクセスする時は下記のような形で行う。

require '../src/facebook.php';
$facebook = new Facebook(array(
'appId' => YOUR_APP_ID,
'secret' => YOUR_APP_SECRET,
'cookie' => true,
));
$session = $facebook->getSession();
$me = null;
if ($session) {
try {
$uid = $facebook->getUser();
$me = $facebook->api('/me');
} catch (FacebookApiException $e) {
error_log($e);
}
}


これで$meの中身を調べれば欲しい情報は入っている。
ただ、$sessionに値が入っていない場合は、この方法だと取得が出来ない。

その場合は、$facebook->getUser();で取得したユーザーIDをDBに保持して以下のように取得する。


$uid = 保存した$facebook->getUser();の値
$access_token = file_get_contents("https://graph.facebook.com/oauth/access_token?client_id=".YOUR_APP_ID."&client_secret=".YOUR_APP_SECRET."&grant_type=client_credentials");
$me = json_decode(file_get_contents(
'https://graph.facebook.com/'.$uid.'?' .$access_token));


取得出来る内容はこことか、ここを読みながらやればなんとかなりそう。

FQLでemailが取得出来なかった

facebook APIでfacebookのDBデータにFQLと言うSQLみたいなのを使ってアクセス出来る。

$facebook = new Facebook(array(
'appId' => FB_APP_KEY,
'secret' => FB_APP_SECRET,
'cookie' => true,
));
$loginUrl = $facebook->getLoginUrl(array(
'fbconnect' => 0,
'req_perms' => 'status_update,publish_stream' // ステータス更新とフィードへの書き込み許可
));

とかで、ログイン用のURLを作成してアクセス許可をする。
その後、

$session = $facebook->getSession();
if ($session) {
try {
$uid = $facebook->getUser();
$fql = "select uid, name, email from user where uid=" . $uid;
$param = array(
'method' => 'fql.query',
'query' => $fql,
'callback' => ''
);
$fqlResult = $facebook->api($param);
} catch (FacebookApiException $e) {
print_r($e);
}
print_r($fqlResult);

}

みたいな感じで取得出来るかと思っていたが、emailだけ値が空になってしまう。

これはログインURLでemailを許可するように設定していなかったから。
下記のようにすればOK

$loginUrl = $facebook->getLoginUrl(array(
'fbconnect' => 0,
'req_perms' => 'email,status_update,publish_stream' // ステータス更新とフィードへの書き込み許可
));


参考サイト

FQLのuserテーブルのカラム
Permissions

プロフィール

U2K

Author:U2K
いろいろプログラムに関しての覚え書きをちょくちょくと書いていきます。

オススメ










オススメ

忍者AdMax

u2k on Twitter

最近の記事