valeur des variables _LINE_ et _FILE_ [Réglé]
Darth Membre non connecté
Booster Fuzil
-
Booster Fuzil
- Voir le profil du membre Darth
- Inscrit le : 15/03/2011
Je suis en train de développer un module pour permettre l'utilisation d'une partie de la plateforme via les socket.
Ça marche assez bien, mais j'ai un soucis au niveau des requêtes sql, j'arrive à instancier mon propre $Sql en faisant un include de "kernel/framework/db/mysql.class.php", mais apparemment les variables _line et _file_ sont instanciées ailleurs.
Le soucis c'est que je ne lance pas phpboost depuis un navigateur, du coup je ne peux pas les récupérer directement.
Sont-elle des variables dynamiques ou sont-elles fixes?
Est-il possible de connaitre ses valeurs ou de savoir comment les générer?
juste au cas où, voici la fonction :
Code PHP :
function find_id($id) { include_once('../../kernel/framework/db/mysql.class.php'); $Sql = new Sql ( ); $row $Sql->query_array("comExt_function_list","function_name","function_location", "WHERE function_id = tes001 ",__LINE__, __FILE__); $function_path[0] = $row['function_name']; $function_path[1] = $row['function_location']; return $function_path; }
et voici l'erreur que je recois :
Code TEXT :
Parse error: syntax error, unexpected T_VARIABLE in /home/jail/home/elearning/website/comExt/server/serveur.php on line 98
la ligne 98 étant celle de la requête.
Merci d'avance,
Darth
Édité par Darth Le 25/03/2011 à 13h27
ReidLos Membre non connecté
-
Modérateur
- Voir le profil du membre ReidLos
- Inscrit le : 27/02/2009
- Site internet
- Groupes :
-
Equipe Développement
Dans la 3.0 la classe SQL est instancié dans le /kernel/begin.php il est donc inutile de refaire une instance de cette classe.
Supprime donc la ligne
$Sql = new Sql ();
En revanche il faudra mettre un
global $Sql;au début de ta fonction.
Concernant
__LINE__ et __FILE__ elle renvoi le fichier et la ligne. Cela permet d'afficher précisément l'endroit ou tu pourra avoir une erreur avec une requête. (Ce sont des constantes magiques)
Édité par ReidLos Le 25/03/2011 à 10h07
Darth Membre non connecté
Booster Fuzil
-
Booster Fuzil
- Voir le profil du membre Darth
- Inscrit le : 15/03/2011
(merci pour le begin, je croyais que cela ne fonctionnait que lorsque l'on lançait l'application depuis un navigateur web).
ReidLos Membre non connecté
-
Modérateur
- Voir le profil du membre ReidLos
- Inscrit le : 27/02/2009
- Site internet
- Groupes :
-
Equipe Développement
Citation :
$row $Sql->query_array("comExt_function_list","function_name","function_location", "WHERE function_id = tes001 ",__LINE__, __FILE__);
$row
= $Sql ...
Darth Membre non connecté
Booster Fuzil
-
Booster Fuzil
- Voir le profil du membre Darth
- Inscrit le : 15/03/2011

