2010-08-07 15 views
3

J'ai un formulaire HTML Affectations à l'index.php suivante:

<?php require_once("/home/full/path/to/included/file.php"); ?> 

Et file.php, je suis en train d'accéder à $ _POST:

ob_start(); 
session_start(); 
var_dump($_POST); 
$contents = ob_get_contents(); 
ob_end_clean(); 
echo $contents; 

Mais retourne var_dump ($ _ POST) un tableau vide.

Le déplacement des fonctions ob vers index.php n'a aucun effet.

Si je mets le var_dump ($ _ POST) avant ob_start(), OU si je supprime complètement la mémoire tampon de sortie, le problème disparaît, mais j'ai besoin d'un tampon de sortie. Donc, dans un effort pour traquer le problème, j'ai essayé POSTer les données de formulaire à un test.php:

ob_start(); 
$session_start; 
var_dump($_POST); 
$contents = ob_get_contents(); 
ob_end_clean(); 
echo $contents; 

Et tout va bien affiché. Donc, le problème avec mon fichier. Php semble être qu'il est à la fois inclus, et en utilisant la mise en mémoire tampon de sortie. Voyez-vous un problème avec ma configuration? Pourquoi $ _POST ne peut-il pas être accédé par un script buffer inclus en sortie? Voyez-vous un moyen de résoudre ce problème, ou une alternative? Merci.

EDIT: Un autre facteur possible: Ma balise form HTML est la suivante:

<form action="/" method="POST"> 

J'utilise mod_rewrite pour rediriger que index.php. J'essaie action = "/ index.php" et rien ne change, donc ça ne devrait pas avoir d'importance.

+2

ne vous "include" à l'aide d'URL HTTP au lieu de chemin de système de fichiers? le chemin semble correct mais c'est la raison la plus probable –

+0

Je l'inclue en utilisant un chemin de système de fichiers car il est en dehors de la racine du document (il contient des données sensibles et je ne veux pas qu'il soit accessible publiquement, protégé par .htaccess). –

Répondre

2

J'ai réalisé la cause de mon problème. Ayant supprimé la mise en mémoire tampon de sortie, j'ai regardé de plus près les messages d'erreur et j'ai réalisé que j'avais un en-tête ("Emplacement: ...") dans mon fichier file.php. Je redirais vers un autre script dans lequel j'essayais d'appeler l'information $ _POST. Mais les informations $ _POST ne sont évidemment pas transférées avec une redirection header().

La chose intéressante à ce sujet est que j'ai eu un var_dump ($ _ POST) avant l'appel header(). Et je suppose que la mémoire tampon de sortie a provoqué l'envoi de l'appel header() et donc aucune sortie après celle-ci dans le buffer, car un en-tête ("Location") redirige sans afficher de sortie de script. Est-ce que ça sonne bien?

(répondre à ma propre question à la https://meta.stackexchange.com/questions/12513/should-i-not-answer-my-own-questions)

+2

Cela a du sens. C'est pourquoi je mets toujours un die() après un var_dump pour être sûr de voir la sortie que je veux voir :) –

+1

C'est une bonne idée. Je garderai ça à l'esprit. –