Transmettre une valeur d'un fichier à un autre ?

Transmettre une valeur d'un fichier à un autre ? - PHP - Programmation

Marsh Posté le 23-10-2003 à 19:53:02    

Ca fait un mois que je cherche la solution à ce pb qui devrait être ridiculement simple :(  
 
J'ai une fichier A.php qui produit une valeur X et j'aimerai que cette valeur soit disponnible pour un fichier B.php pendant toute la durée d'une session de connexion.
Il me faut donc tout simplement une variable globale, mais globale au sens d'entre 2 fichiers. Pas entre une partie du code d'un fichier et une fonction dans le même fichier comme on peut le lire dans l'aide php ou la FAQ Developpez.com
 
Alors évidement, vous allez me proposer d'utiliser une variable $_session mais il me faut une autre solution car tout ceci se passe sur un forum phpBB et pour des raisons de conception je ne peux pas éviter que les session_start() soient placés avant les ob_start() ce qui provoque une erreur php...
http://fr3.php.net/manual/fr/funct [...] -start.php
 
Donc la question est simple : comment créer une variable X qui restent accessible le temps d'une connexion par d'autres fichiers php ?
 
Merci beaucoup de votre aide !!!!!!!!!!!!!!! :jap:

Reply

Marsh Posté le 23-10-2003 à 19:53:02   

Reply

Marsh Posté le 23-10-2003 à 20:13:00    

-ET- a écrit :

Ca fait un mois que je cherche la solution à ce pb qui devrait être ridiculement simple :(  
 
J'ai une fichier A.php qui produit une valeur X et j'aimerai que cette valeur soit disponnible pour un fichier B.php pendant toute la durée d'une session de connexion.
Il me faut donc tout simplement une variable globale, mais globale au sens d'entre 2 fichiers. Pas entre une partie du code d'un fichier et une fonction dans le même fichier comme on peut le lire dans l'aide php ou la FAQ Developpez.com
 
Alors évidement, vous allez me proposer d'utiliser une variable $_session mais il me faut une autre solution car tout ceci se passe sur un forum phpBB et pour des raisons de conception je ne peux pas éviter que les session_start() soient placés avant les ob_start() ce qui provoque une erreur php...
http://fr3.php.net/manual/fr/funct [...] -start.php
 
Donc la question est simple : comment créer une variable X qui restent accessible le temps d'une connexion par d'autres fichiers php ?
 
Merci beaucoup de votre aide !!!!!!!!!!!!!!! :jap:  


 
Ben à part gérer tout ceci à la main en utilisant des cookies, je ne vois pas d'autres solutions.

Reply

Marsh Posté le 23-10-2003 à 23:51:40    

Arf... vi dsl, j'ai oublié de dire que je veux éviter les cookies aussi pour rester compatible avec ceux qui désactivent y compris les cookies de session.
 
Donc je cherche bien un système avec une variable globale, superglobale, ou je sais pas comment l'appeler mais ni cookie, ni variable de session :(

Reply

Marsh Posté le 24-10-2003 à 00:09:23    

-ET- a écrit :

Arf... vi dsl, j'ai oublié de dire que je veux éviter les cookies aussi pour rester compatible avec ceux qui désactivent y compris les cookies de session.
 
Donc je cherche bien un système avec une variable globale, superglobale, ou je sais pas comment l'appeler mais ni cookie, ni variable de session :(  


 
Dans tes rêves seulement.
 
Tout ce que tu peux faire à ce moment là, c'est utiliser une BDD pour stoker une variable.

Reply

Marsh Posté le 24-10-2003 à 00:11:28    

De toute façon, il n'y a pas beaucoup de moyens différents :
- conserver l'info sur le serveur (sessions, fichier géré soi même, base de données)
- conserver l'info sur le client (cookie)
- passer l'info de page en page (un peu lourd à gérer)
[:spamafote]

Reply

Marsh Posté le 24-10-2003 à 00:39:16    

Passer l'info par l'url n'est pas possible.
Je ne veux pas transmettre une variable à un fichier ponctuellement, mais renseigner une variable par un fichier qui ne sera exécuté qu'une fois pour la rendre disponnible à tout moment pour un autre fichier qui lui pourra être exécuté 10x ou 100x.
Par ailleur il n'y a pas d'enchaînement entre les deux fichiers (leur exécution ne se suis pas) donc je ne peux rien passer par une url :(
 
Ensuite les cookie c'est désactivable donc tout le code tomberait net.
 
Reste que les variables.
 
Or ce qui m'étonne c'est que j'en vois dans le code phpBB des variables tableaux (array) qui sont utilisés sur plusieurs fichiers.
Comment ils font pour les rendres globaux ?

Reply

Marsh Posté le 24-10-2003 à 00:41:36    

Ils les rechargent peut être a chaque fois.

Reply

Marsh Posté le 24-10-2003 à 00:43:57    

-ET- a écrit :

Passer l'info par l'url n'est pas possible.
Je ne veux pas transmettre une variable à un fichier ponctuellement, mais renseigner une variable par un fichier qui ne sera exécuté qu'une fois pour la rendre disponnible à tout moment pour un autre fichier qui lui pourra être exécuté 10x ou 100x.
Par ailleur il n'y a pas d'enchaînement entre les deux fichiers (leur exécution ne se suis pas) donc je ne peux rien passer par une url :(
 
Ensuite les cookie c'est désactivable donc tout le code tomberait net.
 
Reste que les variables.
 
Or ce qui m'étonne c'est que j'en vois dans le code phpBB des variables tableaux (array) qui sont utilisés sur plusieurs fichiers.Comment ils font pour les rendres globaux ?


 
Comme l'a dit Omega. Ne cherche pas, les variables qui passent de page en page, on t'as déjà énoncé toutes les possibilités. Il n'y en a pas d'autres...

Reply

Marsh Posté le 24-10-2003 à 01:13:55    

Hermes le Messager a écrit :


Dans tes rêves seulement.


Merci du coup de main :jap:  
Heureusement que je me suis pas arrêté à ton premier conseil, les autres ont déjà rajouté la BD, les url, un fichier, recharger la variables, etc.
 

omega2 a écrit :

Ils les rechargent peut être a chaque fois.


Ben peut être mais je vois pas bien comment ils font alors. En tout cas ils ne sont pas rechargés à partir de la BD.
 
Exemple, on trouve un tableau appelé $board_config auquel nombre de fichiers php accèdent.
 
Certains placent un "global $board_config;" avant d'y accéder, et certains fichiers comme page_header.php même pas :(  
 
Par ailleurs, il y a aussi le cas du tableau $GLOBALS
http://www.php.net/manual/fr/reser [...] es.globals
 
Il pourrait pas servir ?

Reply

Marsh Posté le 24-10-2003 à 01:17:38    

-ET- a écrit :


Merci du coup de main :jap:  
Heureusement que je me suis pas arrêté à ton premier conseil, les autres ont déjà rajouté la BD, les url, un fichier, recharger la variables, etc.
 
 


 
Dis-donc toi, tu ne manques pas d'air :
 

Hermes le Messager a écrit :


 
Dans tes rêves seulement.
 
Tout ce que tu peux faire à ce moment là, c'est utiliser une BDD pour stoker une variable.
 


 
Et pour le reste, tu avais déjà dit que tu n'en voulais pas, sinon je te l'aurais proposé.  
 
Mais bon apparemment, tu es têtu comme un âne et tu continues à chercher midi à 14 heures alors qu'on t'as donné toutes les solutions possibles et imaginables...


Message édité par Hermes le Messager le 24-10-2003 à 01:18:51
Reply

Marsh Posté le 24-10-2003 à 01:17:38   

Reply

Marsh Posté le 24-10-2003 à 02:27:08    

-ET- a écrit :


Merci du coup de main :jap:  
Heureusement que je me suis pas arrêté à ton premier conseil, les autres ont déjà rajouté la BD, les url, un fichier, recharger la variables, etc.
 
 
Ben peut être mais je vois pas bien comment ils font alors. En tout cas ils ne sont pas rechargés à partir de la BD.
 
Exemple, on trouve un tableau appelé $board_config auquel nombre de fichiers php accèdent.
 
Certains placent un "global $board_config;" avant d'y accéder, et certains fichiers comme page_header.php même pas :(  
 
Par ailleurs, il y a aussi le cas du tableau $GLOBALS
http://www.php.net/manual/fr/reser [...] es.globals
 
Il pourrait pas servir ?

Heu, t'es sur de bien conaitre php?
Etudies donc le fonctionnement de include, require, include_once, require_once et après, tu poseras moins de questions de débutant qui veulent tout avoir avant d'avoir quoi que ce soit.
Alors révises les bases du language et revient nous voir quand tu les conaitras.
 
Ps : A la fin de l'exécution d'un script php (et pas d'un fichier) TOUTES les variables sont DETRUITES qu'elles soient globales ou pas.

Reply

Marsh Posté le 24-10-2003 à 02:55:22    

Arf...
 
J'ai aucune prétention et si je savais tout je ne poserais pas de question... donc de là à sortir ce genre de réponse :sarcastic:  
Manifestement, on est bien sur HFR, pas de doute.
 
Les variables sont peut être toutes détruites, sauf que jusqu'à preuve du contraire, les "variables" prédéfinies (dsl ça s'appelle comme ça dans la doc php) ne sont pas détruites à la fin de l'exécution d'un script php (dsl pour le fichier à la place de script :sarcastic: )
http://www.php.net/manual/fr/langu [...] efined.php
 
D'ou ma question sur $GLOBALS.
 
Par ailleur, voilà le code de "page_header.php" :

Code :
  1. <?php
  2. /***************************************************************************
  3. *                              page_header.php
  4. *                            -------------------
  5. *   begin                : Saturday, Feb 13, 2001
  6. *   copyright            : (C) 2001 The phpBB Group
  7. *   email                : support@phpbb.com
  8. *
  9. *   $Id: page_header.php,v 1.106.2.20 2003/06/10 20:48:19 acydburn Exp $
  10. *
  11. *
  12. ***************************************************************************/
  13. /***************************************************************************
  14. *
  15. *   This program is free software; you can redistribute it and/or modify
  16. *   it under the terms of the GNU General Public License as published by
  17. *   the Free Software Foundation; either version 2 of the License, or
  18. *   (at your option) any later version.
  19. *
  20. ***************************************************************************/
  21. if ( !defined('IN_PHPBB') )
  22. {
  23. die("Hacking attempt" );
  24. }
  25. define('HEADER_INC', TRUE);
  26. //
  27. // gzip_compression
  28. //
  29. $do_gzip_compress = FALSE;
  30. if ( $board_config['gzip_compress'] )
  31. {
  32. ...


Donc comme tu peux le voir, ce $board_config[] est bien définit ailleurs (en l'occurence dans "common.php" ) et est pourtant accessible de ce script.
Il y a donc bien un mécanisme qui le permet et c'est ce que je cherchais à comprendre dans ce cas précis (même si c'est pas la solution à mon pb).
 
Enfin, vu que vous avez l'air de vous faire plaisir à penser que je vous pose des questions débiles pour le fun alors que même si je ne suis pas un pro mon pb correspond bien à un besoin réel, voilà des infos plus détaillées :
En fait je suis l'auteur d'un MOD pour phpBB qui s'appelle Advanced time management 2.0.0
http://www.phpbb.com/phpBB/viewtopic.php?t=115692
 
Ce MOD sert entre autre à gérer l'heure d'été sur un forum phpBB, mais dispose aussi de 2 modes avancés qui permettent de prendre totalement en charge la gestion des heures du forum en la synchronisant :
- soit sur l'heure du serveur, avec application du fuseau horaire et de l'heure d'été du PC
- soit entièrement sur l'heure locale du PC.
 
Comme vous pouvez le voir, ces 2 modes nécessitent donc de rapatrier au plus vite (dès la première connexion), des infos du PC (en Javascript donc).
 
A partir de là, pour vous expliquer son fonctionnement, je vous donne la version actuelle (via les variables de session)...
 
A chaque affichage d'une page du forum, du code dans le fichier "page_header.php" est chargé de définir s'il y a lieu de récupérer des infos du PC (= si 1ère connexion ou non)...

Code :
  1. global $userdata;
  2. if ( ($userdata['user_id'] != ANONYMOUS && $userdata['user_time_mode'] >= 4) || ($userdata['user_id'] == ANONYMOUS && $board_config['default_time_mode'] >= 4) )
  3. {
  4. @ini_set('arg_separator.output', '&amp;');
  5. session_start();
  6. if ( !isset($_SESSION['pc_timezoneoffset']) && !isset($_POST['pc_timezoneoffset']) )
  7. {
  8.  $template->assign_block_vars('switch_pc_time_data_search', array());
  9. } else
  10. {
  11.  $template->assign_block_vars('switch_no_pc_time_data_search', array());
  12. }
  13. } else
  14. {
  15. $template->assign_block_vars('switch_no_pc_time_data_search', array());
  16. }


Comme vous pouvez le voir, ce code teste si on est sur les modes 5 ou 6 (>=4), et dans ce cas si les infos du PC sont déjà dans la variable de session ou sur le formulaire de la page.
 
Si ça n'est pas le cas, il demande l'exécution du code ci-dessous sur la page à afficher...

Code :
  1. <script language="JavaScript" type="text/javascript">
  2. function pc_time_data() {
  3. var pc_dateTime = new Date()
  4. document.currentForm.pc_timezoneoffset.value = pc_dateTime.getTimezoneOffset();
  5. document.currentForm.pc_date.value = pc_dateTime.getFullYear()*10000 + (pc_dateTime.getMonth()+1)*100 + pc_dateTime.getDate();
  6. document.currentForm.pc_time.value = pc_dateTime.getHours()*3600 + pc_dateTime.getMinutes()*60 + pc_dateTime.getSeconds();
  7. document.currentForm.submit();
  8. }
  9. </script>
  10. </head>
  11. <body bgcolor="{T_BODY_BGCOLOR}" text="{T_BODY_TEXT}" link="{T_BODY_LINK}" vlink="{T_BODY_VLINK}" onload="pc_time_data()">
  12. <IFRAME name="RemoteScripting" width="0" height="0" frameborder="0" src="blank.htm"></IFRAME>
  13. <FORM action="{U_PC_TIME_DATA}" method="post" target="RemoteScripting" id="currentForm" name="currentForm">
  14. <input type="hidden" name="pc_timezoneoffset">
  15. <input type="hidden" name="pc_date">
  16. <input type="hidden" name="pc_time">
  17. </FORM>


Ce code récupère les infos du PC en Javascript, les place dans un tableau caché, et effectue un submit pour les faire passer en remote scripting via une IFRAME à un fichier "pc_time_data.php" qui va les traiter et les stocker pour les rendre disponible pour la fonction qui créer les dates/heures sur phpBB.
 
Tout l'intérêt de ce système réside dans le fait que sans rafraichissement, sans cookie, sans pop-up, sans en passer par les url car on ne sait pas sur quel lien va cliquer l'utilisateur du forum, je peux passer ces infos immédiatement au serveur pour servir à afficher la prochaine page que va demander l'utilisateur.
 
Elles sont donc immédiatement traitées par ce fichier "pc_time_data.php" et stockées dans des variables de session :

Code :
  1. @ini_set('arg_separator.output', '&amp;');
  2. session_start();
  3. $_SESSION['pc_timezoneoffset'] = $_POST['pc_timezoneoffset'];
  4. $server_time = @gmdate(G)*3600 + @gmdate(i)*60 + @gmdate(s);
  5. if ( $_POST["pc_date"] == @gmdate(Ymd) )
  6. {
  7. $_SESSION['pc_time_offset'] = $_POST['pc_time'] - $server_time;
  8. } else
  9. {
  10. $_SESSION['pc_time_offset'] = 86400 - $server_time + $_POST['pc_time'];
  11. }


Enfin, ces infos sont utilisées tout au long de la connexion au forum par la fonction "create_date()" du fichier "functions.php" pour générer les dates/heures à afficher un peu partout sur le forum.
 
Voilà l'exemple du code du mode 5 :

Code :
  1. @ini_set('arg_separator.output', '&amp;');
  2. session_start();
  3. if ( !$_SESSION['pc_timezoneoffset'] )
  4. {
  5. $tzo_sec = $userdata['user_pc_time_offset'];
  6. } else
  7. {
  8. $tzo_sec = $_SESSION['pc_timezoneoffset'] * (-60);
  9. }
  10. return ( !empty($translate) ) ? strtr(@gmdate($format, $gmepoch + $tzo_sec), $translate) : @gmdate($format, $gmepoch + $tzo_sec);


Donc...
Tout ceci, un peu résumé, marche parfaitement, mais... utilise des variables de session et donc nécessite des session_start()
 
Or les session_start() ne peuvent pas être placés avant un éventuel ob_start()
http://fr3.php.net/manual/fr/funct [...] -start.php
 
Or phpBB dispose d'une fonctionnalité de compression GZip qui utilise ob_start(). Et malheureusement, la fonction create_date() est appellée bien avant le code de compression GZip de phpBB contenant l'ob_start() ce qui me génère un message d'erreur.
 
Donc je n'ai de choix que soit d'arriver à détecter si un ob_start() doit être lancé et ne l'a pas encore été pour empêcher les session_start() temporairement (car une fois passé le 1er ob_start() plus de pb), soit de me passer de variables de session :sarcastic:  
 
Or j'ai pas trouvé comment détecter si un 1er ob_start() avait eu lieu ou non (car les ob_get_contents() sont toujours vides car vidés par le code phpBB), donc je me rabat sur la seconde solution : éviter les variables de session.
Pour celà, pc_time_data.php (qui n'est exécuté qu'une fois à l'arrivée sur le forum), doit pouvoir renseigner ces variables qui seront à dispo de page_header.php et functions.php tout au long de la connexion :)


Message édité par -ET- le 24-10-2003 à 02:57:39
Reply

Marsh Posté le 24-10-2003 à 18:00:00    

-ET- a écrit :

"Les variables sont peut être toutes détruites, sauf que jusqu'à preuve du contraire, les "variables" prédéfinies (dsl ça s'appelle comme ça dans la doc php) ne sont pas détruites à la fin de l'exécution d'un script php (dsl pour le fichier à la place de script   )"

Je réponds pas à tout le reste vu que de mon point de vue rien n'a changé mais pour celui là, tu te plantes. Prédéfinis ne veut pas dire "jamais détruite" mais "créé et remplis avant l'exécution de la première ligne d'une page php". Rien ne laisses dire qu'elles sont pas détruite et recréé à chaque exécution d'un script php. Vu que le php peut ussi être créé en CGI, c'est a mon avis ce qui se passe dans tout les cas (en CGI, le programme qui créé les pages php est fermé à la fin de chaque script et relancé pour chaque demande de script php).
 
Au fait, le fichier page_header.php il est appeller comment? Directement par le navigateur? Quand t'auras réfléchis à ça tu comprendra peut être un peu mieux comment les scripts multi fichiers fonctionnent. Et si t'avais regardé les truc que je t'ai indiqué tu resterais pas aussi bloqué sur ton idée. En plus, tu nous demandes notre aide mais dès qu'on te contredit tu nous traites d'abrutis qui se prennent pour des dieux du php qui considérent qu'ils n'ont pas a répondre au petit peuple. Si tu était respectueux on le serait aussi mais dès qu'un truc te convient pas il te faut monter sur tes grand cheveaux et nous traiter d'incapable ou d'abtrutis qui veulent garder pour eux de grands secret.
Je vvais t'apprendre un truc, c'est pas nous qui sommes responsable des petites limitations du php en général et des limitations des programmes fait en php de manière générale.
Toi t'essayes de faire un module a un programme pour lequel t'as pas chercher a comprendre comment il fonctionne. Comment veux tu qu'on puisse te traiter avec respect alors que t'as visiblement aucun respect pour les autres et que tu fais même pas l'effort de comprendre comment fonctionne ce que t'utilises.


Message édité par omega2 le 24-10-2003 à 18:00:51
Reply

Marsh Posté le 24-10-2003 à 18:54:39    

Bon c'est bon j'ai compris, j'arrête de poser des questions ici mais je voudrais juste vous faire remarquer qu'à AUCUN momment je n'ai été d'une quelconque manière méprisant comme vous l'avez été  :(  
Trouve moi une seule citation à la hauteur de vos "Dans tes rêves seulement", "Alors révises les bases du language et revient nous voir quand tu les conaitras.", etc., etc.
 
Encore une fois si je savais tout je ne poserai pas de question et un forum d'aide n'est pas réservé à ceux qui savent tout ; sinon ça n'a plus d'intérêt.
Maintenant c'est un fait que dès la 1ère réponse on m'expliquait déjà qu'il n'y avait qu'une seule alternative et aucune autre, ce qui pour le coup démarrait fort dans les certitudes peu constructives au vue de ce qu'ont pu apporter les autres ensuite (dont toi).
 
Enfin, "Si tu était respectueux on le serait aussi", "monter sur tes grand cheveaux et nous traiter d'incapable ou d'abtrutis qui veulent garder pour eux de grands secret" :??:  
T'en as encore beaucoup des inventions de ce genre ?
Il est ou le manque de respect ? Elles sont où les insultes que tu cites ?
 
C'est vraiment original comme réaction spontannée pour avoir eu le malheur de poser de simples questions.
Si elles te dérangeaient tant que ça il ne fallait pas y répondre, ça aurait été plus simple que de venir expliquer qu'un ignare vous a insulté en posant une question indigne de votre savoir.
 
C'est nul comme attitude :(  
 
P.S. : au passage, merci quand même omega2 j'ai effectivement mieux compris comment fonctionnait les include et pourquoi des variables étaient accessibles d'un script dans lequel elle n'était pas directement définie, mais je pense qu'une simple phrase explicative sans ce dédain méprisant aurait été plus efficace...

Citation :

"Heu, t'es sur de bien conaitre php?  
Etudies donc le fonctionnement de include, require, include_once, require_once et après, tu poseras moins de questions de débutant qui veulent tout avoir avant d'avoir quoi que ce soit.  
Alors révises les bases du language et revient nous voir quand tu les conaitras."


 
Pour faire du support il suffit pas d'être bon. Il faut aussi tout simplement accepter de répondre et apprendre quelque chose à quelqu'un qui part nature ne sait pas et peut donc poser une question stupide pour un pro.
Ca n'enlève rien aux capacités générales de celui qui demande, ni aux possibilités de creuser ensemble toutes les solutions.
 
La preuve quand j'ai commencé ce MOD je n'avais que les cookie pour passer les données Javascript au serveur php avant même l'affichage d'une seconde page, et à force de creuser avec tout un tas de monde à droite et à gauche, après avoir entendu 100x que je cherchais pour rien et que j'étais nul, j'ai fini par disposer aussi d'autres techniques qui marchent parfaitement comme le rafraichissement de la première page vu sur elle même, l'ouverture d'un pop-up avec passage des données par l'url, le remote scripting+iframe, etc.
Comme quoi, même une brune (= moi dans votre esprit) ça peut petit à petit creuser, apprendre et rassempler plusieurs possibilités que je n'aurais jamais pu recueillir si j'avais pris pour parole d'évangile des réponses comme celle d'Hermes le Messager sur son 1er post.
 
Dommage.
 
Bonne continuation :(


Message édité par -ET- le 24-10-2003 à 18:58:06
Reply

Marsh Posté le 24-10-2003 à 19:12:22    

c'est que certaines gens sont frustrées de se faire dire que leurs solutions ne sont pas les bonnes c'a l'air..  :pt1cable:


Message édité par porksoda le 24-10-2003 à 19:13:23
Reply

Marsh Posté le 24-10-2003 à 19:39:46    

-ET- : Juste pour info, je t'ai donnée des pistes dans mon second message et visiblement avant même de vérifier ces pistes là tu viens nous redire que tu comprends pas comment ca marche alors que la solution était dans ce que je t'avais indiqsué.
Et vu l'heure de mon post, t'auras du mal a me faire croire que t'avais pris le temps de vérifier ce que je te disais avvant de poster.
 
Au fait, jsute pour info : ici, on fait pas le boulot a la place des autres on donne les pistes et on leur apprend à chercher par eux même. Mais si les gens qui viennent ne tiennent pas comptes des pistes qu'on leur donne alors on poura pas vraiment les aider.

Reply

Marsh Posté le 24-10-2003 à 19:48:50    

vrai

Reply

Marsh Posté le 24-10-2003 à 20:39:50    

C'est ça le second post ?

Citation :

Heu, t'es sur de bien conaitre php?
Etudies donc le fonctionnement de include, require, include_once, require_once et après, tu poseras moins de questions de débutant qui veulent tout avoir avant d'avoir quoi que ce soit.
Alors révises les bases du language et revient nous voir quand tu les conaitras.


Tu peux m'expliquer quelle mouche te piquait déjà à ce momment là ?
 
Donc je vais me répéter...

Citation :

Au passage, merci quand même omega2 j'ai effectivement mieux compris comment fonctionnait les include et pourquoi des variables étaient accessibles d'un script dans lequel elle n'était pas directement définie, mais je pense qu'une simple phrase explicative sans ce dédain méprisant aurait été plus efficace...  
 
Citation :
--------------------------------------------------------------------------------
"Heu, t'es sur de bien conaitre php?  
Etudies donc le fonctionnement de include, require, include_once, require_once et après, tu poseras moins de questions de débutant qui veulent tout avoir avant d'avoir quoi que ce soit.  
Alors révises les bases du language et revient nous voir quand tu les conaitras."
--------------------------------------------------------------------------------
 
Pour faire du support il suffit pas d'être bon. Il faut aussi tout simplement accepter de répondre et apprendre quelque chose à quelqu'un qui part nature ne sait pas et peut donc poser une question stupide pour un pro.  
Ca n'enlève rien aux capacités générales de celui qui demande, ni aux possibilités de creuser ensemble toutes les solutions.  
 
La preuve quand j'ai commencé ce MOD je n'avais que les cookie pour passer les données Javascript au serveur php avant même l'affichage d'une seconde page, et à force de creuser avec tout un tas de monde à droite et à gauche, après avoir entendu 100x que je cherchais pour rien et que j'étais nul, j'ai fini par disposer aussi d'autres techniques qui marchent parfaitement comme le rafraichissement de la première page vu sur elle même, l'ouverture d'un pop-up avec passage des données par l'url, le remote scripting+iframe, etc.  
Comme quoi, même une brune (= moi dans votre esprit) ça peut petit à petit creuser, apprendre et rassempler plusieurs possibilités que je n'aurais jamais pu recueillir si j'avais pris pour parole d'évangile des réponses comme celle d'Hermes le Messager sur son 1er post.  
 
Dommage.


Message édité par -ET- le 24-10-2003 à 20:40:18
Reply

Marsh Posté le 24-10-2003 à 20:43:28    

"Etudies donc le fonctionnement de include, require, include_once, require_once"
 
Tu voulais quoi ed plus, qu'on te fasses ton programme?

Reply

Marsh Posté le 24-10-2003 à 20:46:17    


 

Citation :

Hermes le Messager a écrit :
 
 
Dans tes rêves seulement.


 
Quand j'ai écrit ça, cela voulait dire : c'est impossible autrement qu'en employant les moyens qu'on t'avais indiqué. C'était pas méprisant...  
 

Citation :

Merci du coup de main    
Heureusement que je me suis pas arrêté à ton premier conseil, les autres ont déjà rajouté la BD, les url, un fichier, recharger la variables, etc.


 
ça par contre, c'est direct en trop. C'est toi qui pose les questions, personne n'est obligé de te répondre, et c'est surement pas à nous de faire "des efforts".
 

Citation :

omega2 a écrit :
 
Ils les rechargent peut être a chaque fois.

 
 

Citation :

Ben peut être mais je vois pas bien comment ils font alors. En tout cas ils ne sont pas rechargés à partir de la BD.
 
Exemple, on trouve un tableau appelé $board_config auquel nombre de fichiers php accèdent.
 
Certains placent un "global $board_config;" avant d'y accéder, et certains fichiers comme page_header.php même pas    
 
Par ailleurs, il y a aussi le cas du tableau $GLOBALS
http://www.php.net/manual/fr/reser [...] es.globals
 
Il pourrait pas servir ?


 
Là, tu nous prends vraiment pour des cons. Ya 3 personnes déjà qui t'ont dit que c'est impossible, mais toi tu continues...
 
Au fait : PHPBB est un forum codé avec les pieds et une véritable usine à gaz juste comme ça, dit en passant... Je ne compte plus les mecs qui viennent ici régulièrement pour nous faire chier avec des critical errors et autres joyeuseté.
 
On a fait l'effort de te répondre alors que si tu avais été franc : "je voudrais modifier un phpbb..." personne ne t'aurais répondu parce que c'est hors charte.
 
Tout ça pour dire qu'on est bien sympa je trouve moi...

Reply

Marsh Posté le 26-10-2003 à 00:38:26    

Tu dis que si tu mets un "session_start()" ca cree une erreur en php lorsque ob_start() a ete utilise ... Mais arrete moi si je me trompe, mais phpbb ne se base-t-il pas deja sur des sessions ??
Si tu nous indiquais l'erreur on pourrait peut-etre t'aider ..  
 
Car si comme je le pense tu rajoutes un "2e" (la 1ere c'est celle de phpbb) session_start, php va pas etre content et te donner un msg du style "Cannot start another session, plz close session before starting another".
 
 
Ensuite il est clair que tu n'es pas au clair avec les variables globales, quand tu dis :

Citation :


Certains placent un "global $board_config;" avant d'y accéder, et certains fichiers comme page_header.php même pas :(  


Comme dit precedement regarde comment fonctionne "require, include...". Certains font reference au fichier (donc tu dois utiliser global afin de "declarer" ta variable et ainsi pouvoir l'utiliser), alors que d'autres incluent le fichier, donc pas besoin de "global", puisque la variable est "virtuellement" la (etant donne que le fichier a ete inclus la variable a deja ete declaree avant).
 
Donc :
1) Utilise la session deja cree par phpbb au lieu de vouloir en creer une 2e.
2) Revise un peu les bases, cela t'aideras a mieux comprendre le fonctionnement de php, je te conseille de faire des tests avec des petits fichiers php.


Message édité par cerel le 26-10-2003 à 00:40:26
Reply

Marsh Posté le 26-10-2003 à 02:53:36    

Cerel a écrit :

Tu dis que si tu mets un "session_start()" ca cree une erreur en php lorsque ob_start() a ete utilise ... Mais arrete moi si je me trompe, mais phpbb ne se base-t-il pas deja sur des sessions ??
Si tu nous indiquais l'erreur on pourrait peut-etre t'aider ..  


Pas exactement.
 
Je dis (comme c'est d'ailleurs écrit noir sur blanc dans la doc php à la page dont j'ai déjà mis le lien 2x et que je remets ci-dessous), que quand une instruction session_start() est placée avant une ob_start(), oui cela crée (pour être précis) une "alerte php".

Code :
  1. Warning:  ob_start(): output handler 'ob_gzhandler' cannot be used after 'URL-Rewriter' in...


http://fr3.php.net/manual/fr/funct [...] -start.php
 
Par ailleurs, non phpBB n'utilise pas d'instruction php session_start().
Fais une recherche sur tout le code phpBB et tu n'en trouveras pas.
Ils utilisent un système de session géré dans une table de leur base de données (mais je reconnais humblement que je ne suis pas capable de t'en dire plus). Si je savais comment me rattacher à leur système, ça simplifierait peut être tout.
 

Cerel a écrit :

Ensuite il est clair que tu n'es pas au clair avec les variables globales, quand tu dis :

Citation :


Certains placent un "global $board_config;" avant d'y accéder, et certains fichiers comme page_header.php même pas :(  


Comme dit precedement regarde comment fonctionne "require, include..."...


Une fois de plus, je n'ai MOI jamais eu la prétention de tout savoir, bien au contraire. Sinon je ne serais jamais venu ici poser une question pour en prendre plein la gueule quoi qu'en dise les protagonistes.
 
Par ailleurs OUI je méconnaissais (et méconnaît certainement encore - on ne peut jamais tout savoir) le fonctionnement des "variables globales" php, et OUI le conseil d'omega2 était intéressant pour moi, et OUI enfin j'ai compris comment page_header.php pouvait lire le contenu de $board_config sans que cette variable ait été définie dans ce script. Mais là je me répète.
Tout ça est du passé et une somme d'évidence que je n'ai jamais caché mais au contraire déjà écrit.
 
Donc sur le fond affaire classée depuis un certain temps ; et sur la forme comme je l'ai aussi déjà dis, OUI il y avait un conseil intéressant dans ses propos. Dommage qu'il ait été noyé au milieu d'un flot d'ironie et de mépris.
Point.
 

Cerel a écrit :

1) Utilise la session deja cree par phpbb au lieu de vouloir en creer une 2e.
2) Revise un peu les bases, cela t'aideras a mieux comprendre le fonctionnement de php, je te conseille de faire des tests avec des petits fichiers php.


Merci de tes conseils, mais voilà mes commentaires :
(je commence par le 2, dsl) 2) "Revise un peu les bases..." > sympa tu t'y mets aussi :sarcastic:  
1) Revise phpBB...

Cerel a écrit :

tu n'es pas au clair avec

...son système de session ;)  
 
Trêve de plaisanterie.
Le meilleur conseil pour moi est : évite de revenir sur Hardware.fr !
C'est pas pour toi t'es une burne.
 
P.S. 1 : alors, solutions alternatives : utiliser un test sur "ob_get_level()" pour vérifier si le 1er "ob_start()" a bien été effectué ou pas encore (et ainsi pouvoir ne pas exécuter de session_start() en attendant - valable qu'à partir de php 4.2.0), placer un @ devant "ob_start()" car au final il ne s'agit que d'une alerte (et non pas d'une erreur) sans conséquence qui disparaît même dès le 1er "ob_start()" effectué, etc., etc. mais là je deviendrais insultant d'oser imaginer qu'on ait pu creuser hors des évidences des premiers posts...
P.S. 2 : merci encore à omega2 pour son conseil judicieux, et à ceux qui ont bien voulu m'aider sans mépris :jap:


Message édité par -ET- le 26-10-2003 à 02:58:31
Reply

Marsh Posté le 26-10-2003 à 02:24:05    

Bon, effectivement phpbb n'utilise pas de session_start, je n'ai faits qu'emetre une hypothese sans regarder le code de phpbb.
 
Je viens de rapidement regarder le code de phpbb, je pense que ta meilleure solution serait de te grefer sur leur systeme de sessions. Ce que tu peux remarquer c'est l'utilisation (dans includes/sessions.php) d'un tableau $sessiondata.
Si je me trompe pas ce tableau contient les donnees de la session (logique) et est entierement sauvegarde complement. Ce qui veut dire que tu pourrais en theorie simplement ajouter des donnees dedans pour qu'elles soient sauvegardees.
 
Je vais de ce pas installer phpbb et faire 2-3 tests.
Il faut notament que je regarde comment les donnees de la sessions sont sauvegardees.

Reply

Marsh Posté le 26-10-2003 à 02:39:31    

Cerel a écrit :

je pense que ta meilleure solution serait de te grefer sur leur systeme de sessions.


C'est clair.
C'est l'objet d'une question de ma part depuis 1 mois sur le site phpBB.com :sarcastic:  
http://www.phpbb.com/phpBB/viewtopic.php?t=138745
 

Cerel a écrit :

Ce que tu peux remarquer c'est l'utilisation (dans includes/sessions.php) d'un tableau $sessiondata.
Si je me trompe pas ce tableau contient les donnees de la session (logique) et est entierement sauvegarde complement. Ce qui veut dire que tu pourrais en theorie simplement ajouter des donnees dedans pour qu'elles soient sauvegardees.
 
Je vais de ce pas installer phpbb et faire 2-3 tests.
Il faut notament que je regarde comment les donnees de la sessions sont sauvegardees.


Je vais regarder tout ça de prêt tout de suite, et si effectivement tu as raison, tu m'auras enfin trouvé la solution pour utiliser leurs sessions et je t'en serais sacrément reconnaissant !
 
Un mec au tout début m'a beaucoup aidé en Javascript sur Hardware.fr (Mara's dad) et depuis c'est la seule personne qui est très sincèrement remerciée dans le MOD. Si la piste que tu viens de me donner est la bonne, je serais ravi que tu sois le second car ça fait longtemps (qu'avec mes modestes connaissances) je cherche la solution :)

Reply

Marsh Posté le 26-10-2003 à 02:50:24    

Bon regarde du cote du tableau $userdata, et non $sessiondata.
$sessiondata n'est utilise que ds les fonctions de session, en gros c'est une var locale, mais par contre $userdata est globale.
 
Je continue de regarder cela, mais il y a tjrs un petit detail qui me chifone... :/

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed