Questa sezione raccoglie molti errori comuni che potresti incontrare mentre scrivi script PHP.
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".
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.
<?php
$empty = $post = array();
foreach ($_POST as $varname => $varvalue) {
if (empty($varvalue)) {
$empty[$varname] = $varvalue;
} else {
$post[$varname] = $varvalue;
}
}
print "<pre>";
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;
}
?>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.
<?php
function myfunc($argument)
{
echo $argument + 10;
}
$variable = 10;
echo "myfunc($variable) = " . myfunc($variable);
?>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.
<pre>
<?php echo "Questa dovrebbe essere la prima riga."; ?>
<?php echo "Questa dovrebbe apparire dopo l'a capo sopra."; ?>
</pre>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.
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.
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:
<?php
$headers = getallheaders();
foreach ($headers as $name => $content) {
echo "headers[$name] = $content<br />\n";
}
?>Vedi anche apache_lookup_uri(), apache_response_headers(), e fsockopen()
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: » http://support.microsoft.com/kb/q160422/ e la sezione del manuale su Autenticazione HTTP .
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.
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.
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.
Ci sono alcune alternative scritte in PHP come » FPDF e » TCPDF.
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.
Nota: 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.