query - php result error




Riferimento-Cosa significa questo errore in PHP? (20)

Attenzione: mysql_fetch_array () si aspetta che il parametro 1 sia risorsa, dato booleano

Innanzitutto:

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

Questo accade quando si tenta di recuperare i dati dal risultato di mysql_query ma la query non è riuscita.

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

Devi controllare il risultato restituito da mysql_query di

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

Domande correlate:

Errori correlati:

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

Cos'è questo?

Si tratta di una serie di risposte su avvisi, errori e avvisi che potresti incontrare durante la programmazione di PHP e che non hanno idea di come risolvere. Questo è anche un wiki della comunità, quindi tutti sono invitati a partecipare all'aggiunta e al mantenimento di questa lista.

Perchè è questo?

Domande come "Intestazioni già inviate" o "Chiamata di un membro di un non oggetto" vengono visualizzate di frequente su Stack Overflow. La causa principale di queste domande è sempre la stessa. Di conseguenza, le risposte a tali domande in genere le ripetono e mostrano all'OP la riga da modificare nel caso specifico. Queste risposte non aggiungono alcun valore al sito perché si applicano solo al codice particolare dell'OP. Altri utenti che hanno lo stesso errore non possono facilmente leggere la soluzione perché sono troppo localizzati. È triste, perché una volta che hai capito la causa principale, correggere l'errore è banale. Quindi, questa lista cerca di spiegare la soluzione in un modo generale di applicare.

Cosa dovrei fare qui?

Se la tua domanda è stata contrassegnata come un duplicato di questo, ti preghiamo di trovare il tuo messaggio di errore qui sotto e applicare 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 si desidera contribuire, si prega di aggiungere il messaggio di errore "preferito", avviso o avviso, uno per risposta, una breve descrizione che cosa significa (anche se è solo evidenziando termini per la loro pagina manuale), una possibile soluzione o approccio di debug e un elenco di domande e risposte esistenti di valore. Inoltre, sentiti libero di migliorare qualsiasi risposta esistente.

La lista

Vedi anche


Attenzione: restrizione in open_basedir in vigore

Questo avviso può apparire con varie funzioni correlate al file e all'accesso alla directory. Segnala un problema di configurazione.

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

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

Normalmente la correzione cambia la configurazione di PHP , l'impostazione correlata si chiama open_basedir .

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

Domande correlate:


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

Avviene quando lo script tenta di inviare un'intestazione HTTP al client, ma in precedenza esisteva già l'output, il che comportava l'invio di intestazioni al client.

Questo è un E_WARNING e non fermerà la sceneggiatura.

Un tipico esempio potrebbe essere un file modello come questo:

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

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

Puoi risolvere questo problema attraverso le linee prima che il codice inneschi l'Avviso e verifichi dove viene emesso. Sposta qualsiasi intestazione che invia il codice prima di quel codice.

Un risultato spesso trascurato sono le nuove linee 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 <?php ha uno spazio vuoto, una linea o un carattere invisibile prima di esso, facendo sì che il server web invii le intestazioni e lo spazio / newline così quando PHP inizia l'analisi non sarà in grado per inviare qualsiasi intestazione.

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

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

Domande correlate:


Avviso: indice non definito

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

Un tipico esempio Undefined Index avviso Undefined Index sarebbe ( demo )

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

Entrambi gli spinach e 1 non esistono nell'array, causando l'attivazione di E_WARNING .

La soluzione è assicurarsi che l'indice o l'offset esista prima di accedere a tale indice. Ciò potrebbe significare che devi correggere un bug nel tuo programma per assicurarti che quegli indici esistano quando te li aspetti. Oppure può significare che devi testare se gli indici esistono usando array_key_exists o isset :

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

Se hai il 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, l'indice dell'array esiste. In genere, verifichi ciò con:

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

Domande correlate:


Avviso: uso della costante non definita XXX - presupposto 'XXX'

oppure, in PHP 7.2 o versioni successive:

Attenzione: uso della costante non definita XXX - presupposto 'XXX' (questo genererà un errore in una versione futura di PHP)

