Altro PHP funzioni socket_...

Stato
Discussione chiusa ad ulteriori risposte.

Claudia C

Utente Iron
10 Gennaio 2021
8
2
4
9
Ciao.
Devo scrivere in PHP un client e un server che devono comunicare attraverso un socket.
A quanto pare, a partire dalla prima funzione "socket_create()" ci sono dei problemi: lanciando il server da CLI (Windows 10) mi restituisce questo errore:
Fatal error: Uncaught Error: Call to undefined function socket_create() in \Users\EliteBook\Desktop\Pomella\www\MyPHP\socket\socket04\Server.php:6
Stack trace:
#0 {main}
thrown in \Users\EliteBook\Desktop\Pomella\www\MyPHP\socket\socket04\Server.php on line 6


Ecco invece la risposta da chrome
Warning: socket_bind(): unable to bind address [10048]: Di norma è consentito un solo utilizzo di ogni indirizzo di socket (protocollo/indirizzo di rete/porta). in \xampp\htdocs\socket04\Server.php on line 7
Could not bind to socket.


Fino a ieri sera utilizzavo UniserverZ. Ora ho provato ad installare anche XAMPP perchè ho visto in rete diversi suggerimenti sull'argomento, ma partono tutti dal presupposto che si usi XAMPP. I suggerimenti dicono di andare al file "php.ini" (che in UniserverZ si chiama "phptest.ini") e togliere il commento del punto e virgola davanti ai riferimenti sui socket. Infatti così ho fatto:
; Default timeout for socket based streams (seconds)
; http://php.net/default-socket-timeout
default_socket_timeout = 60

(...)
extension=sockets

Ho spento e riacceso il server. Sia con UniserverZ (che ora non riesco a disisntallare, a proposito: mica confliggono Xampp e Uniserver??) sia con XAMPP la stessa storia.
Mi trovo di fronte ad un classico errore che ho già visto affrontare in rete, ma mi sembra di aver seguito tutte le mosse suggerite.
L'unica cosa che non trovo nè nel mio file php.ini (e nemmeno al phptest.ini che ha Uniserver) è la riga inerente alla libreria dll: in rete dicono che, su xampp, occorre togliere il commento a questa riga (come al solito si elimina il ; davanti alla riga)
extension=php_sockets.dll
Ma io questa riga non ce l'ho.
La libreria, però, è presente su Apache.
Sto lavorando in spazio Admin e non in spazio Utente.
Altre idee...?
Che faccio...? Ho esaurito la fantasia...!
Grazie :)
 
Il primo errore, della funzione socket_create, e' come dicevi giustamente l'estensione disabilitata, se non trovi la riga con php_sockets.dll e' perche' forse e' in questa variante:
Configurazione Apache:
;extension=sockets
Occhio che la versione CLI potrebbe avere un php.ini diverso dalla versione "web", su ubuntu ad esempio e' cosi' di default, non so questo UniserverZ che non conosco, su xampp invece e' solo in un posto, accertati di eseguire l'installazione di PHP giusta da CLI, se hai le environment variables incasinate prova ad usarlo come:
Codice:
"C:\xampp\php\php.exe" -f file123.php

Per socket_bind invece l'errore e' chiaro, stai mettendo in ascolto su una porta gia' occupata da un altro programma, questo puo' essere completamente un altro software, o se stai provando con la 80 il webserver di xampp, o PHP stesso se apri lo script piu' volte senza aspettare che l'altro termini. Prova usando una porta > 1024 ed avvia una sola istanza dello script alla volta.
 
Il primo errore, della funzione socket_create, e' come dicevi giustamente l'estensione disabilitata, se non trovi la riga con php_sockets.dll e' perche' forse e' in questa variante:
Configurazione Apache:
;extension=sockets
Occhio che la versione CLI potrebbe avere un php.ini diverso dalla versione "web", su ubuntu ad esempio e' cosi' di default, non so questo UniserverZ che non conosco, su xampp invece e' solo in un posto, accertati di eseguire l'installazione di PHP giusta da CLI, se hai le environment variables incasinate prova ad usarlo come:
Codice:
"C:\xampp\php\php.exe" -f file123.php

Per socket_bind invece l'errore e' chiaro, stai mettendo in ascolto su una porta gia' occupata da un altro programma, questo puo' essere completamente un altro software, o se stai provando con la 80 il webserver di xampp, o PHP stesso se apri lo script piu' volte senza aspettare che l'altro termini. Prova usando una porta > 1024 ed avvia una sola istanza dello script alla volta.
Giusto! Verissimo!
Invece sono riuscita a installare XAMPP, l'errore era nel tenere due librerie (errore da fessi!). Cioè avevo trovato la extension=socket da decommentare e l'ho fatto. Poi ho aggiunto, come da consigli vari in rete, anche la php_sockets.dll.
Le stesse manovre su Uniserver, non sono state utili e continua a non funzionare.
Tenere due librerie significa garantirsi dei conflitti sulle dichiarazioni. Ho commentato la extension=socket e sembra andare meglio! Poi...ho finito il tempo disponibile e per evitare una porta già occupata, devo rimandare al weekend. Grazie :)
 
Stato
Discussione chiusa ad ulteriori risposte.