2012-02-08 1 views
1

Normalement, j'essaie de formater ma question comme une question de base, puis d'expliquer ma situation, mais la solution que je cherche est peut-être la mauvaise. , donc voici le problème:PHP Obtenir des cookies par ID de session (ou transmettre des données entre deux connexions différentes)

Je construis une application de catalogue pour un site d'enchères qui a la capacité d'enregistrer des lots individuels. Jusqu'à présent, cela a beaucoup travaillé en créant simplement un cookie avec une liste séparée par des virgules des ID pour ces lots, par quelque chose comme ceci:

$_COOKIE["MyLots_$AuctionId"] = implode(",",$arrayOfIds); 

Le problème que je frappe maintenant est que quand je vais imprimer la beaucoup, j'utilise wkhtmltopdf par la ligne de commande pour demander l'URL de l'impression que je veux, comme ceci:

exec("wkhtmltopdf '$urlofmylots' filename.pdf"); 

le problème est que je ne peux pas passer un cookie à cet appel, parce que voit Apache une requête interne, pas la requête de l'utilisateur. J'ai essayé de le mettre dans la chaîne get, mais une fois que j'ai plus d'une limite prédéfinie pour les paramètres GET, cette valeur disparaît du tableau $ _GET sur l'URL cible. Je n'arrive pas à trouver un moyen d'envoyer des données POST entre eux. Mes prochaines idées possibles sont les suivantes:

  1. Peut-être juste passer le idSession à l'URL, et voir s'il y a une façon que je peux utiliser PHP pour creuser à travers les témoins pour cette session et tirez le cookie droit, mais cela semble être dangereux pour la sécurité d'un serveur PHP (laisser une session en prendre connaissance). Exemple:

    exec("wkhtmltopdf '$urlofmylots?sessionId=$sessionIdFromThisRequest' filename.pdf"); 
    
  2. Peut-être définir une variable de session, puis passer cette session Id, et voir si je peux utiliser PHP pour patauger dans cette information au lieu (plutôt que d'utiliser le cookie). Est-ce que je pourrais simplement créer un tableau et en quelque sorte avoir cet autre script en être conscient, peut-être en l'incluant? Cela ne résout pas vraiment le problème de wkhtmltopdf qui attend une adresse Web comme premier paramètre. (Pas vraiment une idée, mais un raisonnement) Dans d'autres cas d'utilisation, je viens de passer un identifiant au script qui génère le balisage pour wkhtmltopdf à analyser, et le script utilise cet ID pour obtenir des données de la base de données. Je ne veux pas stocker ces données dans un fichier ou dans la base de données dans le simple but de transférer des données de l'appelant à l'appelé dans ce cas. Les cookies et les sessions semblent plus propres car apache/php gère l'allocation de mémoire pour ces sessions.

Le problème ultime est ici que je suis en train d'obtenir mon second script (référencé ici par urlofmylots $) pour être au courant des données disponibles au script d'appel, mais il est en cours d'exécution comme si elle était un Web externe demande, pas deux scripts PHP appelés à partir de la racine web.

Quelqu'un peut-il offrir un aperçu ici?

+2

Vous semblez être un peu confus au sujet du comportement d'Apache par rapport à PHP. C'est PHP qui gère toutes les informations relatives à la session - les cookies, les fichiers de données, les identifiants de session, etc. sont tous internes à PHP et distincts d'Apache. Apache gère le trafic réseau de la couche applicative (réception/envoi de la requête/réponse HTTP) et transmet tout ce qui concerne le traitement du contenu et des valeurs vers PHP.Je sais que cela ne vous aide pas vraiment, mais vous mentionnez régulièrement Apache dans des endroits inappropriés dans la question et cela le rend plus confus. – DaveRandom

+0

Ha! Bien que cela ne m'aide pas vraiment, je comprends votre point de vue, et j'étais confus au sujet de ce que j'essayais de dire. Laissez-moi revenir en arrière et l'éditer pour clarifier. – NateDSaint

+0

Je l'ai édité pour clarifier ce que je voulais dire. Faites-moi savoir si c'est plus clair. – NateDSaint

Répondre

1

Vous pouvez envisager de rendre la sortie de $urlofmylots?lots=$lots_to_print vers un fichier temporaire et d'exécuter wkhtmltopdf sur ce fichier.

+0

Je n'avais pas réalisé que je pouvais utiliser un chemin de fichier html local. Je vais essayer ceci, car cela ajouterait aussi l'avantage d'éliminer une requête de serveur. – NateDSaint

+1

Si vous voulez capturer facilement la sortie de votre script dans un fichier, depuis PHP lui-même, consultez [Output Control Functions] (http://www.php.net/manual/fr/ref.outcontrol.php). 'ob_start()' commencera à capturer la sortie, '$ output = ob_get_clean()' prendra tout ce qui allait être envoyé au navigateur et le stockera dans une variable. Ensuite, faites ce que vous voulez avec la variable. – Leigh

+0

En fin de compte, j'utilise une classe pour construire tout mon code html et ensuite l'écho tout à la fois, donc il devrait être relativement facile de simplement écrire cela dans un fichier plutôt que d'en faire un écho. Pourquoi je n'y ai pas pensé avant que je n'ai aucune idée. Voilà pourquoi j'aime SO. – NateDSaint

Questions connexes