Usare PHP Usare PHP Questa sezione raccoglie molti errori comuni che potresti incontrare mentre scrivi script PHP. Non riesco a ricordare l'ordine dei parametri delle funzioni PHP, sono casuali? PHP è un collante che unisce centinaia di librerie esterne, quindi a volte questo può creare confusione. Tuttavia, una semplice regola empirica è la seguente: I parametri delle funzioni Array sono ordinati come "needle, haystack" mentre le funzioni String sono il contrario, quindi "haystack, needle". Vorrei scrivere uno script PHP generico che possa gestire dati provenienti da qualsiasi form. Come faccio a sapere quali variabili POST sono disponibili? PHP offre molte variabili predefinite, come la superglobale $_POST. Puoi iterare attraverso $_POST poiché è un array associativo di tutti i valori POSTati. Per esempio, iteriamo semplicemente con &foreach;, controlliamo i valori empty, e stampiamoli. $varvalue) { if (empty($varvalue)) { $empty[$varname] = $varvalue; } else { $post[$varname] = $varvalue; } } print "
";
if (empty($empty)) {
    print "Nessuno dei valori POSTati è vuoto, postati:\n";
    var_dump($post);
} else {
    print "Abbiamo " . count($empty) . " valori vuoti\n";
    print "Postati:\n"; var_dump($post);
    print "Vuoti:\n";  var_dump($empty);
    exit;
}
?>
]]>
      
     

    
   

   
    
    
     
      Devo convertire tutti gli apici singoli (') in un backslash
      seguito da un apice singolo (\'). Come posso farlo con un'espressione
      regolare? Vorrei anche convertire " in \" e
      \ in \\.
     
    
    
     
      Supponendo che questo sia per un database, usa il meccanismo di escape che
      viene fornito con il database. Per esempio, usa
      mysql_real_escape_string con MySQL e
      pg_escape_string con PostgreSQL. Ci sono
      anche le funzioni generiche addslashes e
      stripslashes, che sono più
      comuni con codice PHP più vecchio.
     
    
   

   
    
     
      Quando faccio quanto segue, l'output è stampato nell'ordine
      sbagliato:
     

]]>
    
     cosa sta succedendo?
     
    
    
     
      Per poter usare i risultati della tua funzione in un'espressione (come
      concatenarli con altre stringhe nell'esempio sopra), devi
      fare return del valore,
      non echo.
     
    
   

   
    
     
      Ehi, cosa è successo ai miei a capo?
      



]]>
In PHP, la fine di un blocco di codice è "?>" o "?>\n" (dove \n significa a capo). Quindi nell'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. Perché PHP fa questo? Perché quando si formatta HTML normale, questo di solito ti rende la vita più facile perché non vuoi quell'a capo, ma dovresti creare righe estremamente lunghe o altrimenti rendere il sorgente della pagina illeggibile per ottenere quell'effetto.
Ricevo il messaggio 'Warning: Cannot send session cookie - headers already sent...' o 'Cannot add header information - headers already sent...'. Le funzioni header, setcookie, e le funzioni di sessione 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 headers_sent controllerà se il tuo script ha già inviato header e vedi anche le funzioni di Controllo dell'Output. Ho bisogno di accedere direttamente alle informazioni nell'header della richiesta. Come posso farlo? La funzione getallheaders farà questo se stai eseguendo PHP come modulo Apache. Quindi, il seguente pezzo di codice ti mostrerà tutti gli header della richiesta: $content) { echo "headers[$name] = $content
\n"; } ?> ]]>
Vedi anche apache_lookup_uri, apache_response_headers, e fsockopen
Quando provo a usare l'autenticazione con IIS ottengo 'No Input file specified'. 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'autenticazione correttamente. Questo non dovrebbe influenzare altri server web NT. Per maggiori informazioni, vedi: &url.iis; e la sezione del manuale su Autenticazione HTTP . Windows: Non riesco ad accedere a file condivisi su un altro computer usando IIS Devi cambiare i Go to Internet Information Services. Localizza il tuo file PHP e vai alle sue proprietà. Vai alla scheda Sicurezza File, Modifica -< Accesso anonimo e controllo autenticazione. Puoi risolvere il problema sia deselezionando Accesso Anonimo e lasciando selezionato Autenticazione Integrata Windows, oppure selezionando Accesso Anonimo e modificando l'utente che potrebbe non avere i diritti di accesso. Come faccio a mescolare XML e PHP? Si lamenta dei miei tag <?xml! Per incorporare <?xml direttamente nel tuo codice PHP, dovrai disattivare gli short tag avendo la direttiva PHP short_open_tags impostata su 0. Non puoi impostare questa direttiva con ini_set. Indipendentemente dal fatto che short_open_tags sia attivo o meno, puoi fare qualcosa come: <?php echo '<?xml'; ?>. Il default per questa direttiva è On. Dove posso trovare una lista completa delle variabili disponibili in PHP? Leggi la pagina del manuale sulle variabili predefinite 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 phpinfo. Assicurati di leggere la sezione del manuale su variabili esterne a PHP poiché descrive scenari comuni per variabili esterne, come da un form HTML, un Cookie e l'URL. 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. Ci sono alcune alternative scritte in PHP come FPDF e TCPDF. 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? Le opzioni disponibili sono K (per Kilobyte), M (per Megabyte) e G (per Gigabyte), e sono tutte case-insensitive. Qualsiasi altra cosa assume byte. 1M equivale a un Megabyte o 1048576 byte. 1K equivale a un Kilobyte o 1024 byte. Queste notazioni abbreviate possono essere usate in &php.ini; e nella funzione ini_set. Nota che il valore numerico viene convertito in int; per esempio, 0.5M è interpretato come 0. kilobyte versus kibibyte La notazione PHP descrive un kilobyte come uguale a 1024 byte, mentre lo standard IEC lo considera invece un kibibyte. Riepilogo: k e K = 1024 byte.