Riferimento - Cosa significa questo errore in PHP?


1137

Cos'è questo?

Questa è una serie di risposte su avvisi, errori e avvisi che potresti incontrare durante la programmazione di PHP e non hai idea di come risolverli. Questo è anche un Wiki della comunità, quindi tutti sono invitati a partecipare aggiungendo e mantenendo questo elenco.

Perchè è questo?

Domande come "Intestazioni già inviate" o "Chiamare un membro di un non-oggetto" vengono visualizzate frequentemente su Stack Overflow. La causa principale di queste domande è sempre la stessa. Quindi le risposte a queste domande in genere le ripetono e quindi mostrano all'OP quale linea cambiare nel loro caso particolare. Queste risposte non aggiungono alcun valore al sito perché si applicano solo al codice particolare del PO. Altri utenti con lo stesso errore non possono leggere facilmente la soluzione perché sono troppo localizzati. È triste perché una volta compresa la causa principale, correggere l'errore è banale. Quindi, questo elenco cerca di spiegare la soluzione in modo generale da applicare.

Cosa dovrei fare qui?

Se la tua domanda è stata contrassegnata come duplicata di questa, trova il tuo messaggio di errore di seguito e applica la correzione al tuo codice. Le risposte di solito contengono ulteriori collegamenti per indagare nel caso in cui non dovrebbe essere chiaro dalla sola risposta generale.

Se vuoi contribuire, aggiungi il tuo messaggio di errore "preferito", avviso o avviso, uno per risposta, una breve descrizione del significato (anche se evidenzia solo i termini nella loro pagina di manuale), una possibile soluzione o approccio di debug e un elenco di domande e risposte esistenti che hanno valore. Inoltre, sentiti libero di migliorare qualsiasi risposta esistente.

La lista

Vedi anche:


7
Inoltre, per spostare la discussione fuori dai commenti, vai a questa meta domanda
Earlz,



Risposte:


275

Avviso: impossibile modificare le informazioni dell'intestazione - intestazioni già inviate

Succede quando lo script tenta di inviare un'intestazione HTTP al client ma in precedenza era già stato generato, il che ha comportato che le intestazioni fossero già inviate al client.

Questo è un E_WARNINGe non fermerà lo script.

Un tipico esempio potrebbe essere un file modello come questo:

<html>
    <?php session_start(); ?>
    <head><title>My Page</title>
</html>
...

La session_start()funzione tenterà di inviare al client intestazioni con il cookie di sessione. Ma PHP ha già inviato le intestazioni quando ha scritto l' <html>elemento nel flusso di output. Dovresti spostare la session_start()parte superiore.

Puoi risolverlo passando attraverso le righe prima del codice che attiva l'Avvertimento e controlla dove viene emesso. Sposta qualsiasi codice di invio dell'intestazione prima di quel codice.

Un output spesso trascurato sono le nuove righe dopo la chiusura di PHP ?>. È considerata una pratica standard omettere ?>quando è l'ultima cosa nel file. Allo stesso modo, un'altra causa comune per questo avviso è quando l'apertura <?phpha uno spazio vuoto, una linea o un carattere invisibile prima di esso, facendo sì che il server web invii le intestazioni e lo spazio bianco / newline quindi quando PHP inizia l'analisi non sarà in grado di inviare qualsiasi intestazione.

Se il tuo file contiene più di un <?php ... ?>blocco di codice, non dovresti avere spazi tra di loro. (Nota: potresti avere più blocchi se avessi il codice che è stato costruito automaticamente)

Assicurati inoltre di non avere segni di ordine di byte nel tuo codice, ad esempio quando la codifica dello script è UTF-8 con BOM.

Domande correlate:


2
Se stai usando WordPress, controlla i file dei temi. Quando ho aggiornato un sito a una nuova versione di WordPress, non sono stato in grado di aggiornare il tema perché non è stato aggiornato da diversi anni. Questo problema è emerso. Si è scoperto che il file Functions.php aveva più di un <? ?> blocco con spazi in mezzo.
Roy Leban,

2
@RoyLeban "Se il tuo file contiene più di un blocco ..." Non sono sicuro di cosa significhi. Che cos'è un "blocco"? Un blocco sarebbe costituito <?php ?>e quindi "più di un blocco" sarebbe <?php ?> <?php ?>?
Andrew Fox,

2
Se possibile, attiva la funzione "buffering dell'output" nel file di configurazione di PHP.ini.Usato per risolvere questo problema.Invia il file html viene salvato nel buffer di output e inviato al client solo dopo l'arresto dello script, quindi se due le intestazioni vengono emesse in posizioni diverse, quindi la vecchia intestazione verrà sostituita con la nuova intestazione.
Nidhin David,

191

Errore irreversibile: chiamata a una funzione membro ... su un non oggetto

Succede con un codice simile a xyz->method()dove xyznon è un oggetto e quindi che methodnon può essere chiamato.

