Skip to content

Update jeeApi.php#1791

Closed
rulistaff wants to merge 1 commit into
jeedom:V4-stablefrom
rulistaff:patch-8
Closed

Update jeeApi.php#1791
rulistaff wants to merge 1 commit into
jeedom:V4-stablefrom
rulistaff:patch-8

Conversation

@rulistaff

Copy link
Copy Markdown
Contributor

L'api de base 'object' ne marche plus :
http://jeedomIP/core/api/jeeApi.php?apikey=xxx&type=object
Voici un correctif possible (l'autre serait de descendre le test if (class_exists($type) && method_exists($type, 'event')) plus bas dans le code

L'api de base 'object' ne marche plus :
http://jeedomIP/core/api/jeeApi.php?apikey=xxx&type=object
Voici un correctif possible (l'autre serait de descendre if (class_exists($type) && method_exists($type, 'event')) plus bas dans le code
@KiboOst

KiboOst commented Jan 21, 2021

Copy link
Copy Markdown
Collaborator

Tu aurai un exemple ? On ne comprends pas bien le soucis en fait.
Il faudrai logiquement jeeObjet et pas object. Peu être la doc pas à jour ?

@rulistaff

Copy link
Copy Markdown
Contributor Author

class_exists($type) && method_exists($type, 'event') retourne une erreur 500 quand $type == 'object'
Cela depuis la maj de ma smart vers Buster.
Cela vient peut être de la version de php, où de la maj Jeedom en 4.1, j'avoue que je n'ai pas pousser l'investigation pour comprendre exactement ce qui provoque l'erreur 500, mais je peux regarder.

@rulistaff

Copy link
Copy Markdown
Contributor Author

L'exemple est l'utilisation de l'API de base pour récupérer la liste des objets Jeedom avec l'url postée au 1er post :
http://jeedomip/core/api/jeeApi.php?apikey=xxx&type=object

@rulistaff

Copy link
Copy Markdown
Contributor Author

C'est ce code qui est en dessous et qui n'est jamais atteint à cause de l'erreur 500 :

if ($type == 'object') {
  log::add('api', 'debug', __('Demande API pour les objets', __FILE__));
  header('Content-Type: application/json');
  echo json_encode(utils::o2a(jeeObject::all()), JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE, 1024);
  die();
}

Donc non je parle bien de quand $type = 'object' dans l'api de base et pas de jeeObjet

@rulistaff

Copy link
Copy Markdown
Contributor Author

https://doc.jeedom.com/fr_FR/core/4.0/api_http

Et la doc est ok :

Objet

Voici l’URL = http://#IP_JEEDOM#/core/api/jeeApi.php?apikey=#APIKEY#&type=object

Renvoie en json la liste de tous les objets de Jeedom.

;-)

@KiboOst

KiboOst commented Jan 22, 2021

Copy link
Copy Markdown
Collaborator

Je viens de tester sur smart buster php7.3 v4.1
aucun soucis avec jeeObject::all

Quel est ta version de php ?

@rulistaff

Copy link
Copy Markdown
Contributor Author

Encore une fois je parle de l'API http de base et non pas de l'api JSON RPC !

avec cette url : http://#IP_JEEDOM#/core/api/jeeApi.php?apikey=#APIKEY#&type=object

@KiboOst

KiboOst commented Jan 22, 2021

Copy link
Copy Markdown
Collaborator

http://#IP_JEEDOM#/core/api/jeeApi.php?apikey=#APIKEY#&type=object

Toujours sur Smart à jour, je récupère bien le json de tout les objets, aucune erreur

@rulistaff

Copy link
Copy Markdown
Contributor Author

Ok, je vais inspecter un peu plus alors pour trouver plus précisément ce qui génère cette erreur 500 chez moi.

@rulistaff

Copy link
Copy Markdown
Contributor Author

Smart
Ma version php est 7.3.19-1~deb10u1
Jeedom 4.1.17
Linux Jeedom 3.16.85+ #1 SMP PREEMPT Mon Jul 13 14:40:04 UTC 2020 aarch64 GNU/Linux [10.4]

Je viens de tester c'est bien le code class_exists('object') qui fait crasher php
Pas de log d'erreur php, rien, mis à part une erreur 500.
J'ai également testé dans un bloc code de scénario et le scénario est tué également car crashé.
par contre ça passe dans un terminal, ça ne vient donc pas de php directement... Je vais continuer à investiguer

@rulistaff

Copy link
Copy Markdown
Contributor Author

Il y a un truc lié avec le core de jeedom car ça crash après avoir inclus le core :

echo (class_exists('object')) ? 'yes' : 'no';    //=> OK

require_once core/php/core.inc.php";

echo (class_exists('object')) ? 'yes' : 'no';    //=> CRASH

Je vais voir si je trouve pourquoi...

@rulistaff

rulistaff commented Jan 23, 2021

Copy link
Copy Markdown
Contributor Author

Ok j'ai trouvé, mais ce n'était pas du gâteau !

le pb vient de spl_autoload_register('jeedomCoreAutoload', true, true);

qui utilise:

function jeedomCoreAutoload($classname) {
	try {
		include_file('core', $classname, 'class');
	} catch (Exception $e) {
		
	} catch (Error $e) {
		
	}
}

C'est la fonction d'autoload qui provoque le crash.
Dans le dossier core/class
On a le fichier object.class.php
Qui provoque le crash de class_exists('object') car l'autoload charge le fichier.

Contenu du fichier object.class.php :

<?php	
 /* This file is part of Jeedom.	
 *	
 * Jeedom 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 3 of the License, or	
 * (at your option) any later version.	
 *	
 * Jeedom 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 Jeedom. If not, see <http://www.gnu.org/licenses/>.	
 */	
 /* * ***************************Includes********************************* */	
require_once __DIR__ . '/../../core/php/core.inc.php';	
 class object extends jeeObject {	
 }

Par contre pourquoi je suis le seul à avoir ce crash ici ?
Peut être parce-que sur le git de Jeedom ce fichier n'existe plus dans les branches beta.
Mais il est bien dans la branche principale
https://github.com/jeedom/core/tree/master/core/class

Bref le PR résout ce pb, même si je ne sais pas pourquoi le fait que l'autoloader charge cette class provoque une erreur 500...

@rulistaff

Copy link
Copy Markdown
Contributor Author

En fait, pour compléter, le problème est également résolu si la class object contient au moins une variable :
core/class/object.class.php :

require_once __DIR__ . '/../../core/php/core.inc.php';	
class object extends jeeObject {
  public peu_importe;
}

Là cela ne crash plus.

@KiboOst

KiboOst commented Jan 23, 2021

Copy link
Copy Markdown
Collaborator

Y'a pas de fichier core/class/object.class.php
https://github.com/jeedom/core/tree/V4-stable/core/class

la class object est réservée par php et a été remplacé par jeeObject déjà en v3.

@rulistaff

Copy link
Copy Markdown
Contributor Author

Bah pourtant le fichier est bien présent chez moi, donc potentiellement chez d'autres vu que j'ai toujours fait que des manips et des majs officielles sur ma smart de production (jamais même de beta)

@rulistaff

Copy link
Copy Markdown
Contributor Author

Par contre je l'ai depuis longtemps et j'ai été en V3.
Les scripts d'install n'ont peut être jamais supprimé le fichier.

@rulistaff

rulistaff commented Jan 23, 2021

Copy link
Copy Markdown
Contributor Author

Non aucun script post update particulier et j'ai eu le problème directement après la maj.

Le fichier a bien l’horodatage correspondant à la date de ma migration, comme tous les autres fichiers...

Bref, je dis ça c'est pour les autres qui seraient éventuellement touchés, car moi j'ai pu résoudre le pb en 5min...

@KiboOst

KiboOst commented Jan 23, 2021

Copy link
Copy Markdown
Collaborator

J'ai deux smarts en production qui sont passées par le restore buster puis update 4.1.17 et aucun n'a ce fichier.
Pas de script post update pour altéré des fichiers du core ? Déjà vue donc je préfère demander ...

Sinon y'a community pour discuter ...

@rulistaff

Copy link
Copy Markdown
Contributor Author

Oups j'ai édité au dessus au lieu de réponde...

Non aucun script post update particulier et j'ai eu le problème directement après la maj.

Le fichier a bien l’horodatage correspondant à la date de ma migration, comme tous les autres fichiers...

Bref, je dis ça c'est pour les autres qui seraient éventuellement touchés, car moi j'ai pu résoudre le pb en 5min...

@zoic21 zoic21 closed this Feb 18, 2021
@zoic21 zoic21 deleted the branch jeedom:V4-stable February 18, 2021 08:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants