Usare PHP

Questa sezione raccoglie molti errori comuni che potresti incontrare mentre scrivi script PHP.

  1. Non riesco a ricordare l'ordine dei parametri delle funzioni PHP, sono casuali?
  2. Vorrei scrivere uno script PHP generico che possa gestire dati provenienti da qualsiasi form. Come faccio a sapere quali variabili POST sono disponibili?
  3. 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 \\.
  4. Quando faccio quanto segue, l'output è stampato nell'ordine sbagliato: <?php function myfunc($argument) { echo $argument + 10; } $variable = 10; echo "myfunc($variable) = " . myfunc($variable); ?> cosa sta succedendo?
  5. Ehi, cosa è successo ai miei a capo? <pre> <?php echo "Questa dovrebbe essere la prima riga."; ?> <?php echo "Questa dovrebbe apparire dopo l'a capo sopra."; ?> </pre>
  6. Ricevo il messaggio 'Warning: Cannot send session cookie - headers already sent...' o 'Cannot add header information - headers already sent...'.
  7. Ho bisogno di accedere direttamente alle informazioni nell'header della richiesta. Come posso farlo?
  8. Quando provo a usare l'autenticazione con IIS ottengo 'No Input file specified'.
  9. Windows: Non riesco ad accedere a file condivisi su un altro computer usando IIS
  10. Come faccio a mescolare XML e PHP? Si lamenta dei miei tag <?xml!
  11. Dove posso trovare una lista completa delle variabili disponibili in PHP?
  12. 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.
  13. 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?
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.

<?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;
}
?>

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:
<?php
function myfunc($argument)
{
echo
$argument + 10;
}
$variable = 10;
echo
"myfunc($variable) = " . myfunc($variable);
?>
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?
<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.

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:

<?php
$headers
= getallheaders();
foreach (
$headers as $name => $content) {
echo
"headers[$name] = $content<br />\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: » http://support.microsoft.com/kb/q160422/ 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.

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.

add a note

User Contributed Notes 1 note

up
9
robjbrain at gmail dot com
9 years ago
There is no error message given if you accidentally use KB, MB or GB instead of K, M or G. From what I can tell the alphabetic characters will be ignored and it will be treated as bytes, so 1GB actually equals 1 Byte. phpinfo() and ini_get() will report what you have written e.g. 1GB, so it will not be clear that there is anything wrong with your setting even though there is.
To Top