-
fopen, fsockopen
Qualcuno sa spiegarmi in parole semplici la differenza tra queste due funzioni? Quando usare una o l'altra?
Francamente non l'ho capito. Pare funzionino entrambe per lo stesso scopo!
Per esempio se voglio aprire un file.php su un sito esterno e salvarne l'output in una variabile quale delle due funzioni è meglio usare?
Grazie.
-
La funzione fopen permette di aprire (per poi leggere o scrivere) files locali o risorse esterne di cui consci l'URI; la funzione fsockopen va invece usata per aprire un socket, una connessione TCP.
-
edit: preceduto ma, vabbeh, ho scritto di più :wink:
Originariamente fopen() apre un file su disco, in lettura o scrittura. Può essere utilizzato quindi per leggere e scrivere file sul tuo spazio web.
Versioni recenti del php estendono il concetto di "file" rendendo possibile aprire, in sola lettura, diversi tipi di risorse di rete, fra cui pagine http situate su altri server. In seguito a questa estensione, è possibile usare fopen (ma anche file_get_contents et al) con indirizzi di pagine web.
Codice PHP:
<pre><?= file_get_contents('http://www.wordpress.com/'); ?></pre>
fsockopen() invece apre un socket, ovvero una connessione TCP o simile con un server su internet, specificato da un protocollo, un hostname ed una porta.
Una volta collegato al servizio remoto, puoi comunicare bidirezionalmente con esso. Se ti collegassi ad un server web, potresti richiedere una pagina con GET index.html ad esempio. Il tutto però sarebbe equivalente ad una singola chiamata a file_get_contents, che nel tuo caso dovrebbe essere più che sufficiente.
Ricordarti fra le altre cose che per leggere file da siti esterni devi attivare le connessioni server2server, a meno che non sia incluso nella lista dei siti già abilitati di default.