Concerne le plugin jeezigbee
pour ceux qui comme moi sont passés à debian 13 et php 8.4.
J’avais sur la page des équipements ce message d’erreur : file_get_contents(): Argument #1 ($filename) must not contain any null bytes
Voici la correction faite avec Claude.
# Correction JeeZigbee — Erreur `null bytes` sous PHP 8.4
## Contexte
Depuis PHP 8.4, la fonction `file_get_contents()` lève une `ValueError` fatale lorsque le chemin de fichier passé en argument contient un octet nul (`null byte`). Les versions précédentes (PHP 8.3 et antérieures) ignoraient silencieusement ce problème.
Le plugin JeeZigbee (z2m) n'a pas encore été mis à jour pour gérer ce changement, ce qui provoque l'erreur suivante lors de l'ouverture du plugin :
file_get_contents(): Argument #1 ($filename) must not contain any null bytes
## Fichier concerné
/var/www/html/plugins/z2m/core/class/z2m.class.php
## Fonctions à corriger
Deux fonctions sont affectées :
- `getDeviceInfo()` — construit un chemin à partir de `$_device` qui peut contenir un null byte
- `getImg()` — construit un chemin à partir de `$model` qui peut contenir un null byte
---
## Procédure de correction
### Étape 1 — Sauvegarde du fichier original
Toujours faire une sauvegarde avant toute modification :
```bash
cp /var/www/html/plugins/z2m/core/class/z2m.class.php \
/var/www/html/plugins/z2m/core/class/z2m.class.php.bak
Étape 2 — Correction de getDeviceInfo()
php -r "
\$file = '/var/www/html/plugins/z2m/core/class/z2m.class.php';
\$content = file_get_contents(\$file);
\$search = \" public static function getDeviceInfo(\\\$_device) {\n \\\$file = __DIR__ . '/../../data/devices/' . \\\$_device . '.json';\";
\$replace = \" public static function getDeviceInfo(\\\$_device) {\n if (empty(\\\$_device) || strpos(\\\$_device, \\\"\\\\0\\\") !== false) {\n return array();\n }\n \\\$file = __DIR__ . '/../../data/devices/' . \\\$_device . '.json';\";
\$new = str_replace(\$search, \$replace, \$content);
if (\$new !== \$content) {
file_put_contents(\$file, \$new);
echo 'Correction appliquee avec succes' . PHP_EOL;
} else {
echo 'Pattern non trouve, verifiez le fichier' . PHP_EOL;
}
"
Étape 3 — Correction de getImg()
php -r "
\$file = '/var/www/html/plugins/z2m/core/class/z2m.class.php';
\$content = file_get_contents(\$file);
\$search = \" \\\$filename = __DIR__ . '/../../data/img/' . \\\$model . '.jpg';\";
\$replace = \" if (empty(\\\$model) || strpos(\\\$model, \\\"\\\\0\\\") !== false) {\n return 'plugins/z2m/plugin_info/z2m_icon.png';\n }\n \\\$filename = __DIR__ . '/../../data/img/' . \\\$model . '.jpg';\";
\$new = str_replace(\$search, \$replace, \$content);
if (\$new !== \$content) {
file_put_contents(\$file, \$new);
echo 'Correction appliquee avec succes' . PHP_EOL;
} else {
echo 'Pattern non trouve, verifiez le fichier' . PHP_EOL;
}
"
Étape 4 — Vérification
Contrôlez que les deux corrections ont bien été appliquées :
sed -n '740,753p' /var/www/html/plugins/z2m/core/class/z2m.class.php
Résultat attendu :
public static function getDeviceInfo($_device) {
if (empty($_device) || strpos($_device, "\0") !== false) {
return array();
}
$file = __DIR__ . '/../../data/devices/' . $_device . '.json';
if (!file_exists($file)) {
return array();
}
return json_decode(file_get_contents($file), true);
}
sed -n '818,828p' /var/www/html/plugins/z2m/core/class/z2m.class.php
Résultat attendu :
if ($this->getConfiguration('model') == '') {
return 'plugins/z2m/plugin_info/z2m_icon.png';
}
if (empty($model) || strpos($model, "\0") !== false) {
return 'plugins/z2m/plugin_info/z2m_icon.png';
}
$filename = __DIR__ . '/../../data/img/' . $model . '.jpg';
En cas de problème
Si l’erreur persiste après la correction, vider le cache Jeedom :
Réglages → Système → Configuration → onglet Cache → Vider le cache
Pour restaurer le fichier original en cas de problème :
cp /var/www/html/plugins/z2m/core/class/z2m.class.php.bak \
/var/www/html/plugins/z2m/core/class/z2m.class.php
Important
Ces corrections sont écrasées à chaque mise à jour du plugin JeeZigbee. Il faudra les réappliquer après chaque mise à jour tant que le bug n’est pas corrigé officiellement.
Pour éviter d’oublier, signalez le bug sur le forum Jeedom community :
https://community.jeedom.com
En mentionnant : plugin JeeZigbee (z2m), PHP 8.4, erreur file_get_contents() null bytes, fonctions getDeviceInfo() et getImg().
Correction établie le 15 mai 2026 — Jeedom 4.5.3 / PHP 8.4.21 / Debian 13.4