1
0
mirror of https://github.com/php/doc-it.git synced 2026-03-26 00:22:14 +01:00
Files
George Peter Banyard 416679c8a5 Update EN-Revision tags for new rev-check
This only updates files which have an empty diff between the two different revisions
2021-02-02 18:31:21 +00:00

391 lines
14 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: e41806c30bf6975e452c0d4ce35ab0984c2fa68c Maintainer: pastore Status: ready -->
<!-- CREDITS: cortesi,fernando -->
<refentry xmlns="http://docbook.org/ns/docbook" xml:id="function.fopen">
<refnamediv>
<refname>fopen</refname>
<refpurpose>Apre un file o un URL</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>resource</type><methodname>fopen</methodname>
<methodparam><type>string</type><parameter>filename</parameter></methodparam>
<methodparam><type>string</type><parameter>mode</parameter></methodparam>
<methodparam choice="opt"><type>bool</type><parameter>use_include_path</parameter><initializer>&false;</initializer></methodparam>
<methodparam choice="opt"><type>resource</type><parameter>context</parameter></methodparam>
</methodsynopsis>
<para>
La funzione <function>fopen</function> apre un collegamento tra una risorsa, indicata
dal parametro <parameter>filename</parameter>, ed un flusso.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>filename</parameter></term>
<listitem>
<para>
Se il parametro <parameter>filename</parameter> è nella forma "scheme://...",
si assume che sia un URL e PHP cercherà il modulo di gestione del protocollo
(detto anche wrapper) per quello schema. Se non vi sono wrapper
registrati per il protocollo richiesto, PHP genererà un messaggio per aiutare a trovare
potenziali problemi nello script e quindi procede considerando
<parameter>filename</parameter> come un file normale.
</para>
<para>
Se PHP ha stabilito che <parameter>filename</parameter> indica
un file locale, tenterà di aprire detto file come stream.
Il file in oggetto dovrà esere accessibile a PHP, occorre, pertanto, assicurarsi che
i permessi di accesso del file lo consentano.
Se si è attivato
<link linkend="ini.open-basedir">open_basedir</link> potrebbero
essere applicate ulteriori restrizioni.
</para>
<para>
Se PHP ha stabilito che <parameter>filename</parameter> indica
un protocollo registrato, e che tale protocollo è registrato come un
URL di rete, PHP verificherà che
<link linkend="ini.allow-url-fopen">allow_url_fopen</link> sia
abilitato. Se fosse disabilitato, PHP genererà un avviso e
la chiamata ad fopen fallirà.
</para>
<note>
<para>
L'elenco dei protocolli supportati si trova in <xref
linkend="wrappers"/>. Alcuni protocolli (indicati anche come
<literal>wrappers</literal>) supportano il <literal>context</literal>
e/o le opzioni del &php.ini;. Fare riferimento alla pagina specifica
del protocollo in uso per avere l'elenco delle opzioni che possono essere utilizzate. (Ad esempio
il valore di <literal>user_agent</literal> del &php.ini; è utilizzato dal
wrapper <literal>http</literal>).
</para>
</note>
<para>
Sulla piattaforma Windows, fare attenzione effettuando l'escape dei backslash
usati nel percorso del file, o utilizzare gli slash.
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
$handle = fopen("c:\\folder\\resource.txt", "r");
?>
]]>
</programlisting>
</informalexample>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>mode</parameter></term>
<listitem>
<para>
Il parametro <parameter>mode</parameter> indica il tipo di accesso
richiesto per il flusso. Esso può essere uno dei seguenti:
<table>
<title>
Elenco dei possibili valori usati da <function>fopen</function>
per il parametro <parameter>mode</parameter>
</title>
<tgroup cols="2">
<thead>
<row>
<entry><parameter>mode</parameter></entry>
<entry>Descrizione</entry>
</row>
</thead>
<tbody>
<row>
<entry><literal>'r'</literal></entry>
<entry>
Apre in sola lettura; posiziona il puntatore
all'inizio del file.
</entry>
</row>
<row>
<entry><literal>'r+'</literal></entry>
<entry>
Apre in lettura e scrittura; posiziona il puntatore
all'inizio del file.
</entry>
</row>
<row>
<entry><literal>'w'</literal></entry>
<entry>
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.
</entry>
</row>
<row>
<entry><literal>'w+'</literal></entry>
<entry>
Apre in lettura e scrittura; posiziona il puntatore
all'inizio del file e tronca il file alla lunghezza
zero. Se il file non esiste, tenta di crearlo.
</entry>
</row>
<row>
<entry><literal>'a'</literal></entry>
<entry>
Apre in sola scrittura; posiziona il puntatore alla fine
del file. Se il file non esiste, tenta di crearlo.
In questa modalità, <function>fseek</function> non ha effetto, le scritture vengono sempre aggiunte alla fine.
</entry>
</row>
<row>
<entry><literal>'a+'</literal></entry>
<entry>
Apre in lettura e scrittura; posiziona il puntatore
alla fine del file. Se il file non esiste, tenta
di crearlo. In questa modalità <function>fseek</function> influisce solo
sulla posizione di lettura, le scritture vengono sempre aggiunte alla fine.
</entry>
</row>
<row>
<entry><literal>'x'</literal></entry>
<entry>
Crea ed apre il file in sola scrittura; posiziona il puntatore
all'inizio del file. Se il file esiste già, la chiamata
a <function>fopen</function> fallirà restituendo &false; e
verrà generato un errore di livello <constant>E_WARNING</constant>. Se
il file non esiste, si tenterà di crearlo. Questo equivale
a specificare i flag <literal>O_EXCL|O_CREAT</literal> nella
sottostante chiamata di sistema a <literal>open(2)</literal>.
</entry>
</row>
<row>
<entry><literal>'x+'</literal></entry>
<entry>
Crea ed apre il file in lettura e scrittura; per il resto ha lo
stesso comportamento di <literal>'x'</literal>.
</entry>
</row>
<row>
<entry><literal>'c'</literal></entry>
<entry>
Apre il file in sola scrittura. Se il file non esiste, viene
creato. Se esiste, non viene né troncato (al contrario di
<literal>'w'</literal>), né la chiamata a questa funzione fallisce (come
nel caso di <literal>'x'</literal>). Il puntatore del file è
posizionato all'inizio del file. Questo può essere utile se si
desidera ottenere un advisory lock (vedere <function>flock</function>)
prima di tentare di modificare il file, poiché l'utilizzo di
<literal>'w'</literal> potrebbe troncare il file prima che il lock
venga ottenuto (se si desidera troncare,
può essere usata <function>ftruncate</function>dopo che il lock viene
richiesto).
</entry>
</row>
<row>
<entry><literal>'c+'</literal></entry>
<entry>
Apre il file in lettura e scrittura; per il resto ha lo stesso
comportamento di <literal>'c'</literal>.
</entry>
</row>
<row>
<entry><literal>'e'</literal></entry>
<entry>
Imposta il flag close-on-exec sul descrittore del file aperto. Disponibile
solo per PHP compilato su sistemi conformi a POSIX.1-2008.
</entry>
</row>
</tbody>
</tgroup>
</table>
</para>
<note>
<para>
Differenti famiglie di file system hanno differenti convenzioni 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 <literal>\n</literal> come
terminatore di riga, i sistemi basati su Windows utilizzano <literal>\r\n</literal>
mentre i sistemi Macintosh (Mac OS Classic) utilizzano
<literal>\r</literal>.
</para>
<para>
Se si utilizza un errato terminatore di riga quando si scrivono i file, si
può verificare che altre applicazioni che aprono questi file abbiano "comportamenti
bizzarri".
</para>
<para>
Windows offre un flag di traduzione della modalità testo (<literal>'t'</literal>)
che in modo trasparente converte <literal>\n</literal> in
<literal>\r\n</literal> mentre si lavora sul file. In contrasto, si
può anche usare il flag <literal>'b'</literal> per forzare una modalità binaria, nella quale non
si ha la conversione dei dati. Per usare questi flag, <literal>'b'</literal>
oppure <literal>'t'</literal>, devono essere posizionati
come ultimo carattere del parametro <parameter>mode</parameter>.
</para>
<para>
La modalità di conversione di default è <literal>'b'</literal>.
Si può usare la modalità
<literal>'t'</literal> se si lavora con dei file di testo e si utilizza
<literal>\n</literal> per indicare il fine linea negli script, ma
ci si aspetta che applicazioni, tipo vecchie versioni di notepad, leggano i file prodotti. In
tutti gli altri casi si dovrebbe utilizzare <literal>'b'</literal>.
</para>
<para>
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 <literal>\r\n</literal>.
</para>
</note>
<note>
<para>
Per la portabilità, è fortemente raccomandato di
riscrivere il codice che utilizza o che si avvale del mode
<literal>'t'</literal>, così da utilizzare il corretto terminatore di linea invece del
<literal>'b'</literal> mode.
</para>
</note>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>use_include_path</parameter></term>
<listitem>
<para>
Il terzo parametro opzionale <parameter>use_include_path</parameter>
può essere impostato a '1' oppure a &true; se si desidera cercare il file anche
in <link linkend="ini.include-path">include_path</link>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>context</parameter></term>
<listitem>
&note.context-support;
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Restituisce una risorsa puntatore a file in caso di successo,
&return.falseforfailure;
</para>
</refsect1>
<refsect1 role="errors">
&reftitle.errors;
&fs.emits.warning.on.failure;
</refsect1>
<refsect1 role="changelog">
&reftitle.changelog;
<para>
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row>
<entry>7.0.16, 7.1.2</entry>
<entry>
È stata aggiunta l'opzione <literal>'e'</literal>.
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Esempi di <function>fopen</function></title>
<programlisting role="php">
<![CDATA[
<?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");
?>
]]>
</programlisting>
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
&warn.ssl-non-standard;
<note>
<para>
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.
</para>
</note>
<note>
<para>
Questa funzione può anche avere successo quando <parameter>filename</parameter> è una
directory. Se non si è sicuri che <parameter>filename</parameter> sia
un file o una directory, potrebbe essere necessario utilizzare la funzione
<function>is_dir</function> prima di chiamare <function>fopen</function>.
</para>
</note>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><xref linkend="wrappers"/></member>
<member><function>fclose</function></member>
<member><function>fgets</function></member>
<member><function>fread</function></member>
<member><function>fwrite</function></member>
<member><function>fsockopen</function></member>
<member><function>file</function></member>
<member><function>file_exists</function></member>
<member><function>is_readable</function></member>
<member><function>stream_set_timeout</function></member>
<member><function>popen</function></member>
<member><function>stream_context_create</function></member>
<member><function>umask</function></member>
<member><classname>SplFileObject</classname></member>
</simplelist>
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->