Questo avviso si verifica quando un codice 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 un array associativo.

Per esempio:

// Wrong
echo $array[key];

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

Un'altra causa comune è il segno $ (dollaro) mancante davanti al nome di una variabile:

// Wrong
echo varName;

// Right
echo $varName;

O forse hai sbagliato l'ortografia di qualche altra costante o parola chiave:

// Wrong
$foo = fasle;

// Right
$foo = false;

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

Domande correlate:


Avviso: variabile non definita

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

Un tipico esempio potrebbe essere

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

Se non hai definito $counter precedenza, il codice sopra attiverà la notifica.

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

Domande correlate:


Errore di analisi: errore di sintassi, T_PAAMAYIM_NEKUDOTAYIM inatteso

L'operatore di risoluzione scope è anche chiamato "Paamayim Nekudotayim" dall'ebraico פעמיים נקודתיים. che significa "doppio punto" o "doppio punto due volte".

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

Domande correlate:

Documentazione:


Errore di analisi: errore di sintassi, T_VARIABLE imprevisto

Scenario possibile

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

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

Quello che sto provando

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

Risposta

Errore di analisi: un problema con la sintassi del tuo programma, come lasciare un punto e virgola alla fine di una dichiarazione o, come nel caso precedente, manca il . operatore. L'interprete interrompe l'esecuzione del programma quando incontra un errore di analisi.

In parole semplici questo è un errore di sintassi, nel senso che c'è qualcosa nel codice che lo impedisce di essere analizzato correttamente e quindi in esecuzione.

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

Quel messaggio di errore significa che nella riga x del file, l'interprete PHP si aspettava di vedere una parentesi aperta, ma invece ha incontrato qualcosa chiamato T_VARIABLE . Quella cosa T_VARIABLE è chiamata token . È il modo in cui interpreta PHP di esprimere diverse parti fondamentali dei programmi. Quando l'interprete legge in un programma, traduce ciò che hai scritto in una lista di token. Ovunque tu inserisca una variabile nel tuo programma, c'è un token T_VARIABLE nella lista dell'interprete.

Buona lettura: Elenco dei token Parser

Quindi assicurati di abilitare almeno E_PARSE nel tuo php.ini . Gli 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, è consigliabile utilizzare un IDE che consenta di analizzare gli errori di analisi durante la digitazione. Puoi usare:

  1. NetBeans (bella pace della bellezza, software libero) (il migliore a mio parere)
  2. PhpStorm (lo zio Gordon ama questo: P, piano a pagamento, contiene software proprietario e gratuito)
  3. Eclipse (bellezza e la bestia, software libero)

Domande correlate:

  • Riferimento: errori Parse / Syntax PHP; e come risolverli?

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

Questo errore si presenta in due variatori:

Variazione 1

$arr = [1, 2, 3];

Questa sintassi di inizializzatore di array è stata introdotta solo in PHP 5.4; prima genererebbe un errore di parser. 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];

Anche i risultati della funzione di dereferenziazione delle mire sono stati introdotti in PHP 5.4. Se non è possibile eseguire l'upgrade, è necessario utilizzare una variabile (temporanea):

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

Vedi anche questo esempio dal manuale.


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

Succede con il codice simile a xyz->method() dove xyz non è un oggetto e quindi quel method non può essere chiamato.

Questo è un errore fatale che fermerà lo script (avviso di compatibilità in avanti: diventerà un errore catchable a partire da PHP 7).

Molto spesso questo è un segno che il codice non ha verificato le condizioni di errore. Convalidare che un oggetto è in realtà un oggetto prima di chiamare i suoi metodi.

Un typical esempio potrebbe essere

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

Nell'esempio sopra, la query non può essere preparata e prepare() assegnerà false a $statement . Cercando di chiamare il metodo execute() verrà quindi generato l'errore irreversibile perché false è un "non oggetto" poiché il valore è un valore booleano.

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

Se anche il ->prepare fallisce, l'oggetto handle del database $pdo non viene passato nell'ambito corrente . Trova dove è stato definito. Quindi passalo come parametro, memorizzalo come proprietà o condividilo tramite l'ambito globale.

