質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

1960閲覧

iPhoneからEC2のphpにトークンを送り、保存したい

wine

総合スコア18

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2017/03/22 04:21

編集2017/03/22 14:02

iPhoneからデバイストークンをEC2のget_device_token.phpにPOSTし、device_token.htmlに書き込もうとしているのですが、上手く行きません。

AppDelegate.swift の一部

swift

1 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 2 // APNs 3 UNUserNotificationCenter.current().requestAuthorization( 4 options: [.badge, .alert, .sound]) {(accepted, error) in 5 if accepted { 6 print("Notification access accepted !") 7 8 // デバイストークンを登録 9 UIApplication.shared.registerForRemoteNotifications() 10 } 11 else{ 12 print("Notification access denied.") 13 } 14 } 15 return true 16 } 17 18 // Remote Notification のエラーを受け取る 19 func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) { 20 print(error) 21 } 22 23 // Remote Notification の device token を表示 24 func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { 25 26 var deviceToken = String(format: "%@", deviceToken as CVarArg) as String//トークン原型取得 27 print("DeviceToken = \(deviceToken)") 28 // < > を外す 29 let characterSet: CharacterSet = CharacterSet.init(charactersIn: "<>") 30 deviceToken = deviceToken.trimmingCharacters(in: characterSet) 31 // スペースを除去 32 deviceToken = deviceToken.replacingOccurrences(of: " ", with: "") 33 34 sendToken(token: deviceToken)//送信 35 36 print("deviceToken = \(deviceToken)") 37 } 38 39 // POST 送信 40 func sendToken(token: String){ 41 let serverPhp = "http://ec2-hogehoge.compute.amazonaws.com/get_device_token.php"//サーバのURL 42 let postString = "DeviceToken=" + token 43 44 var request = URLRequest(url: URL(string: serverPhp)!) 45 request.httpMethod = "POST" 46 request.httpBody = postString.data(using: .utf8) 47 48 let task = URLSession.shared.dataTask(with: request, completionHandler: { 49 (data, response, error) in 50 51 if error != nil { 52 print("error") 53 return 54 } 55 print("response: \(response!)") 56 }) 57 task.resume() 58 }

get_device_token.php

php

1<?php 2ob_start(); 3$filename = 'device_token.html'; 4 5if(isset($_POST['DeviceToken'])){ 6$token = $_POST['DeviceToken']; 7file_put_contents( $filename, $token); 8echo "Successfully submitted: " . $token; 9}else{ 10file_put_contents( $filename, "no token"); 11echo "ERROR: "; 12} 13 14ob_end_flush() 15?>

Xcodeのログ

Notification access accepted ! deviceToken = <hogehoge hogehoge hogehoge hogehoge hogehoge hogehoge hogehoge hogehoge> deviceToken = 8hogehogehogehoge response: <NSHTTPURLResponse: 0x17002e4a0> { URL: http://ec2-hoge.compute.amazonaws.com/get_device_token.php } { status code: 200, headers { "Accept-Ranges" = bytes; Connection = "Keep-Alive"; "Content-Length" = 466; Date = "Wed, 22 Mar 2017 03:48:57 GMT"; Etag = "\"1hoge\""; "Keep-Alive" = "timeout=5, max=100"; "Last-Modified" = "Wed, 22 Mar 2017 03:45:02 GMT"; Server = "Apache/2.4.18 (Ubuntu)"; } }

アプリを起動すると、POST通信して、device_token.htmlが作成されると思ったのですが、作成されません。

また、echoがXcodeのログに返ってくると思っていたのですが、それも返ってきません。

ファイルを置き、POSTするだけでは、phpが実行されないのでしょうか?

初歩的なミス・勘違いかもしれませんが、よろしくお願いいたします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

http://ec2-hoge.compute.amazonaws.com/get_device_token.php

上記URLはブラウザで直接開くとどのように見えているのでしょうか? コードを見た限りでは「ERROR:」と画面に表示されるような気がします。

もし想定と違う内容の画面だとすると、そもそもWebサーバ(Apache)の設定に何らかの不備があるのかもしれません。

投稿2017/03/22 15:25

tell_k

総合スコア2120

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wine

2017/03/23 04:36

おっしゃる通り、phpインストールし直して、apache2の設定したらトークンのファイル出来ました! ただ、phpコマンドではERROR:が表示されるのに対し、ブラウザでは真っ白なのは変わらなかったので、不思議です。 ありがとうございました!
tell_k

2017/03/23 06:39

よかったですー。結果を教えてくれてありがとうございますー
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問