Questo è un errore fatale che interromperà lo script (inoltra l'avviso di compatibilità: diventerà un errore irreversibile a partire da PHP 7).

Molto spesso questo è un segno che nel codice mancano i controlli per le condizioni di errore. Convalida che un oggetto sia effettivamente un oggetto prima di chiamarne i metodi.

Un esempio tipico sarebbe

// ... some code using PDO
$statement = $pdo->prepare('invalid query', ...);
$statement->execute(...);

Nell'esempio sopra, la query non può essere preparata e prepare()verrà assegnata falsea $statement. Il tentativo di chiamare il execute()metodo comporterà quindi un errore irreversibile perché falseè un "non oggetto" perché il valore è un valore booleano.

Scopri perché la tua funzione ha restituito un valore booleano anziché un oggetto. Ad esempio, controllare l' $pdooggetto per l'ultimo errore che si è verificato. I dettagli su come eseguire il debug dipenderanno da come vengono gestiti gli errori per la particolare funzione / oggetto / classe in questione.

Se anche il ->prepareproblema $pdopersiste, l'oggetto handle del database non è stato passato nell'ambito corrente . Trova dove è stato definito. Quindi passarlo come parametro, archiviarlo come proprietà o condividerlo tramite l'ambito globale.

Un altro problema potrebbe essere la creazione condizionale di un oggetto e il tentativo di chiamare un metodo esterno a quel blocco condizionale. Per esempio

if ($someCondition) {
    $myObj = new MyObj();
}
// ...
$myObj->someMethod();

Tentando di eseguire il metodo al di fuori del blocco condizionale, l'oggetto potrebbe non essere definito.

Domande correlate:


115

Non si vede niente. La pagina è vuota e bianca.

Conosciuto anche come White Page Of Death o White Screen Of Death . Ciò accade quando la segnalazione degli errori è disattivata e si è verificato un errore irreversibile (spesso errore di sintassi).

Se hai abilitato la registrazione degli errori, troverai il messaggio di errore concreto nel tuo registro degli errori. Questo di solito si trova in un file chiamato "php_errors.log", in una posizione centrale (ad es. /var/log/apache2Su molti ambienti Linux) o nella directory dello script stesso (a volte usato in un ambiente di hosting condiviso).

A volte potrebbe essere più semplice abilitare temporaneamente la visualizzazione degli errori. La pagina bianca visualizzerà quindi il messaggio di errore. Fai attenzione perché questi errori sono visibili a tutti coloro che visitano il sito web.

Questo può essere fatto facilmente aggiungendo nella parte superiore dello script il seguente codice PHP:

ini_set('display_errors', 1); error_reporting(~0);

Il codice attiverà la visualizzazione degli errori e imposterà il reporting al massimo livello.

Poiché ini_set()viene eseguito in fase di esecuzione, non ha effetti sugli errori di analisi / sintassi. Tali errori verranno visualizzati nel registro. Se si desidera visualizzarli anche nell'output (ad es. In un browser), è necessario impostare la display_startup_errorsdirettiva su true. Fallo in php.inio in .htaccesso con qualsiasi altro metodo che influisce sulla configurazione prima del runtime .

È possibile utilizzare gli stessi metodi per impostare le direttive log_errors e error_log per scegliere la propria posizione del file di registro.

Guardando nel registro o usando il display, si otterrà un messaggio di errore molto migliore e la riga di codice in cui si interrompe lo script.

Domande correlate:

Errori correlati:


3
error_reporting(~0);perchè no -1? Questo è ciò che ~0valuta ed è molto meno criptico.
Fabrício Matté,

3
Penso che entrambi siano altrettanto criptici. ~0è IMO più esplicito: negare il set di bit vuoto, ovvero abilitare tutti i flag. -1 non significa "non trovato" come in strpos () in C, ma come un set di bit con tutti i flag impostati, perché -1 è binario 1111'1111'1111'1111(per 32 bit).
inalterato il

2
Oops, 1111'1111'1111'1111è davvero 16 bit, ma spero che tu capisca cosa intendo.
inalterato il

3
@IvanSolntsev, scusate no, per le versioni precedenti alla 5.4, E_STRICTnon è incluso in E_ALL. php.net/manual/en/errorfunc.constants.php e scorrere fino a E_STRICT.
nalply,

102

Avviso: indice indefinito

Succede quando si tenta di accedere a un array tramite una chiave che non esiste nell'array.

Un tipico esempio di Undefined Indexavviso sarebbe ( demo )

$data = array('foo' => '42', 'bar');
echo $data['spinach'];
echo $data[1];

Entrambi spinache 1non esistono nell'array, causando l' E_NOTICEattivazione di un.

La soluzione è assicurarsi che l'indice o l'offset esistano prima di accedere a tale indice. Ciò può significare che è necessario correggere un bug nel programma per assicurarsi che tali indici esistano quando previsto. Oppure può significare che è necessario verificare se gli indici esistono utilizzando array_key_existso isset:

$data = array('foo' => '42', 'bar');
if (array_key_exists('spinach', $data)) {
    echo $data['spinach'];
}
else {
    echo 'No key spinach in the array';
}

Se hai un codice come:

<?php echo $_POST['message']; ?>
<form method="post" action="">
    <input type="text" name="message">
    ...

quindi $_POST['message']non verrà impostato quando questa pagina viene caricata per la prima volta e verrà visualizzato l'errore sopra riportato. Solo quando il modulo viene inviato e questo codice viene eseguito una seconda volta, esiste l'indice di array. In genere si verifica questo con:

if ($_POST)  ..  // if the $_POST array is not empty
// or
if ($_SERVER['REQUEST_METHOD'] == 'POST') ..  // page was requested with POST

Domande correlate:


Tendo a usareif(!empty($_POST['message'])){ //do stuff }
kurdtpage il

85

Avviso: mysql_fetch_array () prevede che il parametro 1 sia una risorsa, dato booleano

Innanzitutto:

Per favore, non usare le mysql_*funzioni nel nuovo codice . Non sono più mantenuti e sono ufficialmente deprecati . Vedi la scatola rossa ? Scopriinvece le dichiarazioni preparate e usa PDO o MySQLi : questo articolo ti aiuterà a decidere quale. Se scegli DOP, ecco un buon tutorial .


Ciò accade quando si tenta di recuperare i dati dal risultato mysql_queryma la query non è riuscita.

Questo è un avvertimento e non fermerà lo script, ma renderà il tuo programma sbagliato.

Devi controllare il risultato restituito mysql_queryda

$res = mysql_query($sql);
if (!$res) {
   die(mysql_error());
}
// after checking, do the fetch

Domande correlate:

Errori correlati:

Altre mysql*funzioni che prevedono anche una risorsa risultato MySQL come parametro produrranno lo stesso errore per lo stesso motivo.


5
Solo una nota. Se mysql_querynon è abbastanza male, aggiungendo or diesopra di esso si aggiunge l'insulto alla lesione.
Madara's Ghost

Il problema che ho riscontrato è di $res = mysql_query($query)restituire 1 se la query ha esito positivo, pertanto è considerata vera. Pertanto, quando si passa il risultato di mysql_query per mysql_fetch_array() l'avviso mostra.
Mboy,

@mboy Per SELECT, SHOW, DESCRIBE, EXPLAIN e altre istruzioni che restituiscono un gruppo di risultati, mysql_query () restituisce una risorsa in caso di successo o FALSO in caso di errore. Per altri tipi di istruzioni SQL, INSERT, UPDATE, DELETE, DROP, ecc., Mysql_query () restituisce VERO in caso di successo o FALSO in caso di errore.
xdazz,

@xdazz Questo è il problema che sto affrontando, Inserisci aggiornamento restituisce VERO, quindi non posso eliminare questo errore mysql_fetch_array() expects parameter 1 to be resource, boolean given in select , vedi - gist.github.com/romelemperado/93af4cdbd44ebf3a07cbfa0e3fc539d7 Qualche suggerimento per eliminare questo errore?
Mboy,

2
@mboy mysql_fetch_array()è per selezionare la query, per inserire e aggiornare, non è necessario recuperare il set di risultati (e non esiste un set di risultati che consente di recuperare).
xdazz,

79

Errore irreversibile: utilizzo di $ this quando non nel contesto dell'oggetto

$thisè una variabile speciale in PHP che non può essere assegnata. Se si accede in un contesto in cui non esiste, viene visualizzato questo errore irreversibile.

Questo errore può verificarsi:

  1. Se un metodo non statico viene chiamato staticamente. Esempio:

    class Foo {
       protected $var;
       public function __construct($var) {
           $this->var = $var;
       }
    
       public static function bar () {
           // ^^^^^^
           echo $this->var;
           //   ^^^^^
       }
    }
    
    Foo::bar();

    Come risolvere: rivedere di nuovo il codice,$thispuò essere utilizzato solo in un contesto di oggetto e non deve mai essere utilizzato in un metodo statico. Inoltre, un metodo statico non dovrebbe accedere alla proprietà non statica. Utilizzareself::$static_propertyper accedere alla proprietà statica.

  2. Se il codice di un metodo di classe è stato copiato in una normale funzione o solo nell'ambito globale e mantenendo la $thisvariabile speciale.
    Come risolvere: rivedere il codice e sostituirlo $thiscon una variabile di sostituzione diversa.

Domande correlate:

  1. Chiama il metodo non statico come statico: PHP Errore irreversibile: utilizzo di $ this quando non nel contesto dell'oggetto
  2. Copia su codice: errore irreversibile: utilizzo di $ this quando non nel contesto dell'oggetto
  3. Tutte le domande "Utilizzo di $ this quando non nel contesto dell'oggetto" su Stackoverflow

2
Potresti anche menzionare come funziona con le chiusure (anche con metodi non statici) e come è "riparato" in 5.4.
Kendall Hopkins,

2
@hakre Stavo parlando di una chiamata statica all'interno di una Chiusura. Come $closure = function() { self::method(); }.
Kendall Hopkins,

2
@KendallHopkins: Questo è un errore diverso: "Errore irreversibile: impossibile accedere a se stesso :: quando non è attivo alcun ambito di classe" Tuttavia con $thiste è possibile attivare il comando "Errore irreversibile: usare $ this quando non nel contesto dell'oggetto" :$closure = function() { $this->method(); };
hakre

75

Errore irreversibile: chiamata alla funzione non definita XXX

Succede quando si tenta di chiamare una funzione non ancora definita. Cause comuni includono estensioni mancanti e include, dichiarazione di funzione condizionale, funzione in una dichiarazione di funzione o errori di battitura semplici.

Esempio 1 - Dichiarazione di funzione condizionale

$someCondition = false;
if ($someCondition === true) {
    function fn() {
        return 1;
    }
}
echo fn(); // triggers error

In questo caso, fn()non sarà mai dichiarato perché $someConditionnon è vero.

Esempio 2 - Funzione nella dichiarazione di funzione

function createFn() 
{
    function fn() {
        return 1;
    }
}
echo fn(); // triggers error

In questo caso, fnverrà dichiarato solo una volta createFn()chiamato. Si noti che le chiamate successive a createFn()attiveranno un errore relativo alla dichiarazione di una funzione esistente.

Puoi anche vedere questo per una funzione integrata di PHP. Prova a cercare la funzione nel manuale ufficiale e controlla a quale "estensione" (modulo PHP) appartiene e quali versioni di PHP lo supportano.

In caso di un'estensione mancante, installare tale estensione e abilitarla in php.ini. Fai riferimento alle Istruzioni di installazione nel Manuale PHP per l'estensione in cui appare la tua funzione. Potresti anche essere in grado di abilitare o installare l'estensione usando il tuo gestore pacchetti (ad es. aptIn Debian o Ubuntu, yumin Red Hat o CentOS) o un pannello di controllo in un ambiente di hosting condiviso.

Se la funzione è stata introdotta in una versione più recente di PHP da ciò che si sta utilizzando, è possibile trovare collegamenti a implementazioni alternative nel manuale o nella relativa sezione dei commenti. Se è stato rimosso da PHP, cerca informazioni sul perché, poiché potrebbe non essere più necessario.

In caso di inclusioni mancanti, assicurarsi di includere il file che dichiara la funzione prima di chiamare la funzione.

In caso di errori di battitura, correggere l'errore di battitura.

Domande correlate:


73

Errore di analisi: errore di sintassi, T_XXX imprevisto

Succede quando hai T_XXXtoken in un posto inaspettato, parentesi sbilanciate (superflue), uso di tag brevi senza attivarlo in php.ini e molti altri.

Domande correlate:

Per ulteriore aiuto, consultare:


70

Errore irreversibile: impossibile utilizzare il valore restituito dalla funzione nel contesto di scrittura

Questo di solito accade quando si utilizza una funzione direttamente con empty.

Esempio:

if (empty(is_null(null))) {
  echo 'empty';
}

Questo perché emptyè un costrutto di linguaggio e non una funzione, non può essere chiamato con un'espressione come argomento nelle versioni di PHP precedenti alla 5.5. Prima di PHP 5.5, l'argomento empty()deve essere una variabile , ma un'espressione arbitraria (come un valore di ritorno di una funzione) è consentita in PHP 5.5+.

empty, nonostante il suo nome, in realtà non controlla se una variabile è "vuota". Al contrario, controlla se non esiste una variabile o == false. Le espressioni (come is_null(null)nell'esempio) saranno sempre considerate esistenti, quindi qui emptysta solo verificando se è uguale a false. È possibile sostituire empty()qui con !, ad esempio if (!is_null(null)), o confrontare esplicitamente con falso, ad esempio if (is_null(null) == false).

Domande correlate:


64

MySQL: hai un errore nella sintassi SQL; controlla il manuale corrispondente alla versione del tuo server MySQL per la sintassi corretta da usare vicino ... alla linea ...

Questo errore è spesso causato perché hai dimenticato di sfuggire correttamente ai dati passati a una query MySQL.

Un esempio di cosa non fare (la "cattiva idea"):

$query = "UPDATE `posts` SET my_text='{$_POST['text']}' WHERE id={$_GET['id']}";
mysqli_query($db, $query);

Questo codice potrebbe essere incluso in una pagina con un modulo da inviare, con un URL come http://example.com/edit.php?id=10 (per modificare il post n ° 10)

Cosa succederà se il testo inviato contiene virgolette singole? $queryfinirà con:

$query = "UPDATE `posts` SET my_text='I'm a PHP newbie' WHERE id=10';

E quando questa query viene inviata a MySQL, si lamenterà che la sintassi è sbagliata, perché nel mezzo c'è una virgoletta singola aggiuntiva.

Per evitare tali errori, DEVI sempre sfuggire ai dati prima dell'uso in una query.

Anche l'escape dei dati prima dell'uso in una query SQL è molto importante perché, in caso contrario, lo script sarà aperto alle iniezioni di SQL. Un'iniezione SQL può causare l'alterazione, la perdita o la modifica di un record, una tabella o un intero database. Questo è un problema di sicurezza molto serio!

Documentazione:


3
Inoltre, se non lo fai, il tuo sito verrà automaticamente violato dai robot
apscience

2
@gladoscc Fai clic su "modifica" e modifica la risposta. Sono consapevole che può essere migliorato.
Giovedì

2
Oppure usa una query sql preparata.
Matej,

53

Errore irreversibile: dimensione della memoria consentita di XXX byte esaurita (tentativo di allocare XXX byte)

Memoria insufficiente per eseguire lo script. PHP ha raggiunto il limite di memoria e interrompe l'esecuzione. Questo errore è fatale, lo script si interrompe. Il valore del limite di memoria può essere configurato nel php.inifile o utilizzando ini_set('memory_limit', '128 M');lo script (che sovrascriverà il valore definito in php.ini). Lo scopo del limite di memoria è impedire a un singolo script PHP di inghiottire tutta la memoria disponibile e di arrestare l'intero server Web.

La prima cosa da fare è ridurre al minimo la quantità di memoria necessaria per lo script. Ad esempio, se stai leggendo un file di grandi dimensioni in una variabile o stai recuperando molti record da un database e li stai archiviando tutti in un array, questo potrebbe usare molta memoria. Modificare il codice per leggere invece il file riga per riga o recuperare i record del database uno alla volta senza archiviarli tutti in memoria. Ciò richiede un po 'di consapevolezza concettuale di ciò che sta accadendo dietro le quinte e quando i dati vengono archiviati in memoria anziché altrove.

Se questo errore si è verificato quando lo script non stava eseguendo un lavoro ad alta intensità di memoria, è necessario controllare il codice per vedere se c'è una perdita di memoria. La memory_get_usagefunzione è tua amica.

Domande correlate:


53

Errore di analisi: errore di sintassi, T_ENCAPSED_AND_WHITESPACE imprevisto

Questo errore si verifica spesso quando si tenta di fare riferimento a un valore di array con una chiave tra virgolette per l'interpolazione all'interno di una stringa tra virgolette doppie quando non è racchiuso l'intero costrutto variabile complesso {}.

Il caso di errore:

Ciò comporterà Unexpected T_ENCAPSED_AND_WHITESPACE:

echo "This is a double-quoted string with a quoted array key in $array['key']";
//---------------------------------------------------------------------^^^^^

Possibili correzioni:

In una stringa tra virgolette doppie, PHP consentirà di utilizzare le stringhe di chiavi di array non quotate e non emetterà un E_NOTICE. Quindi quanto sopra potrebbe essere scritto come:

echo "This is a double-quoted string with an un-quoted array key in $array[key]";
//------------------------------------------------------------------------^^^^^

È possibile racchiudere l'intera variabile di matrice complessa e le chiavi {}, nel qual caso devono essere quotate per evitare un E_NOTICE. La documentazione di PHP raccomanda questa sintassi per variabili complesse.

echo "This is a double-quoted string with a quoted array key in {$array['key']}";
//--------------------------------------------------------------^^^^^^^^^^^^^^^
// Or a complex array property of an object:
echo "This is a a double-quoted string with a complex {$object->property->array['key']}";

Ovviamente, l'alternativa a una delle precedenti è concatenare la variabile array invece di interpolarla:

echo "This is a double-quoted string with an array variable". $array['key'] . " concatenated inside.";
//----------------------------------------------------------^^^^^^^^^^^^^^^^^^^^^

Per riferimento, consultare la sezione Analisi delle variabili nella pagina del manuale delle stringhe PHP


45

Avviso: [funzione] : impossibile aprire il flusso: [motivo]

Succede quando chiami un file di solito da include, requireo fopene PHP non è riuscito a trovare il file o non hai l'autorizzazione sufficiente per caricare il file.

Questo può accadere per una serie di motivi:

  • il percorso del file è errato
  • il percorso del file è relativo
  • includere il percorso è sbagliato
  • le autorizzazioni sono troppo restrittive
  • SELinux è in vigore
  • e molti altri ...

Un errore comune è di non usare un percorso assoluto. Questo può essere facilmente risolto usando un percorso completo o costanti magiche come __DIR__o dirname(__FILE__):

include __DIR__ . '/inc/globals.inc.php';

o:

require dirname(__FILE__) . '/inc/globals.inc.php';

Garantire che venga utilizzato il percorso corretto è un passo nella risoluzione di questi problemi, questo può anche essere correlato a file inesistenti, diritti del filesystem che impediscono l'accesso o restrizioni basate su openir dallo stesso PHP.

Il modo migliore per risolvere rapidamente questo problema è seguire l'elenco di controllo per la risoluzione dei problemi riportato di seguito.

Domande correlate:

Errori correlati:


44

Errore di analisi: errore di sintassi, T_PAAMAYIM_NEKUDOTAYIM imprevisto

L'operatore di risoluzione dell'ambito è anche chiamato "Paamayim Nekudotayim" dall'ebraico פעמיים נקודתיים. che significa "doppio colon".

Questo errore si verifica in genere se si inserisce inavvertitamente ::il codice.

Domande correlate:

Documentazione:


Il modo più semplice per attivare questo errore è in esecuzione a()::b;o $a=::;.
Ismael Miguel,

43

Avviso: utilizzo della costante non definita XXX - presupposto "XXX"

o, in PHP 7.2 o successivo:

Avvertenza: utilizzo della costante non definita XXX - presupposto "XXX" (ciò genererà un errore in una versione futura di PHP)

Questo avviso si verifica quando un token viene utilizzato nel codice e sembra essere una costante, ma una costante con quel nome non è definita.

Una delle cause più comuni di questo avviso è la mancata citazione di una stringa utilizzata come chiave di matrice associativa.

Per esempio:

// Wrong
echo $array[key];

// Right
echo $array['key'];

Un'altra causa comune è un $segno mancante (dollaro) davanti a un nome di variabile:

// Wrong
echo varName;

// Right
echo $varName;

O forse hai sbagliato a scrivere qualche altra costante o parola chiave:

// Wrong
$foo = fasle;

// Right
$foo = false;

Può anche essere un segno che manca un'estensione o libreria PHP necessaria quando si tenta di accedere a una costante definita da quella libreria.

Domande correlate:


2
Direi che la causa più comune è dimenticare $ davanti a una variabile, non array.
Overv

42

Errore irreversibile: impossibile ripetere la dichiarazione della classe [nome classe]

Errore irreversibile: Impossibile ripetere [nome funzione]

Ciò significa che stai usando due volte lo stesso nome di funzione / classe e devi rinominarne uno, o perché hai usato requireo includedove dovresti usare require_onceo include_once.

Quando una classe o una funzione è dichiarata in PHP, è immutabile e non può essere successivamente dichiarata con un nuovo valore.

Considera il seguente codice:

class.php

<?php

class MyClass
{
    public function doSomething()
    {
        // do stuff here
    }
}

index.php

<?php

function do_stuff()
{
   require 'class.php';
   $obj = new MyClass;
   $obj->doSomething();
}

do_stuff();
do_stuff();

La seconda chiamata a do_stuff()produrrà l'errore sopra. Passando requirea require_once, possiamo essere certi che il file che contiene la definizione di MyClassverrà caricato solo una volta e l'errore sarà evitato.


3
Vale la pena menzionare l'uso del caricamento automatico e standard come PSR-4 o persino l'ormai deprecato PSR-0 praticamente si liberano di questo salvandoti dal bisogno di usare richiedono / includi te stesso (escludi alcuni casi bizzarri di bordo).
DanielM,

39

Avviso: variabile non definita

Succede quando si tenta di utilizzare una variabile che non era stata precedentemente definita.

Un esempio tipico sarebbe

foreach ($items as $item) {
    // do something with item
    $counter++;
}

Se non lo hai definito $counterprima, il codice sopra attiverà l'avviso.

Il modo corretto sarebbe quello di impostare la variabile prima di usarla, anche se è solo una stringa vuota come

$counter = 0;
foreach ($items as $item) {
    // do something with item
    $counter++;
}

Avviso: proprietà non definita

Questo errore significa più o meno la stessa cosa, ma si riferisce a una proprietà di un oggetto. Riutilizzando l'esempio sopra, questo codice attiva l'errore perché la counterproprietà non è stata impostata.

$obj = new stdclass;
$obj->property = 2342;
foreach ($items as $item) {
    // do something with item
    $obj->counter++;
}

Domande correlate:


35

Errore di analisi: errore di sintassi, T_VARIABLE imprevisto

Possibile scenario

Non riesco a trovare dove il mio codice è andato storto. Ecco il mio errore completo:

Errore di analisi: errore di sintassi, T_VARIABLE imprevisto sulla riga x

Quello che sto provando

$sql = 'SELECT * FROM dealer WHERE id="'$id.'"';

Risposta

Errore di analisi: un problema con la sintassi del programma, ad esempio lasciare un punto e virgola fuori dalla fine di un'istruzione o, come nel caso precedente, mancare l' .operatore. L'interprete interrompe l'esecuzione del programma quando rileva un errore di analisi.

In parole semplici, si tratta di un errore di sintassi, nel senso che nel codice è presente qualcosa che impedisce di essere analizzato correttamente e quindi in esecuzione.

Quello che dovresti fare è controllare attentamente le righe intorno a dove si trova l'errore per eventuali errori semplici.

Questo messaggio di errore indica che nella riga x del file, l'interprete PHP si aspettava di vedere una parentesi aperta ma invece ha riscontrato qualcosa chiamato T_VARIABLE. Quella T_VARIABLEcosa si chiama a token. È il modo in cui l'interprete PHP esprime le diverse parti fondamentali dei programmi. Quando l'interprete legge in un programma, traduce ciò che hai scritto in un elenco di token. Ovunque metti una variabile nel tuo programma, c'è un T_VARIABLEtoken nell'elenco degli interpreti.

Buona lettura: elenco di token parser

Quindi assicurati di abilitare almeno E_PARSEnel tuo php.ini. Errori di analisi non dovrebbero esistere negli script di produzione.

Ho sempre raccomandato di aggiungere la seguente dichiarazione, durante la codifica:

error_reporting(E_ALL);

Segnalazione errori PHP

Inoltre, è una buona idea usare un IDE che ti farà conoscere errori di analisi durante la digitazione. Puoi usare:

  1. NetBeans (un bel pezzo di bellezza, software libero) (il migliore secondo me)
  2. PhpStorm (lo zio Gordon ama questo: P, piano a pagamento, contiene software proprietario e gratuito)
  3. Eclipse (la bella e la bestia, software gratuito)

Domande correlate:


34

Avviso: offset stringa non inizializzato: *

Come indica il nome, si verifica questo tipo di errore, quando è molto probabile che si stia tentando di scorrere o trovare un valore da un array con una chiave inesistente.

Consideralo, stai provando a mostrare ogni lettera di $string

$string = 'ABCD'; 
for ($i=0, $len = strlen($string); $i <= $len; $i++){
    echo "$string[$i] \n"; 
}

L'esempio sopra genererà ( demo online ):

A
B
C
D
Notice: Uninitialized string offset: 4 in XXX on line X

E, non appena lo script termina l'eco D, otterrai l'errore, perché all'interno del for()ciclo, hai detto a PHP di mostrarti il ​​carattere dalla prima alla quinta stringa da 'ABCD'cui esiste, ma dal momento che il ciclo inizia a contare 0ed echeggia Dquando raggiunge 4, genererà un errore di offset.

Errori simili:


32

Avviso: tentativo di ottenere la proprietà dell'errore non oggetto

Succede quando si tenta di accedere a una proprietà di un oggetto mentre non è presente alcun oggetto.

Un esempio tipico per un avviso senza oggetto sarebbe

$users = json_decode('[{"name": "hakre"}]');
echo $users->name; # Notice: Trying to get property of non-object

In questo caso, $usersè un array (quindi non un oggetto) e non ha proprietà.

Questo è simile all'accesso a un indice o chiave di un array inesistente (vedere Avviso: indice indefinito ).

Questo esempio è molto semplificato. Molto spesso tale avviso segnala un valore di ritorno non controllato, ad esempio quando una libreria ritorna NULLse un oggetto non esiste o solo un valore non oggetto non previsto (ad esempio in un risultato Xpath, strutture JSON con formato imprevisto, XML con formato imprevisto ecc.) ma il codice non verifica tale condizione.

Poiché questi non oggetti vengono spesso elaborati più avanti, spesso si verifica un errore irreversibile in seguito alla chiamata di un metodo oggetto su un non oggetto (consultare: Errore irreversibile: chiamata a una funzione membro ... su un non oggetto ) che interrompe il script.

Può essere facilmente evitato controllando le condizioni di errore e / o che una variabile corrisponde a un'aspettativa. Ecco un avviso con un esempio DOMXPath :

$result  = $xpath->query("//*[@id='detail-sections']/div[1]");
$divText = $result->item(0)->nodeValue; # Notice: Trying to get property of non-object

Il problema sta accedendo alla nodeValueproprietà (campo) del primo elemento mentre non è stato verificato se esiste o meno nella $resultraccolta. Invece paga rendere più esplicito il codice assegnando variabili agli oggetti su cui il codice opera:

$result  = $xpath->query("//*[@id='detail-sections']/div[1]");
$div     = $result->item(0);
$divText = "-/-";
if (is_object($div)) {
    $divText = $div->nodeValue;
}
echo $divText;

Errori correlati:


1
json_decodeora ritorna un'istanza di stdclassdefault, in modo che il codice di esempio potrebbe effettivamente funzionare.
Hugo Zink,

@HugoZink: in realtà (e ha sempre fatto) restituire un array per quell'esempio: 3v4l.org/SUDe0 - Puoi anche fornire un riferimento per la tua scrittura che " json_decodeora restituisce un'istanza di stdclassdefault" ? Non riesco a trovarlo nel log delle modifiche.
Hacre,

Secondo la pagina del manuale di PHP su json_decode , per impostazione predefinita, il assocparametro è impostato su false. Questo parametro decide se la funzione restituisce un stdclassarray anziché un array associativo.
Hugo Zink,

json_decode('[{"name": "hakre"}]', true)restituirà un array, altrimenti un stdclassoggetto
zanderwar

29

Attenzione: restrizione open_basedir in vigore

Questo avviso può essere visualizzato con varie funzioni correlate all'accesso ai file e alle directory. Segnala un problema di configurazione.

Quando appare, significa che è stato vietato l'accesso ad alcuni file.

L'avviso stesso non rompe nulla, ma molto spesso uno script non funziona correttamente se viene impedito l'accesso ai file.

La correzione è normalmente quella di cambiare la configurazione di PHP , viene chiamata la relativa impostazione open_basedir.

A volte vengono utilizzati nomi di file o directory errati, la correzione è quindi quella di utilizzare quelli giusti.

Domande correlate:


1
Questo si verifica più spesso su un host condiviso, le persone di solito non si chiudono fuori dalle directory :-)
uınbɐɥs

28

Errore di analisi: errore di sintassi, imprevisto '['

Questo errore si presenta in due variatori:

Variazione 1

$arr = [1, 2, 3];

Questa sintassi di inizializzazione dell'array è stata introdotta solo in PHP 5.4; genererà un errore parser nelle versioni precedenti. Se possibile, aggiorna la tua installazione o usa la vecchia sintassi:

$arr = array(1, 2, 3);

Vedi anche questo esempio dal manuale.

Variazione 2

$suffix = explode(',', 'foo,bar')[1];

I risultati della funzione di dereferenziazione dell'array sono stati introdotti anche in PHP 5.4. Se non è possibile eseguire l'aggiornamento, è necessario utilizzare una variabile (temporanea):

$parts = explode(',', 'foo,bar');
$suffix = $parts[1];

Vedi anche questo esempio dal manuale.


23

Avvertenza: [funzione] prevede che il parametro 1 sia una risorsa, valore booleano

(Una variante più generale di Warning: mysql_fetch_array () prevede che il parametro 1 sia una risorsa, dato booleano )

Le risorse sono un tipo in PHP (come stringhe, numeri interi o oggetti). Una risorsa è un blob opaco con nessun valore intrinsecamente significativo. Una risorsa è specifica e definita da un determinato insieme di funzioni o estensioni PHP. Ad esempio, l'estensione Mysql definisce due tipi di risorse :

Esistono due tipi di risorse utilizzate nel modulo MySQL. Il primo è l'identificatore di collegamento per una connessione al database, il secondo una risorsa che contiene il risultato di una query.

L'estensione cURL definisce altri due tipi di risorse :

... una maniglia cURL e una maniglia multipla cURL.

Quando var_dumped, i valori si presentano così:

$resource = curl_init();
var_dump($resource);

resource(1) of type (curl)

Questo è tutto ciò che la maggior parte delle risorse sono, un identificatore numerico ( (1)) di un certo tipo ( (curl)).

Trasportate queste risorse e le passate a funzioni diverse per le quali una tale risorsa significa qualcosa. In genere queste funzioni allocano determinati dati in background e una risorsa è solo un riferimento che usano per tenere traccia di questi dati internamente.


L' errore " ... prevede che il parametro 1 sia risorsa, valore booleano " è in genere il risultato di un'operazione non selezionata che avrebbe dovuto creare una risorsa, ma è stata falseinvece restituita . Ad esempio, la fopenfunzione ha questa descrizione:

Valori di restituzione

Restituisce una risorsa puntatore a file in caso di successo o FALSEerrore.

Quindi in questo codice, $fpsarà o resource(x) of type (stream)o false:

$fp = fopen(...);

Se non si controlla se l' fopenoperazione ha esito positivo o negativo e quindi se si $fptratta di una risorsa valida o si falsepassa $fpa un'altra funzione che prevede una risorsa, è possibile che si verifichi l'errore sopra riportato:

$fp   = fopen(...);
$data = fread($fp, 1024);

Warning: fread() expects parameter 1 to be resource, boolean given

È sempre necessario verificare l'errore del valore restituito delle funzioni che stanno tentando di allocare una risorsa e potrebbero non riuscire :

$fp = fopen(...);

if (!$fp) {
    trigger_error('Failed to allocate resource');
    exit;
}

$data = fread($fp, 1024);

Errori correlati:


22

Avviso: offset stringa illegale 'XXX'

Ciò accade quando si tenta di accedere a un elemento dell'array con la sintassi della parentesi quadra, ma lo si fa su una stringa e non su un array, quindi l'operazione chiaramente non ha senso .

Esempio:

$var = "test";
echo $var["a_key"];

Se ritieni che la variabile debba essere un array, vedi da dove viene e risolvi il problema.


20

Il codice non viene eseguito / vengono visualizzate le parti del mio codice PHP

Se non vedi alcun risultato dal tuo codice PHP e / o stai vedendo parti del tuo output letterale di codice sorgente PHP nella pagina web, puoi essere abbastanza sicuro che il tuo PHP non verrà effettivamente eseguito. Se usi Visualizza sorgente nel tuo browser, probabilmente vedrai l'intero file di codice sorgente PHP così com'è. Poiché il codice PHP è incorporato nei <?php ?>tag, il browser proverà a interpretarli come tag HTML e il risultato potrebbe apparire un po 'confuso.

Per eseguire effettivamente i tuoi script PHP, devi:

  • un web server che esegue il tuo script
  • per impostare l'estensione del file su .php, altrimenti il ​​web server non la interpreterà come tale *
  • per accedere al tuo file .php tramite il web server

* A meno che non lo riconfiguri, tutto può essere configurato.

Quest'ultimo è particolarmente importante. È sufficiente fare doppio clic sul file per aprirlo nel browser utilizzando un indirizzo come:

file://C:/path/to/my/file.php

Questo sta bypassando completamente qualsiasi server Web che potresti avere in esecuzione e il file non viene interpretato. Devi visitare l'URL del file sul tuo server web, probabilmente qualcosa del tipo:

http://localhost/my/file.php

Puoi anche verificare se stai utilizzando tag aperti corti <?anziché <?phpe se la tua configurazione PHP ha disattivato i tag aperti corti.

Vedi anche che il codice PHP non viene eseguito, invece il codice mostra sulla pagina


18

Avviso: mysql_connect (): accesso negato per l'utente 'nome' @ 'host'

Questo avviso viene visualizzato quando ci si connette a un server MySQL / MariaDB con credenziali non valide o mancanti (nome utente / password). Quindi questo è in genere non è un problema di codice, ma un problema di configurazione del server.

  • Vedere la pagina di manuale su mysql_connect("localhost", "user", "pw")per esempi.

  • Verifica di aver effettivamente utilizzato un $usernamee $password.

    • Non è raro che tu ottenga l'accesso senza password, ed è ciò che è accaduto quando è stato lanciato l'Avvertimento (using password: NO).
    • Solitamente solo il server di test locale consente di connettersi con nome utente root, nessuna password e testnome del database.

    • Puoi verificare se sono davvero corretti utilizzando il client della riga di comando:
      mysql --user="username" --password="password" testdb

    • Nome utente e password fanno distinzione tra maiuscole e minuscole e gli spazi bianchi non vengono ignorati. Se la tua password contiene meta caratteri come $, sfuggili o inserisci la password tra virgolette singole .

    • La maggior parte dei provider di hosting condiviso predice gli account mysql in relazione all'account utente unix (a volte solo prefissi o suffissi numerici extra). Vedi i documenti per un modello o documentazione e CPanel o qualsiasi altra interfaccia per l'impostazione di una password.

    • Consulta il manuale di MySQL su Aggiunta di account utente tramite la riga di comando. Quando sei connesso come utente amministratore puoi inviare una query come:
      CREATE USER 'username'@'localhost' IDENTIFIED BY 'newpassword';

    • Oppure utilizza Adminer o WorkBench o qualsiasi altro strumento grafico per creare, controllare o correggere i dettagli dell'account.

    • Se non riesci a correggere le tue credenziali, allora chiedere a Internet di "per favore aiuto" non avrà alcun effetto. Solo tu e il tuo fornitore di hosting avete le autorizzazioni e l'accesso sufficiente per diagnosticare e correggere le cose.

  • Verifica di poter raggiungere il server del database, utilizzando il nome host fornito dal tuo provider:
    ping dbserver.hoster.example.net

    • Controlla questo da una console SSH direttamente sul tuo server web. Testare dal tuo client di sviluppo locale al tuo server di hosting condiviso è raramente significativo.

    • Spesso si desidera solo il nome del server "localhost", che normalmente utilizza un socket denominato locale quando disponibile. Altre volte puoi provare "127.0.0.1"come fallback.

    • Se il tuo server MySQL / MariaDB è in ascolto su una porta diversa, quindi utilizza "servername:3306".

    • Se fallisce, allora c'è forse un problema con il firewall. (Off-topic, non una domanda di programmazione. Non è possibile alcuna supposizione remota.)

  • Quando si usano costanti come ad es. DB_USERO DB_PASSWORD, verificare che siano effettivamente definite .

    • Se ottieni a "Warning: Access defined for 'DB_USER'@'host'"e a "Notice: use of undefined constant 'DB_PASS'", questo è il tuo problema.

    • Verifica che il tuo esempio sia xy/db-config.phpstato effettivamente incluso e quant'altro.

  • Controlla le GRANTautorizzazioni impostate correttamente .

    • Non è sufficiente avere una coppia username+ password.

    • Ogni account MySQL / MariaDB può avere un set di autorizzazioni allegato.

    • Questi possono limitare a quali database è consentito connettersi, da quale client / server potrebbe provenire la connessione e quali query sono consentite.

    • Pertanto, l'avviso "Accesso negato" potrebbe anche essere visualizzato per le mysql_querychiamate, se non si dispone delle autorizzazioni per SELECTuna tabella specifica, o INSERT/ UPDATEe più comunemente DELETEqualsiasi cosa.

    • È possibile adattare le autorizzazioni dell'account quando si è connessi per client della riga di comando utilizzando l' account admin con una query come:
      GRANT ALL ON yourdb.* TO 'username'@'localhost';

  • Se l'avviso viene visualizzato per primo, Warning: mysql_query(): Access denied for user ''@'localhost'è possibile che si abbia una coppia account / password preconfigurata php.ini .

    • Verifica che mysql.default_user=e mysql.default_password=abbia valori significativi.

    • Spesso questa è una configurazione del provider. Quindi contatta il loro supporto per disallineamenti.

  • Trova la documentazione del tuo provider di hosting condiviso:

  • Si noti che è anche possibile aver esaurito il pool di connessioni disponibili . Riceverai avvisi di accesso negato per troppe connessioni simultanee. (Devi esaminare l'installazione. Questo è un problema di configurazione del server fuori tema, non una domanda di programmazione.)

  • La versione del tuo client libmysql potrebbe non essere compatibile con il server database. Normalmente i server MySQL e MariaDB possono essere raggiunti con PHP compilati nel driver. Se si dispone di un'impostazione personalizzata o di una versione PHP obsoleta e di un server di database molto più recente o significativamente obsoleto, la mancata corrispondenza della versione potrebbe impedire le connessioni. (No, devi indagare su te stesso. Nessuno può indovinare la tua configurazione).

Più riferimenti:

A proposito, probabilmente non vorrai mysql_*più usare le funzioni . I nuovi arrivati ​​spesso migrano su mysqli , che tuttavia è altrettanto noioso. Invece leggi su DOP e dichiarazioni preparate .
$db = new PDO("mysql:host=localhost;dbname=testdb", "username", "password");


2
mysql consente la connessione automatica tramite le impostazioni php-ini, quindi viene visualizzato lo stesso messaggio di errore con il diverso comando con prefisso, ad esempio "Avvertenza: mysql_query (): accesso negato per l'utente '' @ 'localhost' (utilizzando la password: NO) in. .. " - solo notando.
Hacre,

Ah, me ne sono completamente dimenticato! (Probabilmente lo ha usato l'ultima volta con PHP3 o giù di lì ..)
mario

18

Avviso: conversione da array a stringa

Questo accade semplicemente se provi a trattare un array come una stringa:

$arr = array('foo', 'bar');

echo $arr;  // Notice: Array to string conversion
$str = 'Something, ' . $arr;  // Notice: Array to string conversion

Una matrice non può essere semplicemente echo"concatenata" con una stringa, poiché il risultato non è ben definito. PHP utilizzerà la stringa "Array" al posto dell'array e attiverà l'avviso per sottolineare che probabilmente non è quello che era previsto e che dovresti controllare qui il tuo codice. Probabilmente vuoi qualcosa del genere invece:

echo $arr[0];  // displays foo
$str = 'Something ' . join(', ', $arr); //displays Something, foo, bar

Oppure esegui il loop dell'array:

foreach($arr as $key => $value) {
    echo "array $key = $value";
    // displays first: array 0 = foo
    // displays next:  array 1 = bar
}

Se questo avviso appare da qualche parte che non ti aspetti, significa che una variabile che pensavi fosse una stringa è in realtà un array. Ciò significa che hai un bug nel tuo codice che rende questa variabile un array invece della stringa che ti aspetti.


12

Avvertenza: divisione per zero

Il messaggio di avviso "Divisione per zero" è una delle domande più frequenti tra i nuovi sviluppatori PHP. Questo errore non causerà un'eccezione, pertanto alcuni sviluppatori a volte sopprimono l'avviso aggiungendo l'operatore di soppressione dell'errore @ prima dell'espressione. Per esempio:

$value = @(2 / 0);

Ma, come con qualsiasi avviso, l'approccio migliore sarebbe quello di rintracciare la causa dell'avvertimento e risolverlo. La causa dell'avvertimento verrà da qualsiasi istanza in cui si tenta di dividere per 0, una variabile uguale a 0 o una variabile che non è stata assegnata (perché NULL == 0) perché il risultato sarà "indefinito".

Per correggere questo avviso, dovresti riscrivere la tua espressione per verificare che il valore non sia 0, se lo è, fai qualcos'altro. Se il valore è zero, non dovresti dividere, oppure dovresti cambiare il valore in 1 e quindi dividere in modo che la divisione si traduca nell'equivalente di aver diviso solo per la variabile aggiuntiva.

if ( $var1 == 0 ) { // check if var1 equals zero
    $var1 = 1; // var1 equaled zero so change var1 to equal one instead
    $var3 = ($var2 / $var1); // divide var1/var2 ie. 1/1
} else {
    $var3 = ($var2 / $var1); // if var1 does not equal zero, divide
}

Domande correlate:


L'impostazione su 1 se fosse 0 fermerà l'errore ma è davvero meglio della soppressione che hai detto non dovrebbe essere utilizzata (che sono d'accordo)? Suggerirei che la maggior parte delle volte sarebbe probabile che venisse restituito qualche altro messaggio o valore.
James,

Per questo esempio, se $var1fa == 0, puoi semplicemente impostare $var3su $var2. Anche se non lo fa, l'altro non è affatto necessario in quanto l'incarico è lo stesso in entrambi i casi, quindi nessun altro e assegnazione al di fuori delif
James

8

Standard rigorosi: metodo non statico [<class> :: <method>] non deve essere chiamato staticamente

Si verifica quando si tenta di chiamare un metodo non statico su una classe poiché era statico e si ha anche il E_STRICTflag nel proprioerror_reporting() impostazioni.

Esempio :

class HTML {
   public function br() {
      echo '<br>';
   }
}

HTML::br() o $html::br()

Puoi effettivamente evitare questo errore non aggiungendo E_STRICTad error_reporting()es

error_reporting(E_ALL & ~E_STRICT);

poiché per PHP 5.4.0 e versioni successive, E_STRICTè incluso in E_ALL[ ref ]. Ma questo non è auspicabile. La soluzione è definire la funzione statica prevista come effettiva static:

public static function br() {
  echo '<br>';
}

o chiama la funzione in modo convenzionale:

$html = new HTML();
$html->br();

Domande correlate :


7

Obsoleto: la sintassi di accesso all'offset di array e stringhe con parentesi graffe è obsoleta

È possibile accedere agli offset di stringa e agli elementi dell'array mediante parentesi graffe {}precedenti a PHP 7.4.0:

$string = 'abc';
echo $string{0};  // a

$array = [1, 2, 3];
echo $array{0};  // 1

Questo è stato deprecato da PHP 7.4.0 e genera un avviso:

Obsoleto: la sintassi di accesso all'offset di array e stringhe con parentesi graffe è obsoleta

È necessario utilizzare parentesi quadre []per accedere agli offset di stringa e agli elementi dell'array:

$string = 'abc';
echo $string[0];  // a

$array = [1, 2, 3];
echo $array[0];  // 1

L' RFC per questa modifica si collega a uno script PHP che tenta di risolvere questo problema meccanicamente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.