Un altro problema potrebbe essere la creazione condizionale di un oggetto e quindi 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, il tuo oggetto potrebbe non essere definito.

Domande correlate:

  • Chiama una funzione membro su un non oggetto
  • Elenca tutto il PHP "Errore irreversibile: chiamata a una funzione membro ... su un oggetto non soggetto" Domande su

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

Non c'è abbastanza memoria per eseguire il tuo script. PHP ha raggiunto il limite di memoria e smette di eseguirlo. Questo errore è fatale, lo script si interrompe. Il valore del limite di memoria può essere configurato nel file php.ini o usando ini_set('memory_limit', '128 M'); nello script (che sovrascriverà il valore definito in php.ini ). Lo scopo del limite di memoria è quello di evitare che uno script PHP diventi inghiottito tutta la memoria disponibile e abbassi l'intero server web.

La prima cosa da fare è minimizzare la quantità di memoria richiesta dal tuo 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 memorizzando tutti in un array, questo potrebbe richiedere molta memoria. Cambia il tuo codice per leggere il file riga per riga o recuperare i record del database uno alla volta senza memorizzarli tutti in memoria. Ciò richiede un po 'di consapevolezza concettuale di ciò che accade dietro le quinte e quando i dati vengono archiviati nella memoria rispetto ad altri.

Se si è verificato questo errore quando il tuo script non stava facendo lavoro a uso intensivo della memoria, è necessario controllare il codice per vedere se c'è una perdita di memoria. La funzione memory_get_usage è tua amica.

Domande correlate:

  • Tutto "Errore irreversibile: dimensioni di memoria consentite di byte XXX esauriti" Domande su

Errore irreversibile: impossibile ridichiarare la classe [nome della classe]

Errore irreversibile: impossibile redeclare [nome funzione]

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

Quando una classe o una funzione è dichiarata in PHP, è immutabile e non può più essere 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. Cambiando require a require_once , possiamo essere certi che il file che contiene la definizione di MyClass verrà caricato una sola volta e l'errore verrà evitato.


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 indicato questo errore fatale.

Questo errore può verificarsi:

  1. Se un metodo non statico è 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 il codice, $this può essere utilizzato solo nel contesto dell'oggetto e non deve mai essere utilizzato in un metodo statico. Inoltre, un metodo statico non dovrebbe accedere alla proprietà non statica. Utilizza self::$static_property per accedere alla proprietà statica.

  2. Se il codice da un metodo di classe è stato copiato in una funzione normale o solo l'ambito globale e mantenendo $this variabile speciale.
    Come risolvere il problema: rivedere il codice e sostituire $this con una variabile di sostituzione diversa.

Domande correlate:

  1. Chiama il metodo non statico come statico: PHP Errore irreversibile: Usare $ questo quando non è nel contesto dell'oggetto
  2. Copia sul codice: errore irreversibile: utilizzo di $ this quando non nel contesto dell'oggetto
  3. Tutto "Usando $ questo quando non nel contesto dell'oggetto" Domande su

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

Questo errore è spesso causato dal fatto di aver dimenticato di eseguire correttamente il passaggio dei dati 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? $query finirà 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é c'è una citazione singola extra nel mezzo.

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

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

Documentazione:


Avviso: divisione per zero

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

$value = @(2 / 0);

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

Per correggere questo avviso, è necessario riscrivere l'espressione per verificare che il valore non sia 0, se lo è, fare qualcos'altro. Se il valore è zero, non devi dividere o cambiare il valore in 1 e quindi dividere in modo che la divisione risulti l'equivalente di averlo 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:


Avviso: matrice per la conversione delle stringhe

Questo succede semplicemente se si tenta di 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

Un array non può essere semplicemente echo"d" o concatenato con una stringa, perché il risultato non è ben definito. PHP utilizzerà la stringa "Array" al posto dell'array e attiverà l'avviso per segnalare che probabilmente non è ciò che era previsto e che dovresti controllare il tuo codice qui. Probabilmente vorresti qualcosa come questo:

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

Oppure fai un 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 una variabile che pensavi essere una stringa in realtà una matrice. Ciò significa che hai un bug nel codice che rende questa variabile una matrice invece della stringa che ti aspetti.


Avviso: offset stringa non valido 'XXX'

Questo 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 pensi che la variabile debba essere una matrice, vedi da dove proviene e risolvi il problema.


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

Accade quando si tenta di accedere a una proprietà di un oggetto mentre non vi è 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à.

È simile all'accesso a un indice o chiave non esistente di un array (vedere Avviso: Indice non definito ).

Questo esempio è molto semplificato. Molto spesso tale avviso segnala un valore di ritorno non controllato, ad esempio quando una libreria restituisce NULLse un oggetto non esiste o solo un valore non oggetto inatteso (ad esempio in un risultato Xpath, strutture JSON con formato inatteso, XML con formato imprevisto ecc.) ma il codice non verifica la presenza di una 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 (vedere: Errore irreversibile: chiamata a una funzione membro ... su un oggetto non ) interruzione script.

Può essere facilmente prevenuto controllando le condizioni di errore e / o che una variabile corrisponda a un'aspettativa. Ecco un avviso simile 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 è accedere alla nodeValueproprietà (campo) del primo elemento mentre non è stato controllato se esiste o meno nella $resultraccolta. Invece paga per rendere il codice più esplicito assegnando variabili agli oggetti su cui il codice opera:

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

Errori correlati:

  • Avviso: indice non definito
  • Errore irreversibile: chiamata a una funzione membro ... su un non oggetto

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

Se non vedi alcun risultato dal tuo codice PHP e / o stai vedendo parti del tuo output di codice sorgente PHP letterale nella pagina web, puoi essere abbastanza sicuro che il tuo PHP non viene effettivamente eseguito. Se utilizzi View Source nel tuo browser, probabilmente stai vedendo 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 sembrare un po 'confuso.

Per eseguire effettivamente gli script PHP, è necessario:

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

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

Quest'ultimo è particolarmente importante. Semplicemente facendo doppio clic sul file probabilmente lo aprirai nel tuo browser usando un indirizzo come:

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

Ciò ignora completamente qualsiasi server Web che è possibile eseguire e il file non viene interpretato. Devi visitare l'URL del file sul tuo server web, probabilmente qualcosa come:

http://localhost/my/file.php

Potresti anche voler controllare se stai usando tag aperti brevi <?invece di <?phpe la tua configurazione di PHP ha disattivato i tag aperti.

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


Attenzione: [funzione] si aspetta che il parametro 1 sia risorsa, dato booleano

(Una variazione più generale di Warning: mysql_fetch_array () si aspetta che il parametro 1 sia risorsa, dato booleano )

Le risorse sono un type in PHP (come stringhe, interi o oggetti). Una risorsa è un blob opaco senza alcun 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 :

Ci sono due tipi di risorse usate nel modulo MySQL. Il primo è l'identificatore del 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 :

... un handle cURL e un multi handle cURL.

Quando var_dumped, i valori assomigliano a questo:

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

resource(1) of type (curl)

Questa è la maggior parte delle risorse, un identificatore numerico ( (1)) di un certo tipo ( (curl)).

Portate queste risorse in giro e passatele a funzioni diverse per le quali una risorsa del genere 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 " ... si aspetta che il parametro 1 sia risorsa, booleano dato " è in genere il risultato di un'operazione non controllata che doveva creare una risorsa, ma che falseinvece è stata restituita . Ad esempio, la fopenfunzione ha questa descrizione:

Valori di ritorno

Restituisce una risorsa puntatore al file in caso di successo o FALSEin caso di errore.

Quindi in questo codice, $fpo sarà un 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 se si falsepassa $fpa un'altra funzione che si aspetta una risorsa, è possibile ottenere l'errore sopra riportato:

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

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

È sempre necessario verificare il valore restituito delle funzioni che stanno tentando di allocare una risorsa e potrebbe non riuscire :

$fp = fopen(...);

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

$data = fread($fp, 1024);

Errori correlati:







warnings