web-dev-qa-db-fra.com

Comment effacer les éléments précédemment répétés dans PHP

En php, existe-t-il un moyen d'effacer/supprimer tous les éléments imprimés ou reproduits précédemment?

Par exemple:

<?php

echo 'a';
print 'b';

// some statement that removes all printed/echoed items

echo 'c';

// the final output should be equal to 'c', not 'abc'

?>

Mon script utilise la fonction include. Les fichiers inclus ne sont censés faire écho à rien. Juste au cas où quelqu'un (ex = hacker) essaie, j'ai besoin d'un moyen de le supprimer.

42
edt
<?php

ob_start();
echo 'a';
print 'b';

// some statement that removes all printed/echoed items
ob_end_clean();

echo 'c';

// the final output is equal to 'c', not 'abc'

?>

Fonctions de mise en mémoire tampon de sortie

Les fonctions de mise en mémoire tampon de sortie sont également utiles en piratage pour contraindre des fonctions qui n'impriment que pour renvoyer des chaînes, c'est-à-dire.

<?php
ob_start();
var_dump($myVar);
$data = ob_get_clean();
// do whatever with $data
?>
96
Matthew Scharley

alors que @monoxide a raison, il vaut mieux trouver des moyens plus intuitifs de faire de même. par exemple.:

<?php
$val_to_print = $a;
if( $need_to_change==true ) 
    $val_to_print = $b;
// when you are sure you won't have to change again...
echo $val_to_print;
?>

À votre santé,

jrh

4
jrharshath

Idéalement, vous ne devriez rien imprimer que vous ne souhaitiez pas imprimer. Gardez votre logique distincte de votre présentation pour moins de frustration.

Cela étant dit, vous pouvez consulter les options Output Buffering dans PHP.

1
Sampson

S'il s'agit d'une sortie de débogage et d'informations sur l'état du programme qui vous inquiètent, peut-être que trigger_error peut être plus proche de ce dont vous avez besoin, comme:

trigger_error ("Attempting to load report #{$report_id}.", E_USER_NOTICE);

Lorsque votre script est en production, il ne présentera pas d'erreurs car généralement elles sont désactivées ou enregistrées. Il est également préférable de faire des erreurs fatales de cette façon avec E_USER_ERROR plutôt que d'utiliser die ().

ob_start ();
require ($filename);
$html = ob_get_clean ();

Ce qui précède comprendra également un fichier et vous donnera son contenu sous forme de chaîne.

Mise en garde: abandonner le tampon abandonnera également tous les messages d'erreur émis, ce qui fera du débogage (potentiellement) un cauchemar.

0
Meep3D