En fait le soucis venait d'une variable qui ne passait pas bien à l'appel de la fonction.
mais j'ai toujours un soucis, si j'utilise begin.php il me met plein d'erreurs liées à l'environnement phpboost (que je n'utilise pas dans ce cas vu que cette page n'est pas instanciée via phpboost).
les erreurs en utilisant le begin :
Code TEXT :
Warning: Cannot modify header information - headers already sent by (output started at /home/jail/home/elearning/website/comExt/server/serveur.php:48) in /home/jail/home/elearning/website/kernel/begin.php on line 41 Warning: Cannot modify header information - headers already sent by (output started at /home/jail/home/elearning/website/comExt/server/serveur.php:48) in /home/jail/home/elearning/website/kernel/begin.php on line 42 Warning: Cannot modify header information - headers already sent by (output started at /home/jail/home/elearning/website/comExt/server/serveur.php:48) in /home/jail/home/elearning/website/kernel/begin.php on line 43 Warning: require_once(../kernel/framework/util/bench.class.php) [function.require-once]: failed to open stream: No such file or directory in /home/jail/home/elearning/website/kernel/begin.php on line 46 Fatal error: require_once() [function.require]: Failed opening required '../kernel/framework/util/bench.class.php' (include_path='.:/usr/share/php:/usr/share/pear') in /home/jail/home/elearning/website/kernel/begin.php on line 46
Du coup j'instancie mon propre $Sql et là j'obtient comme erreur:
Code TEXT :
Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /home/jail/home/elearning/website/kernel/framework/db/mysql.class.php on line 158 Fatal error: Call to a member function handler() on a non-object in /home/jail/home/elearning/website/kernel/framework/db/mysql.class.php on line 704
cette erreur est la même si je fais un $Sql->query ou un query->array.
Code PHP :
$row = $Sql->query ("SELECT function_name FROM phpboost_comExt_function_list WHERE function_id = tes001",__LINE__,__FILE__); echo $row;
le soucis je crois c'est que je veux juste récupérer la config et la classe sql afin de profiter du multi-sgbd et de ne pas devoir refaire un fichier de config.
Maintenant sql prend-elle directement les infos de connexion dans un fichier de config ou alors les récupère-elle via l'application?
Encore une fois je ne lance pas l'application phpboost pour utiliser ce scrip, je crois que mon soucis viendrait de là non?
ReidLos Membre non connecté
-
Modérateur
- Voir le profil du membre ReidLos
- Inscrit le : 27/02/2009
- Site internet
- Groupes :
-
Equipe Développement
Darth Membre non connecté
Booster Fuzil
-
Booster Fuzil
- Voir le profil du membre Darth
- Inscrit le : 15/03/2011
Code PHP :
<?php class Server{ //##### Variables ##### var $address; var $port; var $sock; var $client; var $clients = array(); var $input; //##### Functions ##### //Démarage du serveur (fonction principale) function start_server($address,$port,$stop) { // création d'une socket vide $this->sock = socket_create(AF_INET, SOCK_STREAM, 0) or die ("Création de la socket ne fonctionne pas"); // on prépare la socket pour l'écoute. socket_bind ($this->sock, $address, $port) or die ("Binding marche pas n"); //on prépare le serveur à l'écoute socket_listen($this->sock,SOMAXCONN) or die ("Listen fail"); //on lance la boucle infinie pour l'écoute. /* while (true) { */ //on attend une nouvelle connexion d'un client que l'on stocke dans $client $this->client = socket_accept($this->sock); //lecture du contenu de la socket et division de celle-ci dans un tableau. $in = $this->read_sock(); $this->input = explode('#|@',$in); if ($this->input[0] == $stop) { $this->server_stop(); } else { echo $this->input[0]; echo $this->input[1]; echo $this->input[2]; // echo 'le serveur stoppe depuis un message recu'; $function_path=$this->find_id($this->input[1]); include_once ($function_path['func_loc']); $function_path['func_name']($input[2]); $this->server_stop(); } /* } */ }//fin de la fonction du serveur. //fonction de lecture de la trame jusqu'au function read_sock() //fonction ok { $string = ' '; while(true) { if (($c = socket_read($this->client,1)) == true ) { $string = $string.$c; } else {break;} } $len = strlen($string); $string= substr($string,0,($len-1)); return $string; } //fontion de fermeture du serveur. function server_stop() { echo 'le serveur stoppe depuis la fonction de stop'; socket_close($this->sock); die(); } //recherche de la fonction correspondant à l'id function find_id($id) { // include_once('../../kernel/framework/db/mysql.class.php'); include_once('../../kernel/begin.php'); // $Sql = new Sql(); global $Sql; //$row = $Sql->query_array("phpboost_comExt_function_list","function_name","function_location", "WHERE function_id = tes001 ",__LINE__, __FILE__); $row = $Sql->query ("SELECT function_name FROM phpboost_comExt_function_list WHERE function_id = tes001",__LINE__,__FILE__); echo $row; // $function_path[0] = $row['function_name']; // $function_path[1] = $row['function_location']; return $function_path; } }//fin de la classe ?>
la page qui appelle cette classe est start_server.php
Code PHP :
<?php include ('serveur.php'); include ('conf.php'); // Autorise l'exécution infinie du script, en attente de connexion. set_time_limit(0); $serv=new Server(); $serv->start_server($address,$port,$stop); ?>
et cette page est lancée comme un script sur le serveur via la commande (qui lance le scipt start_server.php depuis une page web :
Code PHP :
passthru("/usr/bin/php /home/jail/home/elearning/website/comExt/server/start_server.php >/dev/null & ") ;
j'ai éventuellement penser à sérialiser l'objet SQL via du xml (ce que je fais déjà pour une autre partie du projet).
ReidLos Membre non connecté
-
Modérateur
- Voir le profil du membre ReidLos
- Inscrit le : 27/02/2009
- Site internet
- Groupes :
-
Equipe Développement
Code PHP :
function find_id($id) { global $Sql; $row = $Sql->query("SELECT function_name FROM phpboost_comExt_function_list WHERE function_id = tes001",__LINE__,__FILE__); $function_path[0] = $row['function_name']; $function_path[1] = $row['function_location']; return $function_path; }
Ton start_server.php :
Code PHP :
<?php require_once('../kernel/begin.php'); include ('serveur.php'); include ('conf.php'); // Autorise l'exécution infinie du script, en attente de connexion. $serv=new Server(); $serv->start_server($address,$port,$stop); ?>
Darth Membre non connecté
Booster Fuzil
-
Booster Fuzil
- Voir le profil du membre Darth
- Inscrit le : 15/03/2011
Merci
ReidLos Membre non connecté
-
Modérateur
- Voir le profil du membre ReidLos
- Inscrit le : 27/02/2009
- Site internet
- Groupes :
-
Equipe Développement
Darth Membre non connecté
Booster Fuzil
-
Booster Fuzil
- Voir le profil du membre Darth
- Inscrit le : 15/03/2011
merci beaucoup
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie