Module et exécution de code PHP
LIkaos Membre non connecté
Booster Fronde
-
Booster Fronde
- Voir le profil du membre LIkaos
- Inscrit le : 30/12/2012
- Site internet
J'aimerais exécuter du php dans des modules de contenu, afin de simplement vérifier certaines choses (serveur up, nombre de joueurs etc..), j'ai déjà crée des pages personnalisées pour faire mes requête, mais cette fois ci j'aimerais utiliser la flexibilité des modules pour afficher mes informations dans des blocs.
Est-ce possible sans devoir créer un module dédié ?
url du site pour voir le but (module de droite état des serveurs).
http://minekahest.fr
Merci.
ElenWii Membre non connecté
-
Administrateur
- Voir le profil du membre ElenWii
- Inscrit le : 14/08/2009
- Site internet
- Groupes :
-
Equipe Graphique
de mémoire le php n'est pas accepté dans les modules de contenu pour des raisons de sécurité.
ElenWii
j1.seth Membre non connecté
-
Administrateur
- Voir le profil du membre j1.seth
- Inscrit le : 01/09/2008
- Site internet
- Groupes :
-
Chef de Projet
-
Equipe Développement
Je ne vois pas trop le but. Le module état des serveurs existe déjà et tu t'en es servi. Si tu souhaites apporter des modifications dans le php, fais le directement dans le code du module
Teki Membre non connecté
Booster Mortier
-
Booster Mortier
- Voir le profil du membre Teki
- Inscrit le : 17/02/2013
dans le dossier 'menus' à la racine de PBT, créé un fichier 'mon_menu.php'.
Dedans, ajoute ceci :
Code PHP :
<?php function menu_mon_menu_mon_menu($position, $block) { global $Sql; // Si tu souhaites accèder à la BDD $tpl = new FileTemplate('menus/templates/mon_menu.tpl'); // Si tu utilises un template MenuService::assign_positions_conditions($tpl, $block); // Ton code return $tpl->render(); } ?>
Si tu souhaites utiliser un TPL, créé un dossier 'templates' dans ce dossier 'menus', et met y le fichier .tpl
Ton menu sera ensuite directement visible dans l'administration.
"Je suis un mec simple, y'a pas plus compliqué que moi"
LIkaos Membre non connecté
Booster Fronde
-
Booster Fronde
- Voir le profil du membre LIkaos
- Inscrit le : 30/12/2012
- Site internet
julienseth78 je ne suis pas spécialiste dans le php c'est pour ça que je voulais juste un bloc simple pour rajouter 2-3 requêtes et afficher des informations sur les serveurs, ton module m'affiche bien le up/down du port sur l'host mais j'ai besoin d'autre choses.
J'ai bien le code php pour tester ces éléments et je compte le rajouter, d'où ma question
, si je n'arrive pas autrement je partirais sur la modification de ton module, c'est déjà ce que je fais d'ailleurs.Teki-Latex, j'ai posé ce fichier mais là on parle bien de module ?
Parce que sans template je n'ai rien qui apparait, ou alors je m'y prend mal, ou je ne sais pas chercher
, je veux vraiment juste un block vierge dans lequel je peux écrire du php, je pensais que c'était plus "simple" mais je pense que je vais partir sur un module existant pour ces question de template.Merci encore.
Édité par LIkaos Le 29/09/2013 à 11h37
j1.seth Membre non connecté
-
Administrateur
- Voir le profil du membre j1.seth
- Inscrit le : 01/09/2008
- Site internet
- Groupes :
-
Chef de Projet
-
Equipe Développement
LIkaos Membre non connecté
Booster Fronde
-
Booster Fronde
- Voir le profil du membre LIkaos
- Inscrit le : 30/12/2012
- Site internet
Ce que je veux maintenant c'est rajouter des réponses à la suite du nom, exemple (monde I (nombre_de_joueurs)/), l'idéale étant que je contrôle totalement l'affichage dans la box, au lieu de mettre monde I II III etc...
Je pourrais mettre directement le nom du monde (soit en demandant au serveur, soit en faisant une requête SQL).
Edit: faudrait que j'extend l'abstractserverstatus et que je rajoute les fonctions qui m'intéressent, je dois pouvoir m'en sortir comme ça non ?
Édité par LIkaos Le 29/09/2013 à 12h13
j1.seth Membre non connecté
-
Administrateur
- Voir le profil du membre j1.seth
- Inscrit le : 01/09/2008
- Site internet
- Groupes :
-
Chef de Projet
-
Equipe Développement
J'essaye de te poster un exemple tout à l'heure ou demain matin.
Tu veux afficher les informations dans le mini menu ? ou dans la page qui affiche la liste des serveurs ?
LIkaos Membre non connecté
Booster Fronde
-
Booster Fronde
- Voir le profil du membre LIkaos
- Inscrit le : 30/12/2012
- Site internet
Mais j'ai besoin d’accéder à des infos pour l'afficher dans le minimodule, histoire de faire bien.
Merci.
j1.seth Membre non connecté
-
Administrateur
- Voir le profil du membre j1.seth
- Inscrit le : 01/09/2008
- Site internet
- Groupes :
-
Chef de Projet
-
Equipe Développement
j1.seth Membre non connecté
-
Administrateur
- Voir le profil du membre j1.seth
- Inscrit le : 01/09/2008
- Site internet
- Groupes :
-
Chef de Projet
-
Equipe Développement
Pour faire ça il faut d'abord créer ta classe ServerStatusMinecraftServer :
Code PHP :
<?php /*################################################## * ServerStatusMinecraftServer.class.php * ------------------- * begin : September 29, 2013 * copyright : (C) 2013 Julien BRISWALTER * email : julienseth78@phpboost.com * * ################################################### * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ###################################################*/ class ServerStatusMinecraftServer extends AbstractServerStatusServer { private $version = ''; private $motd = ''; private $players = 0; private $maxplayers = 0; public function __construct() { $this->set_id('minecraft'); $this->set_name('Minecraft'); $this->set_default_port(25565); } public function get_version() { return $this->version; } public function get_motd() { return $this->motd; } public function get_players() { return $this->players; } public function get_maxplayers() { return $this->maxplayers; } public function check_parameters() { //Write and read data fwrite($this->Socket, "xFEx01"); $data = fread($this->Socket, 2048); if($data == null) return false; //Evaluate the received data if (substr((String)$data, 3, 5) == "x00xa7x00x31x00") { $result = explode("x00", mb_convert_encoding(substr((String)$data, 15), 'UTF-8', 'UCS-2')); $motd = preg_replace("/(§.)/", "",$result[1]); } else { $result = explode('§', mb_convert_encoding(substr((String)$data, 3), 'UTF-8', 'UCS-2')); $motd = ""; foreach ($result as $key => $string) { if($key != sizeof($result)-1 && $key != sizeof($result)-2 && $key != 0) { $motd .= '§'.$string; } } $motd = preg_replace("/(§.)/", "", $motd); } //Remove all special characters from a string $motd = preg_replace("/[^[:alnum:][:punct:] ]/", "", $motd); //Set variables $this->version = $result[0]; $this->motd = $motd; $this->players = $result[sizeof($result)-2]; $this->maxplayers = $result[sizeof($result)-1]; } } ?>
Les récupérations de paramètres s'effectue dans la fonction check_parameters(). J'ai mis la fonction du lien que tu m'as donné à l'intérieur de la fonction mais ça n'a pas l'air de fonctionner (j'ai testé avec une IP de serveur minecraft que j'ai récupéré sur le net). Tu peux utiliser des requêtes SQL dans la fonction check_parameters() si tu veux pour récupérer les infos. Ici je n'ai créé que 4 infos supplémentaires mais tu peux en créer plus si tu peux en récupérer plus.
Par contre il faut remplacer "private $Socket;" par "protected $Socket;" dans la classe AbstractServerStatusServer pour que ça fonctionne.
Ensuite ajoutes les 4 lignes suivantes à la ligne 63 du fichier /ServerStatus/phpboost/ServerStatusModuleMiniMenu.class.php :
Code PHP :
'VERSION' => $server->get_id() == 'minecraft' ? $server->get_version() : '', 'MOTD' => $server->get_id() == 'minecraft' ? $server->get_motd() : '', 'CURPLAYERS' => $server->get_id() == 'minecraft' ? $server->get_players() : '', 'MAXPLAYERS' => $server->get_id() == 'minecraft' ? $server->get_maxplayers() : '',
Et ajoutes les lignes suivantes à la ligne 17 de /ServerStatus/templates/ServerStatusModuleMiniMenu.tpl pour afficher les nouvelles variables :
Code TPL :
Voilà voilà j'espère que ça t'aide un peu, dis moi si tu as besoin d'autres renseignements.
LIkaos Membre non connecté
Booster Fronde
-
Booster Fronde
- Voir le profil du membre LIkaos
- Inscrit le : 30/12/2012
- Site internet
Là j'ai rien qui remonte je cherche un peu et je te dis.
Edit: if($data == null) return false;
Ne semble rien recevoir, pourtant avec le script que j'ai posé temporairement ici: http://minekahest.fr/minecraft/test.php j'ai bien les datas, je compare mais j'ai du mal à comprendre ce qui coince.
Si je met en place le socket j'ai bien un résultat:
$socket = @stream_socket_client('tcp://'.$this->address.':'.$this->port, $errno, $errstr, 3)
Je ne connais pas Php, quel différence entre le stream_socket_client et ton @fsockopen ?
Édité par LIkaos Le 30/09/2013 à 19h16
j1.seth Membre non connecté
-
Administrateur
- Voir le profil du membre j1.seth
- Inscrit le : 01/09/2008
- Site internet
- Groupes :
-
Chef de Projet
-
Equipe Développement
j1.seth Membre non connecté
-
Administrateur
- Voir le profil du membre j1.seth
- Inscrit le : 01/09/2008
- Site internet
- Groupes :
-
Chef de Projet
-
Equipe Développement
Quand tu dis que certains serveurs n'ont pas le query enable ça veut dire qu'ils n'acceptent pas les requêtes du type celle qu'il y a dans la fonction check_parameters() ? Concernant le serveur que tu m'as indiqué, cette fonctionnalité est activée ?
Édité par j1.seth Le 01/10/2013 à 16h35
LIkaos Membre non connecté
Booster Fronde
-
Booster Fronde
- Voir le profil du membre LIkaos
- Inscrit le : 30/12/2012
- Site internet
Mes ips et ports sont publics, ceux qui sont masqués derrière un proxy sont de toute manière bloqués par le firewall.
Mon serveur possède 1 proxy, 4 serveur masqués et 1 serveur ouvert mais à accès restreint à certains users, le proxy est capable de répondre sur le même protocole que les serveurs, je t'ai donné les deux pour voir.
serv.minekahest.fr:25565 > Proxy
serv.minekahest.fr:20000 > Serveur classique ouvert
En modifiant le script comme ceci cela fonctionne pour les deux:
Code PHP :
public function check_parameters() { if(!$socket = @stream_socket_client('tcp://'.$this->address.':'.$this->port, $errno, $errstr, 3)) { return false; } else { //Write and read data fwrite($socket, "xFEx01"); $data = fread($socket, 2048); fclose($socket); if($data == null) return false; //Evaluate the received data if (substr((String)$data, 3, 5) == "x00xa7x00x31x00") { $result = explode("x00", mb_convert_encoding(substr((String)$data, 15), 'UTF-8', 'UCS-2')); $motd = preg_replace("/(§.)/", "",$result[1]); } else { $result = explode('§', mb_convert_encoding(substr((String)$data, 3), 'UTF-8', 'UCS-2')); $motd = ""; foreach ($result as $key => $string) { if($key != sizeof($result)-1 && $key != sizeof($result)-2 && $key != 0) { $motd .= '§'.$string; } } $motd = preg_replace("/(§.)/", "", $motd); } //Remove all special characters from a string $motd = preg_replace("/[^[:alnum:][:punct:] ]/", "", $motd); //Set variables $this->version = $result[0]; //Motd = name $this->name = $motd; //Players max/min $this->players = $result[sizeof($result)-2]; $this->maxplayers = $result[sizeof($result)-1]; } //Partie SQL }
Mais bon là j'ouvre un autre socket, c'était peut être plus cool de faire fonctionner avec ton socket (peut être du coup tu peux proposer un type minecraft serveur pour ton plugin sur une maj
).Par ce que là j'ai pu faire ce que je voulais afficher (nom du monde + joueurs en ligne + max pour le proxy en faisant une autre class), mais c'est surement mal fait !
Édité par LIkaos Le 01/10/2013 à 18h27
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie