Je développe des applications mobiles (avec Flutter) et l'api de ces dernières avec Symfony d'habitude. En local, après avoir lancé le serveur (symfony serve) j'accède à mon api en utilisant l'adresse de ma machine sur le réseau (192.158.x.x pour accéder à 127.0.0.1) et tout marche bien.
Mais je crée actuellement une api pour un site WordPress, pour lancer le serveur je fais un php -S localhost:3000. Sachant que localhost pointe vers 127.0.0.1 je me disais qu'il n'y avait pas de soucis mais hélas quand je tape l'adresse IP de ma machine sur mon téléphone rien n'est trouvé. Une solution aurait été de faire un php -S 127.0.0.1:3000 mais j'ai peur que ça change beaucoup de choses, dans les paramètres du site WordPress c'est localhost un peu partout et non 127.0...
Je me demande pourquoi l'adresse IP de ma machine ouvre bien mon serveur lorsque c'est du style 127.0.0.1... mais ne marche pas avec localhost. Je loupe probablement un détail, vos avis s'il vous plait ?
Actuellement j'utilise ngrok mais les légères variations de débit me font ça dur.
Edit
Je viens de faire un test. J'ai lancé une app Symfony sur 127.0.0.1:8000 et mon site Wordpress sur 127.0.0.1:3000 (pas localhost cette fois) et les deux s'ouvrent sur PC. Sur mobile 192.168.1.52:8000 ouvre bien le site Symfony mais 192.168.1.52:3000 n'ouvre pas le site WordPress :ERR_CONNECTION_TIMED_OUT.
Quel navigateur utilises-tu ? Je sais que Firefox force 127.0.0.1 pour localhost, là où d'autres utilisent plus volontiers l'IPv6, et cela peut avoir une influence.
Oui. mais je pense maintenant que ça peut venir de la manière dont le port est ouvert aux divers points de ton réseau, "en local uniquement" ou "béant", et une fois de plus aussi selon l'adresse IP résolue par le réseau / les machines.
Je ne connais pas assez en réseau, mais il pourrait y avoir moyen de faire des redirections de port dans le routeur/la box selon le vocabulaire utilisé par le fournisseur.
Mais je pense que ma première hypothèse est aussi à creuser. Malheureusement, je ne connais pas assez les réseaux, et il faut dire que c'est rapidement dépendant du matériel et de la surcouche firmware.
SI tu lances avec localhost, il va y avoir résolution sur adresse IPv4 ou v6 selon l'hôte. En local, tant que tu utilises 127.0.0.1 ou localhost, si j'ai bien compris, peu de souci — je serais néanmoins curieux de savoir si [::1]:8000 et [::1]:3000 fonctionnent.
Si ton réseau local supporte IPv6, essaie avec les IP locales en v6, c'est plus complexe, mais c'est imaginable.
Autres possibilité : rediriger le trafic arrivant sur le port 8000 de ton routeur vers le même port de ta machine hôte — il ne devrait pas capturer ce qui en sort, du moins ça ne le fait pas avec mon matériel —, cela devrait permettre un accès plus spécifique quelle que soit la version d'adresse IP utilisée.
Si tu es sur un réseau avec des appareils Apple, tu devrais aussi pouvoir utiliser une résolution locale DNS avec des noms de domaine automatiques en nomdelamachine.local. J'ai eu utilisé ça en entreprise pour qu'on se teste les sites parmi, à l'époque ça fonctionnait étonnamment bien.
Edit
Il se pourrait simplement que, si tu utilises le nom de domaine dans la configuration, il faille tenter d'en utiliser un aussi pour y accéder, et si tu utilisais l'adresse IP, tu pourrais aussi en utiliser une — avec l'inconnue du mélange v4 v6.
J'ai fait d'autres tests. J'ai lancé le site Symfony sur les autres ports, et à chaque fois ça s'ouvrait bien sur le téléphone. Mais de la même manière, peu importe le port du site Wordpress il est accessible dans le navigateur de la machine mais pas sur le téléphone. Je peux donc affirmer que le problème vient de Wordpress.
Le site Symfony est en https et Wordpress en http, je me suis dit que ça pouvait être la cause au début mais le tableau de bord de xampp s'ouvre bien sur mobile pourtant c'est en http. Je ne sais pas toujours ce qui bloque réellement avec ce site Wordpress mais je vais continuer les recherches.
>je serais néanmoins curieux de savoir si [::1]:8000 et [::1]:3000 fonctionnent.
Oui mais est-ce encore utile maintenant ?
>Il se pourrait simplement que, si tu utilises le nom de domaine dans la configuration, il faille tenter d'en utiliser un aussi pour y accéder, et si tu utilisais l'adresse IP, tu pourrais aussi en utiliser une — avec l'inconnue du mélange v4 v6.
> pour lancer le serveur je fais un php -S localhost:3000. Sachant que localhost pointe vers 127.0.0.1 je me disais qu'il n'y avait pas de soucis mais hélas quand je tape l'adresse IP de ma machine sur mon téléphone rien n'est trouvé.
php -S localhost:3000, ça dit de rendre le serveur accessible sur le port 3000 de 127.0.0.1, adresse IP qui est associée à l'interface "loopback", destinée à la communication entre processus de cette même machine.
Et a priori, ça ne le rend pas accessible depuis des machines différentes.
---
Un test.
1. Dans le fichier /tmp/a.php je mets
<?php
print("hello, world\n");
?>
et je lance un serveur sur le port 3000
$ php -S 127.0.0.1:3000 a.php
[Fri Dec 6 19:23:14 2024] PHP 8.2.24 Development Server (http://127.0.0.1:3000) started
2. Maintenant, depuis la même machine, je questionne ce serveur (en utilisant telnet, je suis un dinosaure) en envoyant ma requête HTTP GET /a.php suivie de deux retour-chariots
$ telnet localhost 3000
Trying ::1... # telnet essaie ipv6
Connection failed: Connexion refusée # marche pas
Trying 127.0.0.1... # bon alors ipv4 ?
Connected to localhost.
Escape character is '^]'.
GET /a.php # ma requete
HTTP/0.9 200 OK # réponse, avec entete HTTP/0.9
Date: Fri, 06 Dec 2024 18:24:34 GMT
Connection: close
X-Powered-By: PHP/8.2.24
Content-type: text/html; charset=UTF-8
hello, world # le corps de la réponse
Connection closed by foreign host.
EDIT : GET / ferait l'affaire
du côté serveur, on voit qu'on a été interrogé depuis la même adresse IP
[Fri Dec 6 19:24:29 2024] 127.0.0.1:46592 Accepted
[Fri Dec 6 19:24:34 2024] 127.0.0.1:46592 Closing
3. Le PC a une adresse réseau 192.168.1.11. Essayons de l'utiliser :
$ telnet 192.168.1.11 3000
Trying 192.168.1.11...
telnet: Unable to connect to remote host: Connexion refusée
ah bin non ça veut pas.
4. Et évidemment depuis une autre machine, encore moins de chances que ça marche (si vous voulez voir ça comme une question de chances).
Bref : on fait tourner le serveur sur localhost:3000, pas sur une autre adresse IP. et comme localhost est strictement local...
Certes on peut s'arranger, si on connaît les formules magiques, pour avoir une redirection de ce qui arrive sur le port 3000 de l'interface ethernet vers localhost, mais c'est pas la bonne démarche.
5. Si on veut que le serveur soit accessible, on le fait tourner avec une adresse IP accessible
php -S 192.168.1.11:3000 a.php
[Fri Dec 6 19:38:28 2024] PHP 8.2.24 Development Server (http://192.168.1.11:3000) started
et là ça marche avec telnet 192.168.1.11 3000
mais par contre ça marche plus avec les adresses IP de loopback
6. Si vous voulez vraiment que votre serveur accepte les connexions sur TOUTES les interfaces (loopback et réseau), faites-le tourner sur l'adresse 0.0.0.0
php -S 0.0.0.0:3000 a.php
[Fri Dec 6 19:41:40 2024] PHP 8.2.24 Development Server (http://0.0.0.0:3000) started
[Fri Dec 6 19:41:43 2024] 127.0.0.1:46470 Accepted
[Fri Dec 6 19:41:46 2024] 127.0.0.1:46470 Closing
[Fri Dec 6 19:41:50 2024] 192.168.1.11:54298 Accepted
[Fri Dec 6 19:41:52 2024] 192.168.1.11:54298 Closing
(c'est pas écrit dans la doc php, ça marche sous Linux, je garantis pas pour windows).
Même avec 0.0.0.0:3000 ce n'est pas disponible sur mon téléphone.
Si on est dans un contexte familial avec
le serveur branché sur une box
le téléphone qui accède au wifi de la même box
et qui y accède par l'adresse IP "domestique" du serveur
ça peut marcher.
Sinon, sur la box, il faut faire de la redirection de port pour que ce qui arrive en TCP sur le port 3000 de l'adresse publique soit redirigé vers le port 3000 du serveur.
- Edité par michelbillaud 7 décembre 2024 à 16:05:11
Ce qui me choque beaucoup c'est que "symfony serve" marche mais pas "php -S xxxx" peu importe les ports. Pourtant en théorie ces deux commandes font la même chose. Le type de site a un impact ici ?
Edit
Quand je dis marcher je parles bien sur de l'accès au site etant sur d'autres appareils du reseau
Alors je pense que la théorie n'est pas la pratique, preuve en est ce sujet
Je sais d'ailleurs que l'outil CLI de Symfony permet le support de HTTPS, ce qu'à ma connaissance PHP natif ne supporte pas, du coup je soupçonne soit une surcouche gérée par l'outil, soit une implémentation spécifique plus bas niveau.
> je me demande pourquoi l'adresse IP de ma machine ouvre bien mon serveur lorsque c'est du style 127.0.0.1... mais ne marche pas avec localhost. Je loupe probablement un détail, vos avis s'il vous plait ?
faudrait être plus précis. Est-ce que la question c'est la différence entre
php -S 127.0.0.1:3000
php -S localhost:3000
- comme suggère le titre - quand on lance ces commandes sur le serveur ?
Si "ça ne marche pas avec localhost", ça veut dire que php refuse de lancer le truc (et forcément si il peut pas le lancer on aura du mal à y accéder), comme dans ceci :
$ php -S machin:3000 a.php [Mon Dec 9 20:05:18 2024] PHP Warning: Unknown: php_network_getaddresses: getaddrinfo for machin failed: Name or service not known in Unknown on line 0 [Mon Dec 9 20:05:18 2024] Failed to listen on machin:3000 (reason: php_network_getaddresses: getaddrinfo for machin failed: Name or service not known)
alors ça voudrait dire que la résolution du nom localhost ne se fait pas sur le serveur. Peut être un problème avec windows, de ce genre
Mais bon, comme on sait pas ce qu'il y a dans ton php, que tu ne donnes pas de messages d'erreurs, qu'on sait pas sous quel os, etc. c'est juste une tentative de solution au hasard.
Ou alors, si php lance le truc sans protester, il doit y avoir des traces quand on tente de s'y connecter.
- Edité par michelbillaud 9 décembre 2024 à 20:16:35
>Mais bon, comme on sait pas ce qu'il y a dans ton php, que tu ne donnes pas de messages d'erreurs, qu'on sait pas sous quel os, etc. c'est juste une tentative de solution au hasard.
PS> php -S localhost:3000 # localhost ou 127.0.0.1
[Tue Dec 10 14:45:58 2024] [::1]:62401 Accepted
[Tue Dec 10 14:46:00 2024] [::1]:62401 [200]: GET /wp-json/api/v2/job-application/27
[Tue Dec 10 14:46:00 2024] [::1]:62401 Closing
[Tue Dec 10 14:46:00 2024] [::1]:62403 Accepted
[Tue Dec 10 14:46:02 2024] [::1]:62403 [200]: POST /wp-cron.php?doing_wp_cron=1733838359.6505239009857177734375
[Tue Dec 10 14:46:02 2024] [::1]:62403 Closing
[Tue Dec 10 14:46:02 2024] [::1]:62408 Accepted
[Tue Dec 10 14:46:04 2024] [::1]:62408 [200]: GET /wp-json/api/v2/job-offer/2748?is-wp-post
[Tue Dec 10 14:46:04 2024] [::1]:62408 Closing
[Tue Dec 10 14:46:05 2024] [::1]:62414 Accepted
[Tue Dec 10 14:46:06 2024] [::1]:62414 [200]: GET /wp-json/api/v2/company/3
[Tue Dec 10 14:46:06 2024] [::1]:62414 Closing
[Tue Dec 10 16:43:43 2024] [::1]:54007 Accepted
Ci dessus le terminal quand j'accède au site en local ou via Postman. Lorsque j'essaie d'accéder via l'adresse IP de ma machine:
PS> php -S localhost:3000
[Tue Dec 10 16:50:06 2024] PHP 8.2.12 Development Server (http://localhost:3000) started
Et c'est tout, peu importe l'adresse IP sur ma machine ou sur mon téléphone rien ne change dans le terminal, comme si la requête n'y arrivait même pas.
@michelbillaud je vais tester tes solutions et voir.
PS: J'ai changé le titre du sujet, c'est bien plus direct je crois.
Hello, j'essaye de comprendre, si ton but est de pouvoir effectuer une requête venant de ton téléphone qui est en dehors de ton ordinateur local, alors il ne faut pas mettre ni "localhost" ni "127.0.0.1" mais "0.0.0.0" qui signifie toutes les adresses. Donc ta commande sera :
PS> php -S 0.0.0.0:3000
Avant tu peux regarder quelle est ton @IP avec un
PS> ipconfig
Et sur le device qui veut se connecter tu n'a plus qu'a faire http://@IP:3000/
En espérant que je ne suis pas Hors Sujet
PS: Voici une image de ce que j'ai : (l'adresse en .12 c'est mon navigateur web en dehors de la VM et le .21 c'est le téléphone)
Bonjour @quentin, dans mon précèdent message j'ai parlé de localhost et 127.0.0.1 mais même avec 0.0.0.0 le résultat est le même. La console ne bouge pas...
J'ai changé l'adresse de mon site Wordpress en tout (127.0.0.1, 192.168.x.x, ...) mais rien. Lors de l'accès sur le téléphone le résultat est le même.
J'ai déplacé (une copie) le dossier de Wordpress pour le mettre dans htdocs mais rien. J'ai fait des recherches supplémentaires sur le net et on dirait que ce n'est pas une situation rare.
Je vais me contenter de ngrok actuellement.
Edit:
>Remède : configurer WordPress pour qu'il redirige vers une de ses adresses du serveur qui soit accessible par le téléphone (192.168.1.52, port 3000)
Si ce n'est pas ce que j'ai fait alors je n'ai vraiment pas compris l'instruction.
Quand je lis "dans le navigateur il redirige vers localhost", c'est qu'on a pas dit à WordPress de rediriger ailleurs.
Après, il faudrait prendre le problème avec un peu de rigueur. Regarder ce qui passe sur le réseau, les logs du serveur etc.
> ce n'est pas une situation rare
En effet, il y a plein de gens qui "ont tout essayé et ça veut pas marcher". Jusqu’à ce qu'ils essaient de configurer correctement, et Ô miracle, ils y arrivent (parfois).
---
Tentative de reconstitution du problème
1. on crée un répertoire TestRedir, avec deux fichiers HTML
le fichier index.html contient une redirection au bout de 3 secondes
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="refresh"
content="3;url=http://localhost:3000/page.html">
<title>Redirection</title>
</head>
<body>
<h1>Cette page est redirigée</h1>au bout de 3 secondes
</body>
</html>
le fichier page.html affiche un truc
<!DOCTYPE html>
<html>
<head>
<title>Ma page</title>
</head>
<body>
<h1>Ma Page</h1>
On la voit
</body>
</html>
Comme je l'ai dit dans mes précédents messages, il n'y a rien dans la console quand j'essaie d'y accéder sur mobile. Ce que le navigateur montre est ci dessus et sur la machine la console n'affiche rien, rien du tout, comme si aucune requête n'avait été effectuée en faite. Y'a t-il d'autres logs à consulter ?
J'ai vu des propositions de solutions qui parlaient de modifier certains fichiers serveurs, comme tu l'as suggéré ici:https://openclassrooms.com/forum/sujet/ouvrir-mon-site-sur-dautres-appareils-du-reseau-221ef#message-95208669. Je vais explorer ce point.
Ceci c'est la console la plupart du temps. J'ai désactivé le pare-feu de Windows defender et j'ai ressayé d'y accéder sur mobile:
C'est bien meilleur maintenant merci.
Sur le téléphone j'ai un vrai message maintenant: "localhost refused to connect". J'avais remis les paramètres par défaut en local (localhost:3000 comme url du site), mais je vais remodifier et mettre 192.x.x.x:3000(tant que c'est different de localhost...). Je pense que le problème sera vite résolu maintenant, merci.
C'est pas très confortable de tester avec un smartphone. Avec le navigateur d'un ordinateur, on a plus facilement les traces de ce qui se passe... (outils de développement web de firefox, etc)
- Edité par michelbillaud 13 décembre 2024 à 16:01:20
Alors OK pour gérer le design avec les outils pour affichage adaptatif avec le desktop, mais lors de mes derniers essais, ce n'était pas pour déboguer du JavaScript qui ne se comporte différemment sur les appareils malgré la même famille de navigateurs (oui, ça sent bien le vécu). Auquel cas, Chrome comme Firefox sur Android ont de quoi faire du débogage à distance, même s'il faut du coup bien avoir de quoi accéder à la machine hôte depuis le réseau local à tout le moins.
Edit (vu ce qui suit)
Je parle évidemment uniquement du cas où l'on voudrait tester le site avec un appareil mobile, ce qui semblait être la base de discussion jusqu'à maintenant. Pour tester le réseau, il y a probablement d'autres outils, pour quelque type d'appareil que ce soit.
Ce n'est pas exclusif. Faut faire les deux. Et pour le cas présent, voir ce que reçoit et envoie le navigateur pour comprendre le problème de communication, y a un outil qui est mieux adapté. Les soucis avec les trucs qui s'affichent pas comme on voudrait, ça vient après.
Bonjour, j'ai changé l'url du site dans la paramètres de Wordpress comme dit sur ce message. Tout marche.
Pour vos derniers messages, je fais l'application mobile du site web et l'application n'arrivait pas à communiquer avec l'API d'où tous ces soucis. Merci pour votre aide.
Ouvrir mon site sur d'autres appareils du réseau
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
My website : Mon serveur discord, Se demerder tout seul, Faille XSS et SQL