Bonsoir,
Je fais suite à mon sujet https://community.ovhcloud.com/t/52652
Je souhaite envoyer des notifications par SMS à mes utilisateurs. J'essaie d'intégrer le script comme démontré ici : https://www.ovh.com/fr/g1639.envoyer_des_sms_avec_lapi_ovh_en_php
Je rencontre un problème au point Connexion basique à l'API, en fait j'ai copié le script en copié-collé (j'ai bien modifié les variables keys, ayant préalablement créé une clé API sur l'interface prévue à cet effet).
Au départ, mon vendor/autoload.php était situé à ./vendor/autoload.php ; alors que mon script test.php était à ./www/abc/def/test.php (enfin voyez quoi…)
J'ai donc déplacé le dossier "vendor" à ./www/abc/def/vendor ; de telle manière à ce que quand le script proposé par OVH appelle autoload, les liens soient bons.
Le seul petit problème, c'est que je me retrouve avec une erreur 500, pourquoi ? je n'arrive pas à comprendre. Les scripts sont les mêmes que ceux proposés par OVH dans les liens que j'ai mis, mise à part les key je n'ai rien modifié. Une âme charitable parmis vosu ?
Merci d'avance !
Lucas
Bonjour,
Normalement, tu n'as pas besoin de déplacer quoi que ce soit, c'est le principe de composer et des autoload : tu mets les librairies dans un coin, tu appelles au début de l'appli un include vers l'autoload, et ensuite tout est bon.
As-tu testé un truc très simple genre juste l'inclusion de l'autoload, puis la référence à une classe de l'API ovh (pas un truc compliqué comme une création d'objet, juste référencer une classe pour atteindre une de ses constantes, par exemple). Cela provoquera le mécanisme de l'autoloader. Si ça marche, ça veut dire que le bins vient de ton code.
Astuce pour débugger :
- vérifie version PHP (idéalement, la dernière [v7] pour être tranquille, la modif se fait dans le .ovhconfig dans la racine de ton home)
- active l'affichage des erreurs de scripts dans PHP (désactivées par défaut) avec `ini_set('display_errors', 'stdout');`
Quoi qu'il en soit, j'utilise l'api ovh et je n'ai pas eu de soucis, donc a priori, le problème n'est pas l'api.
Tiens nous au courant.
Bonjour @ppast.dev, et merci de ta réponse rapide !
En fait j'ai déplacé le dossier vendor car je travail sur ./www/dossier1/dossier2…/apiovh.php, et je me suis appercu que lorsque je fais echo DIR j'ai bien mon lien absolu soit ./www/dossier1/dossier2…/apiovh.php qui s'affiche. Et, dans le script d'OVH, il y a bien DIR/vendor/autoload.php (soit pour moi ./www/dossier1/dossier2…/vendor/autoload.php) alors qu'en réalité, il est placé à ./vendor/autoload.php (voici ma logique
)
Donc, je l'ai bien replacé à la racine, soit ./vendor
As-tu testé un truc très simple genre juste l'inclusion de l'autoload, puis la référence à une classe de l'API ovh (pas un truc compliqué comme une création d'objet, juste référencer une classe pour atteindre une de ses constantes, par exemple). Cela provoquera le mécanisme de l'autoloader. Si ça marche, ça veut dire que le bins vient de ton code.
Tu veux dire, que je fais un test en activant les erreurs PHP, en faisant juste l'appel de autoload.php ?
vérifie version PHP
Je suis sous PHP 5.6 je vais voir pour passer en 7.
active l'affichage des erreurs de scripts dans PHP (désactivées par défaut) avec ini_set('display_errors', 'stdout');
Ok je vais le faire de suite,
Quoi qu'il en soit, j'utilise l'api ovh et je n'ai pas eu de soucis, donc a priori, le problème n'est pas l'api.
Oui je pense aussi, je débute avec tout ce qui est composer, api … D'habitude, je me limite aux choses simples. Mais on a toujours envie d'aller plus loin ..
Merci pour ton aide !
As-tu testé un truc très simple genre juste l'inclusion de l'autoload, puis la référence à une classe de l'API ovh (pas un truc compliqué comme une création d'objet, juste référencer une classe pour atteindre une de ses constantes, par exemple). Cela provoquera le mécanisme de l'autoloader. Si ça marche, ça veut dire que le bins vient de ton code.
J'ai testé de refaire l'appel **Connexion basique à l'Api** de https://www.ovh.com/fr/g1639.envoyer_des_sms_avec_lapi_ovh_en_php
En incluant dans le code les messages d'erreurs. Et j'ai bien un message d'erreur indiquant :
Warning: require(/home/***/www/dossier1/dossier2.../vendor/autoload.php): failed to open stream: No such file or directory in /home/***/www/dossier1/dossier2.../test.php on line 16
Fatal error: require(): Failed opening required '/home/***/www/dossier1/dossier2.../vendor/autoload.php' (include_path='.:/usr/local/php5.6/lib/php') in /home/***/www/dossier1/dossier2.../test.php on line 16
Merci d'avance pour ton aide
Ah je comprends bien, maintenant on voit clairement l'erreur d'inclusion, il te cherche vendor/autoload.php dans le dossier courant (ou un truc du genre), alors qu'il n'y pas là.
Dans mes codes, je fais comme ça :
$root = $_SERVER['DOCUMENT_ROOT'];
include_once "${root}/vendor/autoload.php";
Dans l'hypothèse où ton dossier vendor est à la racine www de ton site (au même titre que tes pages html). Bien sûr tu peux y déplacer, mais la logique est plus compliquée. A la racine, c'est plus clair, et n'importe quelle appli/script est plus à même d'y accéder.
Ensuite, pour être sur d'avoir toujours le bon chemin, tu fais avec un chemin absolu. Il y a certainement plusieurs manières de faire. Celle que j'ai utilisé me semble claire et même en cas de changement de config chez OVH, ça devrait rester bon. $_SERVER['DOCUMENT_ROOT'] te donne le chemin absolu sur le serveur vers ton dossier racine www (le dossier que tes visiteurs accèdent en tapant ton nom de domaine). Concrêtement, c'est un truc du genre /home/{user}/www etc., mais dans le passé il y avait eu aussi du /homez.xx/{user}. Bref, peu importe, ça te donne ton chemin vers ton hébergement. Ensuite, tu construis tous tes chemins absolus depuis ça (pour les fopen, file_get_contents, et bien sûr les include/require).
Voilà je t'ai récapitulé le principe que j'utilise.
Pour info, ne tentes pas non plus un include "/vendor/autoload.php", car ça irait chercher le dossier en racine du serveur, et non pas de l'hébergement, erreur fréquemment commise !
Merci encore pour ta réponse.
SERVER['DOCUMENTROOT'] n'est pas non plus ma solution, dans le sens ou vendor est à la racine (./vendor) et mon script test.php est plus loin (./www/xxx..).
J'ai mis le liens absolu directement soit (/home/user/vendor) et là, ça me donne bien ma liste des utilisateurs. Je vais donc tester ainsi !
Merci de ton aide !
C'est bon ça fonctionne, j'ai pu envoyer un test par SMS. Sauf que j'utilise un numéro court. Dans mon manager, j'ai créé un expéditeur (domaine), comment envoyer avec ce paramètre et non le SenderForReponse ?
ah oui effectivement j'avais mal capté l'emplacement de ton /vendor. C'est dommage de mettre un lien absolu, car le jour où ovh le changera ça mettre tout en carafe… Au pire, tu peux faire :
`$root = $1https://api.ovh.com/console/#/sms/%7BserviceName%7D/jobs#POSThttps://api.ovh.com/console/#/sms/%7BserviceName%7D/jobs#POST 'DOCUMENT_ROOT'];
include_once "${root}/../vendor/autoload.php";`
avec le ".." tu recules d'un cran dans l'arborescence, et ça te ramène à la racine user, tout en faisant abstraction du début du chemin dont la pérennité n'est pas garantie (je me souviens avoir lu récemment sur le forum des problèmes de /homez.xxx remplacés par /home).
Concernant ta question sur l'expéditeur, j'ai pas utilisé, de mémoire, quand j'envoie mes sms d'alertes, ça affiche soit le numéro court de la plate-forme soit le libellé que j'ai choisi (ça dépend des opérateurs des destinataires, d'après mes tests). Ca fait un bail, je reconnais que je ne me souviens plus de la totalité…
Que dit la doc de l'api sms : lien suivant : [ovh api sms ? j'ai pas regardé et creusé de mon côté, c'est juste pour info.
Merci de ta réponse, j'ai testé comme indique l'API mais ça n'envoi rien du tout. J'ai contacté le support, peut-être qu'il y a une manipulation spécifique dans ce genre de cas.
Merci de ton aide,