Annonces
Question aléatoire
Livre d'or

Par Andredrea

Très satisfaite de la communauté, jamais vu un forum aussi réactif (des aides à 4h00 du matin). Vraiment, bravo l'équipe.

Livre d'or

Mini sondage
Etes-vous satisfait du support PHPBoost ?










Résultats

 
   Le 25/03/11 à 10h41 Citer      

Booster Fuzil

Groupe: Membre

Sexe:
Inscrit le: 15/03/11
Messages: 87
Lieu: Belgique
Salut!

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



Edité par Darth Le 25/03/11 à 14h27

pm    
   Le 25/03/11 à 10h50 Citer      

Administrateur

Chef de projet
Développement Noyau

Sexe:
Inscrit le: 27/02/09
Messages: 7980
Lieu: Alsace
Bonjour et bienvenu à toi !

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)



Edité par ReidLos Le 25/03/11 à 11h07

pm http://www.phpboost.com    
   Le 25/03/11 à 10h54 Citer      

Booster Fuzil

Groupe: Membre

Sexe:
Inscrit le: 15/03/11
Messages: 87
Lieu: Belgique
même en faisant cela l'erreur est la même

(merci pour le begin, je croyais que cela ne fonctionnait que lorsque l'on lançait l'application depuis un navigateur web).

pm    
   Le 25/03/11 à 10h55 Citer      

Administrateur

Chef de projet
Développement Noyau

Sexe:
Inscrit le: 27/02/09
Messages: 7980
Lieu: Alsace
Citation:
$row $Sql->query_array("comExt_function_list","function_name","function_location", "WHERE function_id = tes001 ",__LINE__, __FILE__);


$row
=
$Sql ...

pm http://www.phpboost.com    
   Le 25/03/11 à 11h57 Citer      

Booster Fuzil

Groupe: Membre

Sexe:
Inscrit le: 15/03/11
Messages: 87
Lieu: Belgique
oui ca j'avais vu :p

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?

pm    
   Le 25/03/11 à 12h00 Citer      

Administrateur

Chef de projet
Développement Noyau

Sexe:
Inscrit le: 27/02/09
Messages: 7980
Lieu: Alsace
Montre moi tout ton code.

pm http://www.phpboost.com    
   Le 25/03/11 à 12h06 Citer      

Booster Fuzil

Groupe: Membre

Sexe:
Inscrit le: 15/03/11
Messages: 87
Lieu: Belgique
serveur.php
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 \0 
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).




pm    
   Le 25/03/11 à 12h11 Citer      

Administrateur

Chef de projet
Développement Noyau

Sexe:
Inscrit le: 27/02/09
Messages: 7980
Lieu: Alsace
Ta fonction :
Code PHP :
  1. function find_id($id)
  2. {
  3. global $Sql;
  4. $row = $Sql->query("SELECT function_name FROM phpboost_comExt_function_list WHERE function_id = tes001",__LINE__,__FILE__);
  5.  
  6. $function_path[0] = $row['function_name'];
  7. $function_path[1] = $row['function_location'];
  8. return $function_path;
  9. }


Ton start_server.php :

Code PHP :
  1.  
  2. require_once('../kernel/begin.php');
  3. include ('serveur.php');
  4. include ('conf.php');
  5.  
  6. // Autorise l'exécution infinie du script, en attente de connexion.
  7. set_time_limit(0);
  8.  
  9. $serv=new Server();
  10. $serv->start_server($address,$port,$stop);
  11.  

pm http://www.phpboost.com    
   Le 25/03/11 à 12h45 Citer      

Booster Fuzil

Groupe: Membre

Sexe:
Inscrit le: 15/03/11
Messages: 87
Lieu: Belgique
J'avoue ne pas avoir penser à le faire là.

Merci :)

pm    
   Le 25/03/11 à 12h51 Citer      

Administrateur

Chef de projet
Développement Noyau

Sexe:
Inscrit le: 27/02/09
Messages: 7980
Lieu: Alsace
Met le sujet en réglé si c'est le cas et n'hésite pas à poster si tu as d'autres questions :)

pm http://www.phpboost.com    
   Le 25/03/11 à 15h43 Citer      

Booster Fuzil

Groupe: Membre

Sexe:
Inscrit le: 15/03/11
Messages: 87
Lieu: Belgique
c'est fait.

merci beaucoup :)

pm    
1 Utilisateur en ligne :: 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
Utilisateur en ligne: Aucun membre connecté
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie
Annonces