Dans PHP, la fonction getServbyName () est utilisée pour obtenir le numéro de port correspondant du service en fonction du nom du service (tel que HTTP ). Il renvoie un entier représentant le numéro de port utilisé par le service. Si le nom du service n'est pas valide ou non enregistré, la fonction renvoie une valeur nulle. Lorsque vous rencontrez getServbyName () renvoie une valeur nulle, cela signifie généralement qu'il y a un problème avec le nom de service de la requête. Cet article introduira les causes courantes et les solutions correspondantes pour vous aider à localiser et à résoudre les problèmes.
L'une des raisons les plus courantes est la mal orthographe du nom du service passé dans la fonction getServbyName () . Par exemple, lorsque vous essayez d'obtenir le port d'un service HTTP, il peut être écrit incorrectement en tant que HTTP ou HTTPS (bien qu'il puisse être une erreur de protocole, mais il peut également s'agir d'une faute de frappe).
Assurez-vous que le nom du service que vous avez réussi est exactement correct et est cohérent avec le nom du service répertorié dans le fichier / etc / services .
Vous pouvez vérifier le fichier / etc / services pour vous assurer que le nom du service est correct. Ce fichier existe sur la plupart des systèmes Linux et contient des services communs et leurs numéros de port correspondants.
getServbyName () s'appuie sur le fichier / etc / services dans le système pour interroger le nom du service et le numéro de port. Si le fichier n'existe pas ou est corrompu, la fonction ne peut pas renvoyer le résultat correctement.
Vérifiez si le fichier / etc / services existe et n'est pas corrompu. Si le fichier est perdu ou inaccessible, vous devez le récupérer. Il peut être corrigé en réinstallant les composants du système d'exploitation pertinent.
Si vous êtes administrateur, assurez-vous que les autorisations de fichier sont définies correctement, le script PHP peut accéder au fichier.
La requête de getServbyName () dépend de savoir si le service est enregistré dans le fichier / etc / services . Si un service n'est pas enregistré dans la liste des services du système, la fonction ne peut pas renvoyer les résultats valides.
Si le service que vous essayez de remettre en question n'est pas répertorié dans / etc / services , envisagez d'ajouter manuellement le service et son numéro de port.
Par exemple, ouvrez le fichier / etc / services et ajoutez quelque chose comme ce qui suit:
<span><span>customservice 12345/tcp
</span></span>
De cette façon, le service nommé CustomService est enregistré comme port 12345 .
getServbyName () doit passer en deux paramètres: nom du service et type de protocole. Le type de protocole est généralement TCP ou UDP . Si le type de protocole n'est pas valide, la fonction renverra également une valeur nulle.
Assurez-vous que le type de protocole est correct et compatible avec le service interrogé. Les types de protocole communs incluent TCP et UDP . Si vous n'êtes pas sûr, vous pouvez consulter la documentation ou afficher la configuration du système.
Parfois, les problèmes de configuration avec PHP peuvent faire en sorte que getServByName () échoue à lire correctement le fichier / etc / services . Par exemple, la configuration PHP peut avoir une fonction GetServByName désactivée, ou il existe une exception dans l'environnement système.
Vérifiez le fichier de configuration php.ini pour vous assurer qu'aucune fonction réseau pertinente (comme getServbyName () ) n'est désactivée.
Assurez-vous que l'environnement dans lequel PHP est situé peut accéder aux fichiers de configuration réseau du système.
Utilisez la fonction phpinfo () pour voir si l'environnement PHP charge normalement les extensions pertinentes.
Si PHP s'exécute dans certains environnements réseau spéciaux (tels que les environnements conteneurisés, les machines virtuelles et les environnements d'accès réseau restreints), getServbyName () peut ne pas être en mesure d'accéder normalement à la liste de services du système, puis de renvoyer une valeur nul.
Dans un environnement restreint, essayez d'obtenir le numéro de port du service par d'autres moyens, tels que la configuration manuelle du numéro de port, ou utiliser d'autres méthodes pour interroger les informations du service.
Vous pouvez également essayer d'interroger le port directement au lieu de getServbyName () , comme utiliser getAdDrinfo () ou interroger directement un numéro de port connu.
Si la fonction getServbyName () n'a pas pu résoudre le problème, vous pouvez envisager d'utiliser d'autres fonctions PHP ou interroger directement le numéro de port connu. Par exemple, getAddrinfo () est une fonction plus générale qui convient à l'obtention d'informations sur l'adresse hôte et le port.
Envisagez d'utiliser getAdDrinfo () ou d'autres fonctions liées au réseau au lieu de getServbyName () , en particulier si / etc / services ne sont pas accessibles.
Lorsque GetServByName () renvoie la valeur vide, les raisons courantes incluent les erreurs d'orthographe, les problèmes de configuration du système ou l'enregistrement de service manquant. Grâce aux étapes et solutions de diagnostic ci-dessus, vous pouvez efficacement résoudre et résoudre efficacement les problèmes. Assurez-vous toujours l'exactitude du nom du service et du type de protocole et vérifiez l'intégrité des fichiers de configuration du système pour vous assurer que les fonctions peuvent fonctionner normalement.