12482


iOSアプリを開発しています。  
AFNetworkingというライブラリを用いて、phpに画像をPOSTしデータベースに保存したいと思っております。

【Objective-C側】

[code]

    UIImage *image = [UIImage imageNamed:@"bird.png"];
    NSData *imageData = UIImageJPEGRepresentation(image, 1.0);
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    [manager POST:@"http://kokun.sakura.ne.jp/AFNetworkingTest/addImageTest.php" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
        [formData appendPartWithFileData:imageData name:@"image" fileName:@"tmp.png" mimeType:@"image/jpeg"];
    } success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"Success: %@", responseObject);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Error: %@", error);
    }];
    
[/code]

【php側】  

[code]

    // 画像を受け取る
    $uploaddir = 'http://kokun.sakura.ne.jp/AFNetworkingTest';
    $uploadfile = $uploaddir.basename($_FILES['image']['name']);
    $image = file_get_contents($uploadfile);
    
    // 拡張子を取得
    $ext = pathinfo($image, PATHINFO_EXTENSION);
    
    // データベースに追加
    $pdo = new PDO('mysql:host=xxx;dbname=xxx', 'xxx', 'xxx');
    $stmt = $pdo->prepare('INSERT INTO images VALUES(0, :ext, :img)');
    $stmt->bindParam(':ext', $ext);
    $stmt->bindParam(':img', $image);
    $stmt->execute();
    
    // データベースサーバーからの接続を解除
    $pdo=null;
    
    // 画像の情報をJSONを返す
    header('Content-type: application/json');
    echo json_encode($_FILES);
    
    ?>
    
[/code]

iOS側で返ってきたJSONを表示すると、以下のようになっておりました。

[code]

    Success: {
        image =     {
            error = 0;
            name = "tmp.png";
            size = 13766;
            "tmp_name" = "/var/tmp/phpmRuFbC";
            type = "image/jpeg";
        };
    }
    
[/code]

このように$_FILESの値はきちんと表示されてます。  
おそらくですが、phpにPOSTする所までは成功していているのですが、  
$_FILESをうまくあつかってデータベースに接続する部分がまちがっているような気がします。

php初心者で、昨日からいろいろ試していますが解決しない状況です・・・・  
詳しい方、ご教示ください。


CC BY-SA 3.0
2015-07-19T03:17:54.637
12477
2015-07-19T10:51:54.230
2015-07-19T10:31:26.743
8000
7699
question
php objective-c
$_FILESから画像を取り出す方法がわからない


`$_FILE[...]['name']`
に入っているのはクライアント側で指定したファイル名ですが、この名前でサーバー上に保存されるわけではありません。同じ名前のファイルを複数のクライアントが同時にアップロードしたときに困ってしまいます。

アップロードされたファイルの場所は `$_FILE[...]['tmp_name']` に格納されています。質問に書かれた例では
`/var/tmp/phpmRuFbC` になっていますね。

参考 [PHP: POST メソッドによるアップロード - Manual](http://php.net/manual/ja/features.file-
upload.post-method.php)


CC BY-SA 3.0
2015-07-19T10:51:54.230
12482
2015-07-19T10:51:54.230
8000
12477
answer