 |
fopen (PHP 3, PHP 4, PHP 5) fopen -- Apre un file o un URL Descrizioneresource fopen ( string filename, string mode [, bool use_include_path [, resource zcontext]] )
La funzione fopen() apre un collegamneto tra una risorsa, indicata
dal parametro filename, ed un flusso. Se il parametro
filename è del tipo "scheme://...",
si assume essere un URL ed il PHP cercherà il modulo di gestione del protocollo
(detto anche wrapper) per quello schema. Se non vi sono wrapper
registrati per il protocollo richiesto, il PHP genererà un
messaggio per aiutare a trovare potenziali problemi nello script
e quindi procede considerando filename
come un file regolare.
Se il PHP ha stabilito che filename indica un file
locale, tenterà di aprire detto file come stream.
Il file in oggetto dovrà esere accessibile dal PHP, occorre, pertanto, assicurasi che
i permessi di accesso del file lo consentano.
Se si è attivato il modalità sicura,
oppure open_basedir si avranno
ulteriori restrizioni.
Se il PHP ha stabilito che filename indica un
protocollo registrato, e che tale protocollo è registrato come un URL
di rete, il PHP verificherà che
allow_url_fopen
sia abilitato.Se fosse disabilitato, il PHP genererà un 'notice' e
la funzione fallirà.
Nota:
L'elenco dei protocolli supportati si trova in Appendice M.
Alcuni protocolli (indicati anche come wrappers) supportano
il context e/o le opzioni del php.ini
Fare riferimento alle pagine specifiche del protocollo per avere l'elenco delle opzioni
che possono essere utilizzate. (Ad esempio il parametro del php.ini
user_agent è utilizzato dal wrapper http)
Per una descrizione del contexts e del
zcontext, fare riferimento a Riferimento CLVII, Stream Functions.
Nota:
Come per PHP 4.3.2, la modalità di default è impostata a binarioper tutte
le piattaforme che distinguono tra modalità binaria e testuale. Se si hanno problemi
con i propri script dopo l'aggiornamento, provare a utilizzare il flag
't' come sostitutivo finchè si ha completato uno
script maggiormente portabile come richiesto sopra.
Il parametro mode indica il tipo di accesso
richiesto per il flusso. Esso può essere:
Tabella 1.
Elenco dei possibili valori usati da fopen()
per il parametro mode
mode | Descrizione |
---|
'r' |
Apre in sola lettura; posiziona il puntatore
all'inizio del file.
| 'r+' |
Apre in lettura e scrittura; posiziona il puntatore
all'inizio del file.
| 'w' |
Apre il file in sola scrittura; posiziona il puntatore all'inizio del file
e tronca il file alla lunghezza zero.
Se il file non esiste, tenta di crearlo.
| 'w+' |
Apre in lettura e scrittura; posiziona il puntatore all'inizio del file
e tronce il file alla lunghezza zero.
Se il file non esiste, tenta di crearlo.
| 'a' |
Apre in sola scrittura; posiziona il puntatore alla fine
del file. Se il file non esiste, tenta di crearlo.
| 'a+' |
Apre in lettura e scrittura; posiziona il
puntatore alla fine del file. Se il file non esiste, tenta
di crearlo.
| 'x' |
Crea ed apre il file in sola scrittura; posiziona il puntatore all'inizio
del file. Se il file esiste già la chiamata a
fopen() fallirà restituendo FALSE e verrà generato
un errore di lievllo E_WARNING. Se il file
non esiste si tenterà di crearlo. Questo equivale a
specificare i flag O_EXCL|O_CREAT nella
sottostante chiamata a open(2) . Questa opzione è
supportata a partire dalla versione 4.3.2 di PHP, e funziona solo con i file locali.
| 'x+' |
Crea ed apre il file in lettura e scrittura; posiziona il puntatore all'inizio
del file. Se il file esiste già la chiamata a
fopen() fallirà restituendo FALSE e verrà generato
un errore di lievllo E_WARNING. Se il file
non esiste si tenterà di crearlo. Questo equivale a
specificare i flag O_EXCL|O_CREAT nella
sottostante chiamata a open(2) . Questa opzione è
supportata a partire dalla versione 4.3.2 di PHP, e funziona solo con i file locali.
|
Nota:
Differenti famiglie di file system hanno differenti tipi di terminatori
di riga. Quando si scrive un file di testo e si desidera inserire una interruzione
di linea, occorre utilizzare il terminatore appropriato per il sistema operativo
utilizzato. I sistemi basati su Unix utilizzano \n come
terminatore di riga, i sistemi basati su Windows utilizzano \r\n
mentre i sistemi Macintosh utilizzano
\r.
Se si utilizza un errato terminatore di riga quando si scrivono i file,
si può verificare che altre applicazioni accedendo a questi file abbiano
comportamenti bizzarri.
Windows ha un flag di traduzione della modalità testo ('t')
che in modo trasparente converte \n in
\r\n mentre si lavora sul file. Ovviamente si ha anche
il flag 'b' per forzare una modalità binaria, nella quale non
si ha la conversione dei dati. Se si usano questi flag,
'b' oppure 't', devono essere posizionati
come ultimo carattere del parametro mode.
La modalità di conversione di default dipende dalla SAPI e dalla versione
di PHP che si sta utlizzando, pertanto si incoraggia l'uso dei flag appropriati per
aumentare la portabilità degli script. Si dovrebbe utilizzare 't'
se si lavora con dei file di testo, e si utilizza
\n per indicare il fine linea, e ci si aspetta che
che altre applicazioni, tipo notepad, leggano il file prodotto. In tutti
gli altri casi si dovrebbe utilizzare 'b'
Se non si specifica il flag 'b' quando si lavora con file binari, si
possono avere situazioni anomale nei dati, tipo immagini corrotte,
e situazioni anomale con i caratteri \r\n.
Nota:
Per la portabilità, si consiglia vivamente di usare sempre il flag
'b' quando si aprono files con fopen().
Nota:
Inoltre, sempre per la portabilità, è anche fortemente raccomandato
di aggiornare il codice che utilizza o che si avvale del mode
't' così da utilizzare il corretto terminatore di linea invece del
'b' mode.
Il terzo parametro opzionale use_include_path
può essere impostato a '1' oppure a TRUE se si desidera cercare il file in
include_path.
Se la open fallisce, la funzione restituisce FALSE e viene generato un errore
di tipo E_WARNING. Si può utilizzare
@
per sopprimere questo warning.
Esempio 1. Esempi di fopen()
<?php $handle = fopen("/home/rasmus/file.txt", "r"); $handle = fopen("/home/rasmus/file.gif", "wb"); $handle = fopen("http://www.example.com/", "r"); $handle = fopen("ftp://user:password@example.com/somefile.txt", "w"); ?>
|
|
Se si dovessero manifestare dei problemi nella lettura o scrittura
di file e si sta utilizzando la versione server di PHP, occorre verificare
che i file e le directory utilizzate dallo script
siano accessibili dal processo del server.
Sulla piattaforma Windows occorre prestare attenzione ai backslash
nei percorsi dei file; questi devono essere preceduti dal caratteri di escape '\', oppure utilizzare
lo slash '/'.
Avvertimento | When using SSL, Microsoft IIS
will violate the protocol by closing the connection without sending a
close_notify indicator. PHP will report this as "SSL: Fatal Protocol Error"
when you reach the end of the data. To workaround this, you should lower your
error_reporting level not to include warnings.
PHP 4.3.7 and higher can detect buggy IIS server software when you open
the stream using the https:// wrapper and will suppress the warning for you.
If you are using fsockopen() to create an ssl:// socket,
you are responsible for detecting and suppressing the warning yourself.
|
Nota: Quando safe-mode è abilitato, PHP controlla che
la directory nella quale si sta lavorando, abbia lo stesso UID dello
script che è in esecuzione.
Vedere anche Appendice M,
fclose(),
fgets(),
fread(),
fwrite(),
fsockopen(),
file(),
file_exists(),
is_readable(),
stream_set_timeout() e
popen().
|  |