<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/faq.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'it',
  ),
  'this' => 
  array (
    0 => 'faq.using.php',
    1 => 'Usare PHP',
    2 => 'Usare PHP',
  ),
  'up' => 
  array (
    0 => 'faq.php',
    1 => 'FAQ',
  ),
  'prev' => 
  array (
    0 => 'faq.build.php',
    1 => 'Problemi di installazione',
  ),
  'next' => 
  array (
    0 => 'faq.passwords.php',
    1 => 'Hashing delle Password',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'it',
    'path' => 'faq/using.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="faq.using" class="chapter">
  <h1 class="title">Usare PHP</h1>

  

  <p class="para">
   Questa sezione raccoglie molti errori comuni che potresti incontrare
   mentre scrivi script PHP.
  </p>

  <div class="qandaset"><ol class="qandaset_questions"><li><a href="#faq.using.parameterorder">
     
      Non riesco a ricordare l&#039;ordine dei parametri delle funzioni PHP, sono casuali?
     
    </a></li><li><a href="#faq.using.anyform">
     
      Vorrei scrivere uno script PHP generico che possa gestire dati provenienti
      da qualsiasi form. Come faccio a sapere quali variabili POST sono disponibili?
     
    </a></li><li><a href="#faq.using.addslashes">
     
      Devo convertire tutti gli apici singoli (&#039;) in un backslash
      seguito da un apice singolo (\&#039;). Come posso farlo con un&#039;espressione
      regolare? Vorrei anche convertire &quot; in \&quot; e
      \ in \\.
     
    </a></li><li><a href="#faq.using.wrong-order">
     
      Quando faccio quanto segue, l&#039;output &egrave; stampato nell&#039;ordine
      sbagliato:
     

&lt;?php
function myfunc($argument)
{
    echo $argument + 10;
}
$variable = 10;
echo &quot;myfunc($variable) = &quot; . myfunc($variable);
?&gt;

    
     cosa sta succedendo?
     
    </a></li><li><a href="#faq.using.newlines">
     
      Ehi, cosa &egrave; successo ai miei a capo?
      

&lt;pre&gt;
&lt;?php echo &quot;Questa dovrebbe essere la prima riga.&quot;; ?&gt;
&lt;?php echo &quot;Questa dovrebbe apparire dopo l&#039;a capo sopra.&quot;; ?&gt;
&lt;/pre&gt;

      
     
    </a></li><li><a href="#faq.using.headers-sent">
     
      Ricevo il messaggio &#039;Warning: Cannot send session cookie - headers already
      sent...&#039; o &#039;Cannot add header information - headers already sent...&#039;.
     
    </a></li><li><a href="#faq.using.header">
     
      Ho bisogno di accedere direttamente alle informazioni nell&#039;header della richiesta.
      Come posso farlo?
     
    </a></li><li><a href="#faq.using.authentication">
     
      Quando provo a usare l&#039;autenticazione con IIS ottengo &#039;No Input file specified&#039;.
     
    </a></li><li><a href="#faq.using.iis.sharing">
     
      Windows: Non riesco ad accedere a file condivisi su un altro computer usando IIS
     
    </a></li><li><a href="#faq.using.mixml">
     
      Come faccio a mescolare XML e PHP? Si lamenta
      dei miei tag &lt;?xml!
     
    </a></li><li><a href="#faq.using.variables">
     
      Dove posso trovare una lista completa delle variabili disponibili
      in PHP?
     
    </a></li><li><a href="#faq.using.freepdf">
     
      Come posso generare file PDF senza usare librerie non libere e
      commerciali come
      PDFLib? Vorrei qualcosa che sia
      gratuito e non richieda librerie PDF esterne.
     
    </a></li><li><a href="#faq.using.shorthandbytes">
     
      Alcune direttive PHP possono anche accettare valori abbreviati per i byte, al contrario
      dei soli valori in byte int. Quali sono tutte le opzioni
      disponibili per i byte abbreviati?
     
    </a></li></ol></div>

   <dl class="qandaentry" id="faq.using.parameterorder">
    
    <dt><strong>
     
      Non riesco a ricordare l&#039;ordine dei parametri delle funzioni PHP, sono casuali?
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      PHP è un collante che unisce centinaia di librerie esterne, quindi a volte
      questo può creare confusione. Tuttavia, una semplice regola empirica è la seguente:
     </p>
     <p class="para">
      I parametri delle <a href="book.array.php" class="link">funzioni Array</a> sono ordinati
      come &quot;<em>needle, haystack</em>&quot; mentre le
      <a href="book.strings.php" class="link">funzioni String</a> sono il contrario,
      quindi &quot;<em>haystack, needle</em>&quot;.
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.using.anyform">
    <dt><strong>
     
      Vorrei scrivere uno script PHP generico che possa gestire dati provenienti
      da qualsiasi form. Come faccio a sapere quali variabili POST sono disponibili?
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      PHP offre molte <a href="language.variables.predefined.php" class="link">
      variabili predefinite</a>, come la superglobale <var class="varname"><a href="reserved.variables.post.php" class="classname">$_POST</a></var>.
      Puoi iterare attraverso <var class="varname"><a href="reserved.variables.post.php" class="classname">$_POST</a></var>
      poiché è un array associativo di tutti i valori POSTati.  Per esempio,
      iteriamo semplicemente con <a href="control-structures.foreach.php" class="link">foreach</a>,
      controlliamo i valori <span class="function"><a href="function.empty.php" class="function">empty()</a></span>,
      e stampiamoli.
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$empty </span><span style="color: #007700">= </span><span style="color: #0000BB">$post </span><span style="color: #007700">= array();<br />foreach (</span><span style="color: #0000BB">$_POST </span><span style="color: #007700">as </span><span style="color: #0000BB">$varname </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$varvalue</span><span style="color: #007700">) {<br />    if (empty(</span><span style="color: #0000BB">$varvalue</span><span style="color: #007700">)) {<br />        </span><span style="color: #0000BB">$empty</span><span style="color: #007700">[</span><span style="color: #0000BB">$varname</span><span style="color: #007700">] = </span><span style="color: #0000BB">$varvalue</span><span style="color: #007700">;<br />    } else {<br />        </span><span style="color: #0000BB">$post</span><span style="color: #007700">[</span><span style="color: #0000BB">$varname</span><span style="color: #007700">] = </span><span style="color: #0000BB">$varvalue</span><span style="color: #007700">;<br />    }<br />}<br /><br />print </span><span style="color: #DD0000">"&lt;pre&gt;"</span><span style="color: #007700">;<br />if (empty(</span><span style="color: #0000BB">$empty</span><span style="color: #007700">)) {<br />    print </span><span style="color: #DD0000">"Nessuno dei valori POSTati è vuoto, postati:\n"</span><span style="color: #007700">;<br />    </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$post</span><span style="color: #007700">);<br />} else {<br />    print </span><span style="color: #DD0000">"Abbiamo " </span><span style="color: #007700">. </span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">$empty</span><span style="color: #007700">) . </span><span style="color: #DD0000">" valori vuoti\n"</span><span style="color: #007700">;<br />    print </span><span style="color: #DD0000">"Postati:\n"</span><span style="color: #007700">; </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$post</span><span style="color: #007700">);<br />    print </span><span style="color: #DD0000">"Vuoti:\n"</span><span style="color: #007700">;  </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$empty</span><span style="color: #007700">);<br />    exit;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

     </p>

    </dd>
   </dl>

   <dl class="qandaentry" id="faq.using.addslashes">
    
    <dt><strong>
     
      Devo convertire tutti gli apici singoli (&#039;) in un backslash
      seguito da un apice singolo (\&#039;). Come posso farlo con un&#039;espressione
      regolare? Vorrei anche convertire &quot; in \&quot; e
      \ in \\.
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Supponendo che questo sia per un database, usa il meccanismo di escape che
      viene fornito con il database. Per esempio, usa
      <span class="function"><a href="function.mysql-real-escape-string.php" class="function">mysql_real_escape_string()</a></span> con MySQL e
      <span class="function"><a href="function.pg-escape-string.php" class="function">pg_escape_string()</a></span> con PostgreSQL. Ci sono
      anche le funzioni generiche <span class="function"><a href="function.addslashes.php" class="function">addslashes()</a></span> e
      <span class="function"><a href="function.stripslashes.php" class="function">stripslashes()</a></span>, che sono più
      comuni con codice PHP più vecchio.
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.using.wrong-order">
    <dt><strong>
     
      Quando faccio quanto segue, l&#039;output è stampato nell&#039;ordine
      sbagliato:
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">myfunc</span><span style="color: #007700">(</span><span style="color: #0000BB">$argument</span><span style="color: #007700">)<br />{<br />    echo </span><span style="color: #0000BB">$argument </span><span style="color: #007700">+ </span><span style="color: #0000BB">10</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">$variable </span><span style="color: #007700">= </span><span style="color: #0000BB">10</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"myfunc(</span><span style="color: #0000BB">$variable</span><span style="color: #DD0000">) = " </span><span style="color: #007700">. </span><span style="color: #0000BB">myfunc</span><span style="color: #007700">(</span><span style="color: #0000BB">$variable</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

     cosa sta succedendo?
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Per poter usare i risultati della tua funzione in un&#039;espressione (come
      concatenarli con altre stringhe nell&#039;esempio sopra), devi
      fare <span class="function"><a href="function.return.php" class="function">return</a></span> del valore,
      non <span class="function"><a href="function.echo.php" class="function">echo</a></span>.
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.using.newlines">
    <dt><strong>
     
      Ehi, cosa è successo ai miei a capo?
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">&lt;pre&gt;<br /><span style="color: #0000BB">&lt;?php </span><span style="color: #007700">echo </span><span style="color: #DD0000">"Questa dovrebbe essere la prima riga."</span><span style="color: #007700">; </span><span style="color: #0000BB">?&gt;<br />&lt;?php </span><span style="color: #007700">echo </span><span style="color: #DD0000">"Questa dovrebbe apparire dopo l'a capo sopra."</span><span style="color: #007700">; </span><span style="color: #0000BB">?&gt;<br /></span>&lt;/pre&gt;</span></code></div>
      </div>

     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      In PHP, la fine di un blocco di codice è &quot;?&gt;&quot; o
      &quot;?&gt;\n&quot; (dove \n significa a capo). Quindi nell&#039;esempio sopra,
      le frasi stampate saranno su una sola riga, perché PHP omette
      gli a capo dopo la fine del blocco. Questo significa che devi
      inserire un a capo extra dopo ogni blocco di codice PHP per farlo
      stampare un a capo.
     </p>
     <p class="para">
      Perché PHP fa questo? Perché quando si formatta HTML normale, questo
      di solito ti rende la vita più facile perché non vuoi quell&#039;a capo,
      ma dovresti creare righe estremamente lunghe o altrimenti rendere il
      sorgente della pagina illeggibile per ottenere quell&#039;effetto.
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.using.headers-sent">
    <dt><strong>
     
      Ricevo il messaggio &#039;Warning: Cannot send session cookie - headers already
      sent...&#039; o &#039;Cannot add header information - headers already sent...&#039;.
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Le funzioni <span class="function"><a href="function.header.php" class="function">header()</a></span>, <span class="function"><a href="function.setcookie.php" class="function">setcookie()</a></span>,
      e le <a href="ref.session.php" class="link">funzioni di sessione</a>
      devono aggiungere header al flusso di output ma gli header
      possono essere inviati solo prima di tutto il resto del contenuto. Non ci può essere nessun output
      prima di usare queste funzioni, output come HTML. La funzione
      <span class="function"><a href="function.headers-sent.php" class="function">headers_sent()</a></span> controllerà se il tuo script ha già
      inviato header e vedi anche le <a href="ref.outcontrol.php" class="link">funzioni di
      Controllo dell&#039;Output</a>.
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.using.header">
    <dt><strong>
     
      Ho bisogno di accedere direttamente alle informazioni nell&#039;header della richiesta.
      Come posso farlo?
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      La funzione <span class="function"><a href="function.getallheaders.php" class="function">getallheaders()</a></span> farà questo se
      stai eseguendo PHP come modulo Apache. Quindi, il seguente pezzo
      di codice ti mostrerà tutti gli header della richiesta:
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$headers </span><span style="color: #007700">= </span><span style="color: #0000BB">getallheaders</span><span style="color: #007700">();<br />foreach (</span><span style="color: #0000BB">$headers </span><span style="color: #007700">as </span><span style="color: #0000BB">$name </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$content</span><span style="color: #007700">) {<br />    echo </span><span style="color: #DD0000">"headers[</span><span style="color: #0000BB">$name</span><span style="color: #DD0000">] = </span><span style="color: #0000BB">$content</span><span style="color: #DD0000">&lt;br /&gt;\n"</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

     </p>
     <p class="para">
      Vedi anche
      <span class="function"><a href="function.apache-lookup-uri.php" class="function">apache_lookup_uri()</a></span>,
      <span class="function"><a href="function.apache-response-headers.php" class="function">apache_response_headers()</a></span>, e
      <span class="function"><a href="function.fsockopen.php" class="function">fsockopen()</a></span>
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.using.authentication">
    <dt><strong>
     
      Quando provo a usare l&#039;autenticazione con IIS ottengo &#039;No Input file specified&#039;.
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Il modello di sicurezza di IIS è in difetto qui. Questo è un problema
      comune a tutti i programmi CGI eseguiti sotto IIS. Una soluzione è
      creare un file HTML semplice (non interpretato da PHP) come pagina di ingresso
      in una directory autenticata. Poi usare un tag META per reindirizzare
      alla pagina PHP, o avere un link alla pagina PHP. PHP
      riconoscerà quindi l&#039;autenticazione correttamente.
      Questo non dovrebbe influenzare altri
      server web NT. Per maggiori informazioni, vedi:
      <a href="http://support.microsoft.com/kb/q160422/" class="link external">&raquo;&nbsp;http://support.microsoft.com/kb/q160422/</a> e la sezione del
      manuale su <a href="features.http-auth.php" class="link">Autenticazione HTTP
      </a>.
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.using.iis.sharing">
    <dt><strong>
     
      Windows: Non riesco ad accedere a file condivisi su un altro computer usando IIS
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Devi cambiare i <code class="literal">Go to Internet Information
      Services</code>. Localizza il tuo file PHP e vai alle sue proprietà.
      Vai alla scheda <code class="literal">Sicurezza File</code>, <code class="literal">Modifica -&lt;
      Accesso anonimo e controllo autenticazione</code>.
     </p>
     <p class="para">
      Puoi risolvere il problema sia deselezionando <code class="literal">Accesso
      Anonimo</code> e lasciando selezionato <code class="literal">Autenticazione Integrata
      Windows</code>, oppure selezionando <code class="literal">Accesso
      Anonimo</code> e modificando l&#039;utente che potrebbe non avere i diritti
      di accesso.
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.using.mixml">
    <dt><strong>
     
      Come faccio a mescolare XML e PHP? Si lamenta
      dei miei tag &lt;?xml!
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Per incorporare &lt;?xml direttamente nel tuo codice PHP, dovrai disattivare
      gli short tag avendo la direttiva PHP
      <a href="ini.core.php#ini.short-open-tag" class="link">short_open_tags</a> impostata su
      <code class="literal">0</code>. Non puoi impostare questa direttiva con
      <span class="function"><a href="function.ini-set.php" class="function">ini_set()</a></span>. Indipendentemente dal fatto che
      <a href="ini.core.php#ini.short-open-tag" class="link">short_open_tags</a> sia attivo o
      meno, puoi fare qualcosa come: <code class="literal">&lt;?php echo &#039;&lt;?xml&#039;; ?&gt;</code>.
      Il default per questa direttiva è <code class="literal">On</code>.
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.using.variables">
    <dt><strong>
     
      Dove posso trovare una lista completa delle variabili disponibili
      in PHP?
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Leggi la pagina del manuale sulle <a href="language.variables.predefined.php" class="link">
      variabili predefinite</a> poiché include una lista parziale delle variabili
      predefinite disponibili per il tuo script.  Una lista completa delle variabili
      disponibili (e molte più informazioni) può essere vista chiamando la
      funzione <span class="function"><a href="function.phpinfo.php" class="function">phpinfo()</a></span>.  Assicurati di leggere la sezione
      del manuale su <a href="language.variables.external.php" class="link">variabili
      esterne a PHP</a> poiché descrive scenari comuni per
      variabili esterne, come da un form HTML, un Cookie e l&#039;URL.
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.using.freepdf">
    <dt><strong>
     
      Come posso generare file PDF senza usare librerie non libere e
      commerciali come
      PDFLib? Vorrei qualcosa che sia
      gratuito e non richieda librerie PDF esterne.
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Ci sono alcune alternative scritte in PHP come
      <a href="http://www.fpdf.org/" class="link external">&raquo;&nbsp;FPDF</a> e
      <a href="http://www.tcpdf.org/" class="link external">&raquo;&nbsp;TCPDF</a>.
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.using.shorthandbytes">
    <dt><strong>
     
      Alcune direttive PHP possono anche accettare valori abbreviati per i byte, al contrario
      dei soli valori in byte <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>. Quali sono tutte le opzioni
      disponibili per i byte abbreviati?
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Le opzioni disponibili sono K (per Kilobyte), M (per Megabyte) e G (per
      Gigabyte), e sono tutte case-insensitive.
      Qualsiasi altra cosa assume byte. <code class="literal">1M</code> equivale a un Megabyte o
      <code class="literal">1048576</code> byte. <code class="literal">1K</code> equivale a un
      Kilobyte o <code class="literal">1024</code> byte. Queste notazioni abbreviate possono
      essere usate in <var class="filename">php.ini</var> e nella funzione <span class="function"><a href="function.ini-set.php" class="function">ini_set()</a></span>.
      Nota che il valore numerico viene convertito in <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>;
      per esempio, <code class="literal">0.5M</code> è interpretato come <code class="literal">0</code>.
     </p>
     <blockquote class="note"><p><strong class="note">Nota</strong>: 
      <strong>kilobyte versus kibibyte</strong><br />
      <p class="para">
       La notazione PHP descrive un kilobyte come uguale a 1024 byte, mentre
       lo standard <abbr>IEC</abbr> lo considera invece un kibibyte.
       Riepilogo: k e K = 1024 byte.
      </p>
     </p></blockquote>
    </dd>
   </dl>
  
 </div>
<?php manual_footer($setup); ?>