Http2 sur mon hébergement (Gravelines 1)

Bonjour,

Je suis en train de programmer une application iOS, sur la quel j'envoi des notifications. J'ai alors besoin du http2, pour envoyer les informations à Apple. En revanche, lorsque j'ai éxécuté la commande : php_info(); j'ai vu que le http2 était désactivé. Savez-vous comment je pourrais faire pour l'activer ?

J'ai cru entendre qui fallait prendre un CDN, mais je préfère avoir confirmation avant de faire des conneries ! Merci d'avance, et par ailleurs, si vous savez si l'on peut faire autrement n'hésitez pas !

bonjour

le http2 est propre au https, il suffit d'utiliser ce protocole, CDN ou non

Bonjour, cependant, j'utilise l'https, et l'http2 reste tout de meme sur no…

tester avec https://tools.keycdn.com/http2-test ?

en effet, on me dit qu'il est bien supporté, cependant je ne comprends donc pas d'où vient le problème… Sachant qu'en local tout fonctionne très bien… Dés que j'essai d'exécuter le script sur mon serveur ça ne fonctionne plus, avez-vous des idées ? Je peux aussi vous envoyé le script. Actuellement, lorsque j'essai de l'exécuter, une erreur de type 500 me revient.

et pourquoi par ailleurs dans le phpinfo(), celui a "No" comme valeur ?..

Je me permets de vous joindre mon script php, si jamais vous avez des idées ?


include('../bdd.php');
$response2 = array();
if(isset($_POST['notifId'])) {
// echo "on a le post";
}else {
echo 'on a pas';
};
$idNotif = $POST['notifId'];
$req = $bdd -> prepare('SELECT tokenDevice FROM users WHERE id=:idUser');
$req -> execute(array(
'idUser' => $idNotif
));
$data = $req -> fetch();
$tokenDevice = $data['tokenDevice'];
$keyfile = 'p8file'; // Your p8 Key file
$keyid = 'kid'; // Your Key ID
$teamid = 'tid'; // Your Team ID (see Developer Portal)
$bundleid = 'bid'; // Your Bundle ID
$url = 'https://api.development.push.apple.com'; // development url, or use http://api.push.apple.com for production environment
$token = $tokenDevice; // Device Token

$message = '{"aps":{"alert":"Vous avez un nouveau message !","sound":"default"}}';

$key = openssl_pkey_get_private('file://'.$keyfile);

$header = ['alg'=>'ES256','kid'=>$keyid];
$claims = ['iss'=>$teamid,'iat'=>time()];

$header_encoded = base64($header);
$claims_encoded = base64($claims);

$signature = '';
openssl_sign($header_encoded . '.' . $claims_encoded, $signature, $key, 'sha256');
$jwt = $header_encoded . '.' . $claims_encoded . '.' . base64_encode($signature);

// only needed for PHP prior to 5.5.24
if (!defined('CURL_HTTP_VERSION_2_0')) {
define('CURL_HTTP_VERSION_2_0', 3);
}

$http2ch = curl_init();
curl_setopt_array($http2ch, array(
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_2_0,
CURLOPT_URL => "$url/3/device/$token",
CURLOPT_PORT => 443,
CURLOPT_HTTPHEADER => array(
"apns-topic: {$bundleid}",
"authorization: bearer $jwt"
),
CURLOPT_POST => TRUE,
CURLOPT_POSTFIELDS => $message,
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_TIMEOUT => 30,
CURLOPT_HEADER => 1
));

$result = curl_exec($http2ch);
if ($result === FALSE) {
throw new Exception("Curl failed: ".curl_error($http2ch));
}

$status = curl_getinfo($http2ch, CURLINFO_HTTP_CODE);
// echo $status;

function base64($data) {
return rtrim(strtr(base64_encode(json_encode($data)), '+/', '-
'), '=');
}
$response2["message"] = "mesage sent";
// } else{
// $response["message"] = "non envoyer";
// }
echo json_encode($response2);
?>

Lorsque j'exécute le script avec les erreurs PHP affichés, Postman me retourne :



Fatal error: Uncaught Exception: Curl failed: No URL set! in
/home/pharmadedx/www/meet/appIos/messageNotification.php:61
Stack trace:
#0 {main}
thrown in /home/pharmadedx/www/meet/appIos/messageNotification.php on line 61

> Curl failed: No URL set

il semblerait que $url ne soit pas correctement lue

En effet, cependant je comprends mal pourquoi lors de mes test en localhost, tout fonctionne bien…