2017-04-26 12 views
-1

J'ai une fonction forbid() qui est censée écrire dans un fichier journal dont l'accès a été refusé, avec une raison pour le refus. Pour une raison quelconque, il n'écrit pas dans le fichier journal.fputs n'écrit pas avant que l'en-tête 403 ne soit déclenché

// function to forbid access 
function forbid($reason) { 
    // explain why 
    if ($reason) fputs($file, "=== ERROR: " . $reason . " ===\n"); 
    fputs($file, "*** ACCESS DENIED ***" . "\n\n\n"); 
    fclose($file); 

    // forbid 
    header("HTTP/1.0 403 Forbidden"); 
    exit; 
} 

$file est défini plus tôt dans le code, et d'autres fputs() avant cette fonction fonctionnent correctement; Je pense que c'est quelque chose à propos de l'en-tête 403 l'empêchant d'écrire.

+3

Et je pense que c'est quelque chose à propos de '$ file' qui n'est pas défini dans une portée de fonction. –

+0

Si vous voulez utiliser '$ file' dans la fonction, vous devez utiliser une instruction' use' ou la passer directement à votre fonction en tant que paramètre. –

+0

C'est une définition de fonction nommée, 'use' est pour les fonctions anonymes. –

Répondre

2

Cela ressemble à un problème d'étendue. Comme c'est une fonction, elle recherche le fichier $file dans la portée des fonctions, pas global. Vous devez passer le handle de fichier dans la fonction.

Je vais également supposer que la signalisation d'erreur est désactivée, supprimant le problème de votre part.

+0

Ah, c'était ça. Je ne sais pas pourquoi je n'y ai pas pensé :) Merci! – JacobTheDev