2009-11-10 5 views
1

J'ai écrit un script PHP qui doit effectuer un fork et effectuer un traitement en parallèle, puis la page principale retourne les données après le traitement. J'utilise actuellement les fonctions de pcntl pour faire ceci. J'ai besoin d'exécuter entre 2 et 10 threads pour travailler en parallèle, et je dois attendre jusqu'à ce que j'obtienne un résultat de tous les threads avant que le script ne sorte dans le navigateur.Comment puis-je empêcher les en-têtes en double lorsqu'il s'agit de threads en PHP?

Malheureusement, je trouve que j'ai plusieurs en-têtes « Content-Type » apparaissant dans la sortie:

Content-Type: text/plain 

Content-Type: text/plain 

Content-Type: text/plain 
[... actual content ...] 

Il semble être un en-tête par thread a donné naissance. J'ai essayé de fermer STDOUT via fclose(STDOUT) avant le traitement, et j'ai essayé d'entourer tout par tampon de sortie en vain. Je n'ai encore trouvé personne d'autre avec ce problème, donc personne n'essaie de le faire ou je fais quelque chose qui sort des sentiers battus.

Je suis vraiment à la recherche de l'un ou l'autre moyen d'arrêter cela, ou des suggestions sur d'autres façons d'y arriver.

Le serveur est configuré pour utiliser PHP comme CGI sous mod_suPHP, si cela fait une différence.

+0

Je ne peux rien vous dire d'utile sans un échantillon de code correct – Kris

+0

Si une clé d'en-tête existe, elle sera écrasée, à mon avis. – powtac

+0

Je crois que le forking de l'intérieur d'Apache est un non-non. Lancer un nouveau processus via exec, et avoir * that * une fourchette. –

Répondre

0

Avez-vous essayé les variables de session? Vous pouvez définir une variable de session dans chacun des scripts lorsqu'ils sont complets/réussis, puis vérifiez/attendez pour voir s'ils sont complets/réussis dans votre processus principal.

Questions connexes