Udało mi się wdrożyć serwer phpMyAdmin
na Google Cloud
, postępując zgodnie z tym link. Mam problem z zapisaniem do bazy danych, którą utworzyłem w phpMyAdmin. Próbuję utworzyć usługę powiadomień na podstawie nowej wersji Firebase Cloud Messaging
opublikowanej przez Google.Wysyłanie połączenia REST do serwera Google Cloud PHPMyAdmin nie działa?
NotificationInstanceService.java
public class NotificationInstanceService extends FirebaseInstanceIdService {
private static final String TAG = "NotificationInstance";
@Override
public void onTokenRefresh() {
//Getting registration token
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
//Displaying token on logcat
Log.d(TAG, "Refreshed token: " + refreshedToken);
sendRegistrationToServer(refreshedToken);
}
private void sendRegistrationToServer(String token) {
//You can implement this method to store the token on your server
//Not required for current project
OkHttpClient client = new OkHttpClient();
//Create the request body
RequestBody body = new FormBody.Builder().add("Token", token).build();
//Know where to send the request to
Request request = new Request.Builder().url("<db link>.appspot.com/fcm/register.php")
.post(body)
.build();
//Create
try {
client.newCall(request).execute();
} catch (IOException e) {
e.printStackTrace();
}
}
}
I wdrożony na https://<db link>.appspot.com
, plik pod /fcm/register.php który wygląda tak:
register.php
<?php
if (isset($_POST["Token"])) {
$_uv_Token=$_POST["Token"];
$conn = mysqli_connect("<db link>.appspot.com","root","","fcm") or die("Error connecting");
$q="INSERT INTO users (Token) VALUES ('$_uv_Token') "
." ON DUPLICATE KEY UPDATE Token = '$_uv_Token';";
mysqli_query($conn,$q) or die(mysqli_error($conn));
mysqli_close($conn);
}
?>
I jestem zdezorientowany, ponieważ nie wydaje mi się, żebym napisał coś do mojej bazy danych o nazwie użytkownicy, które wiem, że już utworzyłem w serwerze MySQL
utworzonym na phpMyAdmin. Wiem, że nazwa użytkownika i hasło są już ustawione na register.php.
Czy istnieje sposób debugowania, czy mój skrypt faktycznie wchodzi w kod PHP? Jak mogę debugować kod PHP? Ja również, że Żądanie jest rzeczywiście budowane, ponieważ mogę debugować tę część kodu. Każda pomoc będzie doceniona. Dzięki!
EDIT: Niektóre pliki, które mogą być pomocne, które stworzyłem, gdy próbuje wdrożyć mój serwer:
app.yaml:
application: <app server url>
service: default
runtime: php55
api_version: 1
version: alpha-001
handlers:
- url: /(.+\.(ico|jpg|png|gif))$
static_files: \1
upload: (.+\.(ico|jpg|png|gif))$
application_readable: true
- url: /(.+\.(htm|html|css|js))$
static_files: \1
upload: (.+\.(htm|html|css|js))$
application_readable: true
- url: /(.+\.php)$
script: \1
login: admin
- url: /.*
script: index.php
login: admin
- url: /.*
script: register.php
login: admin
config.inc.php:
<?php
$cfg['blowfish_secret'] = '<Secret>'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
/*
* Servers configuration
*/
$i = 0;
// Change this to use the project and instance that you've created.
$host = '/cloudsql/<app server url>:us-central1:<database name>-app-php';
$type = 'socket';
/*
* First server
*/
$i++;
/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'cookie';
/* Server parameters */
$cfg['Servers'][$i]['socket'] = $host;
$cfg['Servers'][$i]['connect_type'] = $type;
$cfg['Servers'][$i]['compress'] = false;
/* Select mysql if your server does not have mysqli */
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['AllowNoPassword'] = true;
/*
* End of servers configuration
*/
/*
* Directories for saving/loading files from server
*/
$cfg['UploadDir'] = '';
$cfg['SaveDir'] = '';
$cfg['PmaNoRelation_DisableWarning'] = true;
$cfg['ExecTimeLimit'] = 60;
$cfg['CheckConfigurationPermissions'] = false;
// [END all]
php.ini:
google_app_engine.enable_functions = "php_uname, getmypid"
Edycja: tekstu dla przeglądarki będą .appspot.com/FCM/register.php
tablicy (11) {[ "pmaCookieVer"] => łańcucha (1) "5" [ "pma_lang"] => string (2) "en" ["pma_collation_connection"] => string (15) "utf8_unicode_ci" ["pma_console_height"] => ciąg (2) "92" ["SACSID"] => ciąg (355) "~ AJKiYcFgym76QZfbMX35ddCTdKKf-O7q5koLvNZ0coWTMvw9aNlR5fusNyLRzFyw5DB_t2ygVuTEjHwgrgBco4-wr_V3Eer_Mf0CDuGX2e4IpirCNeiGxkRvaLgRPPyZNZWKUx1mF_DChjsksTirkY5WCzlA3G3MO9bBScrLw8kNOFGnvzkev3-B2x31s_TmnDN5aJ0G3-nPueI4FPpKaaMlPsITziccvXMpiehglQOKoo1Bol3EZSF1tjI9QoJuc-6X_sHgJ0IEppg7K-cBapaEx5CmDD2kWOggnVPWnGj1SiKFUnE3DZD46bjovf5me7IdwfVX22bv5D2PJDPQEN4m3D7yP3-WDG" [ "pma_console_config"] => łańcuch (103) "{" alwaysExpand ": false," startHistory ": false," currentQuery ": true," enterExecutes ": false," darkTheme ": false}" ["pma_console_mode"] => ciąg (4) "pokaż" [ "phpMyAdmin"] => łańcuch (40) "cfd814e10982d138c7ed4a3ef510c454c0e5f9b9" [ "pma_iv-1"] => łańcuch (24) "bSPnJOOBe5x0iXPbbU5Nww ==" [ "pmaUser-1"] => łańcuch (24) „oHSLKZ7q6eOaXJ475Q6tzw = =”[ "pmaPass-1"] => łańcuch (24) "dwKZ9gQPCoe/Uk4sWS4s2g =="}
nowy register.php:
<?php
if (isset($_REQUEST["Token"])) {
$_uv_Token=$_REQUEST["Token"];
$conn = mysqli_connect("/cloudsql/<Database ServerURL>","root","","FCM") or die("Error connecting");
$q="INSERT INTO users (Token) VALUES ('$_uv_Token') "
." ON DUPLICATE KEY UPDATE Token = '$_uv_Token';";
var_dump(mysqli_query($conn,$q));
mysqli_query($conn,$q) or die(mysqli_error($conn));
mysqli_close($conn);
} else {
var_dump($_REQUEST);
}
?>
NotificationInstanceService.java
Nowy post Zapytanie:
Request request = new Request.Builder().url("<Application Server>/fcm/register.php?Token=123")
.post(body)
.build();
jeśli dodać ' else {var_dump ($ _ REQUEST); } 'do pliku register.php tuż przed'?> 'czy otrzymasz jakieś wyjście? Jeśli nie, spróbuj zastąpić linię zaczynając od 'mysqli_query ($ conn, $ q)' z 'var_dump (mysqli_query ($ conn, $ q));' i spróbuj ponownie tylko dla innego testu. – Hafenkranich
@Hafenkranich, więc dokąd to jest porzucone? Próbowałem postępować zgodnie z Twoją sugestią, ale nie mogę się domyślić, gdzie mogę znaleźć więcej informacji na temat tego wniosku lub czegokolwiek. – user1871869
1. Jeśli wywołasz 'https: // .appspot.com/fcm/register.php' w przeglądarce, powinieneś znaleźć się w' else', ponieważ nie dostarczyłeś tokena przez POST. Sprawdziłbym, czy to działa pierwszy. 2. Jeśli to działa, zmień wszystkie wartości z '$ _POST' na' $ _REQUEST' wewnątrz register.php i wywołaj 'https: // .appspot.com/fcm/register.php? Token = 123'. Powinno to albo wysłać nowego fałszywego użytkownika do bazy danych, albo wydrukować przydatne dane wyjściowe debugowania. 3. Jeśli to działało (użytkownik w db), część php wydaje się działać, a problem jest gdzieś wewnątrz twojego skryptu java. (pamiętaj, aby zresetować wszystko, co sugerowałem zmienić na potrzeby testowania) –
Hafenkranich