Wiki Tuto - Chercher présence d'une sous chaîne dans une chaîne avec MySQL grâce à LIKE

0
25
fév.
2017

Introduction

Admettons que nous possédions une table "articles" contenant une cellule "quelleCategorie". Dans cette cellule nous indiquons une ou plusieurs catégories pour chaque articles comme dans l'exemple suivant :

    id | nomArticle | quelleCategorie | dateCreation
    1 | banane | fruits | 5
    2 | jus d'orange | jus de fruits | 9
    3 | tomate | fruits ; legumes | 22
    4 | maison | immobilier | 42

Admettons que nous désirons récupérer tout les articles ayant "fruit" dans "quelleCategorie". Avec l'option LIKE nous allons pouvoir spécifier une filtrage par motif (ou "pattern matching") afin de récupérer banane, jus d'orange et tomate et ce même si chacun possède une version légèrement différente de la catégorie.
À noter que vous pouvez aussi utiliser NOT LIKE qui vous permet de faire exactement l'inverse : demander à MySQL de ne retourner que les chaînes où n'est PAS présent le pattern.
Attention : une mauvaise utilisation de LIKE peut engendrer une chute des performances et une augmentation des ressources CPU.

L'exemple suivant va sélectionner dans la table "articles" tout les éléments ayant dans leur cellule "quelleCategorie" la sous-chaîne contenue dans la variable $categorieChoisie, classés du plus récent aux plus anciens.

<?php
$bdd_hostname = "localhost";
$bdd_name = "nomDeMaBase";
$bdd_login = "loginDeMaBase";
$bdd_password = "passowrdDeMaBase";
try {
    $bdd = new PDO('mysql:host='.$bdd_hostname.';dbname='.$bdd_name.';charset=utf8', $bdd_login, $bdd_password);
} catch( Exception $e){
    error_log("Error BDD connexion from ".$_SERVER["PHP_SELF"]);
}

$categorieChoisie = "fruit";

$requestSQL = $bdd->prepare('SELECT `*` FROM articles WHERE `quelleCategorie` LIKE %{:categorieChoisie}%  ORDER BY `dateCreation`');
$requestSQL->bindParam(':categorieChoisie', strval($categorieChoisie), PDO::PARAM_STR);
$requestSQL->execute();
$myArticles = $requestSomeArticles->fetchAll(PDO::FETCH_CLASS);
print_r($myArticles);
?>

Explication en détails :

  1. On tente de connecter PDO à la base de données, si on réussi on obtient l'objet $bdd si non on retourne une erreur dans les logs (/var/log/apache2/error.log pour apache2)
try {
    $bdd = new PDO('mysql:host='.$bdd_hostname.';dbname='.$bdd_name.';charset=utf8', $bdd_login, $bdd_password);
} catch( Exception $e){
    error_log("Error BDD connexion from ".$_SERVER["PHP_SELF"]);
}
  1. On défini notre sous chaîne à rechercher : fruit
$categorieChoisie = "fruit";
  1. On demande a PDO de préparer notre requête à partir de l'objet $bdd
$requestSQL = $bdd->prepare('SELECT `*` FROM articles WHERE `quelleCategorie` LIKE %{:categorieChoisie}%  ORDER BY `dateCreation`');
  • Ici on lui demande de tout (*) récupérer dans "articles" où "quelleCategorie" ressemble à la chaîne injectée, ordonnée (ORDER BY) par leur date de création.
  1. On injecte le paramètre de recherche (fruit)
$requestSQL->bindParam(':categorieChoisie', strval($categorieChoisie), PDO::PARAM_STR);
  1. On exécute la requête SQL
$requestSQL->execute();
  1. On récupère le résultat de la requête SQL sous forme d'objet
$myArticles = $requestSomeArticles->fetchAll(PDO::FETCH_CLASS);
  1. Si vous préférez récupérer sous forme de tableau, remplacez la précédente ligne par les suivantes
$myArticles = array();
while($tmpArticle = $requestSomeArticles->fetch(PDO::FETCH_ASSOC)){
    $myArticles[] = $tmpArticle;
}
  1. On affiche le résultat
print_r($myArticles);

Wiki Tuto Ajax - afficher au format JSON des articles e-shop depuis MySQL-MariaDB grâce à PHP

0
23
fév.
2017

Sommaire

Niveau requis pour utilisation : moyen.
Nécessite au moins PHP5.4+ avec PDO (php-mysql)
Ce tutoriel s'intègre dans une suite de tutoriel permettant d'appréhender l'ajax voir Farm Link à la fin du wiki.

Introduction

  • Nous allons ici étudier un script PHP, rédigé par votre humble serviteur en programmation fonctionnelle, permettant de faire de l'ajax. L'objectif d'origine de ces fonctions est de recevoir les requêtes GET provenant d'une interface cliente (page web angularjs) d'une boutique en ligne, de récupérer des articles depuis une table de Base de Données puis afficher les informations au format JSON.
    Le but de ce topic est de vous aider a mettre en place le plus rapidement possible une fonction ajax côté serveur (pour les tuto côté client il faudra voir du côté du Farm Link en bas de page).

  • Donc ce script analyse les variables $_GET afin de récupérer les informations lui permettant de forger des requêtes SQL. Ensuite il récupère les informations de la base de données MySQL/MariaDB et les affiche dans un JSON.
    Pour fonctionner il faut bien entendu disposer d'une base de données contenant une table (nom gérable via $tableName) et contenant au moins les cellules : id, categorie.
    Afin d'éviter les doublons entre deux requêtes clientes lorsque des articles ont des informations recherchées quasi identique: lors d'une requête GET le client doit mentionner les articles qu'il a visionné dernièrement en ajoutant dans ses requêtes GET les variables banItemX = identifiant article à bannir comme dans l'exemple suivant : ajax.php?banItem1=6&banItem2=7&banItem3=8

  • La sécurité anti injection SQL est gérée suivant les cas par les requêtes préparées de PDO ou par une moulinette qui vérifie la correspondance entre la table de données et les infos postées par l'utilisateur puis qui injecte les infos depuis la base de données en lieu et place des données envoyées par l'user. Sauf pour les $_GET["banItemX"] qui eux sont directement convertis en integer afin de casser toutes injections.

Les paramètres GET acceptés par le script :

Paramètres obligatoires :

  • &articleMax=[integer] gère la LIMITE SQL (nombre d'entrées max à renvoyer)
  • &orderByAttributs=[string] l'attribut pour ORDER BY (par exemple l'id, le prix, etc)
  • &orderByAttributsLastValue=[float] la valeur la plus haute (ou basse selon la recherche) de l'attribut ORDER BY afin de commencer la recherche à partir de là
  • &categorie=[string] le nom de la catégorie d'article (peut facilement être remplacer par une seconde condition de recherche)
  • &orderByType=[1|-1] décide du sens de la recherche (1 pour plus petit au plus grand (> et ASC), -1 pour plus grand au plus petit (< et DESC))

Paramètres optionnels :

  • &forceChangeOrderSymbole=[1|2] 1 pour > (plus grand que) ou 2 pour < (plus petit que) permet de changer le sens de la recherche sans affecter le reste (ASC ou DESC). Par défaut 1 (>) est sélectionné.
  • &banItem1=[integer] reçoit les identifiants à bannir (peut avoir un nombre "infini" (voir limite GET) ex: banItem2, banItem3, etc). Par défaut aucun élément n'est bannis.

Exemples :

  • www.hostname.be/ajaxArticles.php?articleMax=10&orderByAttributsLastValue=42&orderByAttributs=prix&orderByType=1&categorie=film

    • On demande à voir les 10 prochains articles, classé par la cellule prix du plus petit au plus grand à partir du prix 42, de la catégorie film

Le code

Pour l'installer créez un ajaxArticles.php et collez le code suivant dedans.

<?php
/*  Licence GPLv3 - Papa :  voxdemonix
    infos : https://www.0rion.netlib.re/forum4/viewtopic.php?f=79&t=541&p=1156#p1156
*/
/*  Je vous conseil d'insérer tout le bloc try dans un fichier séparé protégé par un .htaccess (deny for all)  */
try {
    /*  éditez les informations nécessaire pour la connexion à la base de données   */
    $bdd = new PDO('mysql:host='.$main["bdd_Hostname"].';dbname='.$main['bdd_Name'].';charset=utf8', $main['bdd_Login'], $main['bdd_Pass']);
} catch( Exception $e){
    error_log("ajax -> Error BDD connexion from ".$_SERVER["PHP_SELF"]);
}

    $tableName = "Articles";



    function displayInJsonMyArray($myArray){
        header('Content-type: application/json');
        print_r( json_encode($myArray, JSON_NUMERIC_CHECK)  );
    }



    function articleOrderByList(){
            //MYSQL
        global $bdd;
        $searchCategorieArticle = $bdd->prepare('SELECT * FROM '.$tableName.' LIMIT 1');
        $searchCategorieArticle->execute();

            //RECOVER THE RESULT IN A TAB
        $tabCategorie = $searchCategorieArticle->fetch(PDO::FETCH_ASSOC);
        $tab = array();

            //READ THE TAB AND MAKE THE OPTIONS'S TAG
        foreach ($tabCategorie as $key => $value) { 
            $tab[] = $key;
        }
        return $tab;
    }


    function articleCategorieList(){
        $liste = array(); global $bdd;
        $searchCategorieArticle = $bdd->prepare('SELECT `categorie` FROM '.$tableName);
        $searchCategorieArticle->execute();

            //MAINTENANT LISTE LES CATEGORIES DANS $tmpCategorie, (PERMET AUSSI DE CRÉER UN FORMULAIRE SELECT)
        while($tmpCategorie = $searchCategorieArticle->fetch(PDO::FETCH_ASSOC)){
            if (!in_array($tmpCategorie["categorie"], $liste)) {
                $liste[] = $tmpCategorie["categorie"];
            //  var_dump($tmpCategorie); echo '<br />';
            }
        }
        return $liste;
    }


    function genBanItemForMySQLRequest(){
        $banRequest = '';
        foreach( $_GET as $key => $value){
            if (stripos( ' '.$key , 'banItem' )){
                $banRequest .= ' AND (id != '.intval($value).')';   
            }
        }
        return $banRequest;
    }


    /*
        EXPLICATIONS :
    reçoit des variables GET du style :
opt     &banItem1= reçoit les identifiants a bannir (peut avoir un nombre "infini" (voir limite GET) ex: banItem2, banItem3, etc)
        &articleMax= gère la LIMITE SQL (nombre d'entrée max a renvoier)
        &orderByAttributs= l'attribut pour ORDER BY (par exemple l'id, le prix, etc)
        &orderByAttributsLastValue= la valeur la plus haute (ou basse selon la recherche) de l'attribut ORDER BY afin de commencer la recherche a partir de là
        &categorie= la categorie d'article (peut facilement être remplacer par une seconde condition de recherche)
        &orderByType= decide du sens de la recherche (1 pour plus petit au plus grand (> et ASC), -1 pour plus grand au plus petit (< et DESC))
opt     &forceChangeOrderSymbole= permet de changer le sens (< ou >) de la recherche sans affecter le reste (ASC ou DESC)
    */




    $forceChangeOrderSymbole = 0; //if = 1 => > (plus grand que); if = 2 => < (plus petit que)
    if(filter_has_var(INPUT_GET, "forceChangeOrderSymbole")){
        if(isset($_GET["forceChangeOrderSymbole"]) & !empty($_GET["forceChangeOrderSymbole"])){
            switch(intval($_GET["forceChangeOrderSymbole"])){
                case 1 :
                case '1':
                    $forceChangeOrderSymbole = 1;
                break;
                case 2 :
                case '2':
                    $forceChangeOrderSymbole = 2;
                break;              
            }
        }
    }
    if ( filter_has_var(INPUT_GET, "articleMax") & filter_has_var(INPUT_GET, "orderByType") & filter_has_var(INPUT_GET, "orderByAttributs") & filter_has_var(INPUT_GET, "orderByAttributsLastValue")) {
        $wichCategorie = "all";
        if (filter_has_var(INPUT_GET, "categorie")) {
            $wichCategorie = strval($_GET["categorie"]); //categorie = idForTraduct, not the traducted version (https://www.0rion.netlib.re/forum4/viewtopic.php?f=9&t=211)
        }
        displaySomeArticleInJSONUniversal($_GET["articleMax"], $wichCategorie, $_GET["orderByAttributs"], $_GET["orderByAttributsLastValue"]);
    }


    function displaySomeArticleInJSONUniversal($nbLimit, $categorie, $inputOrderByAttributs, $inputOrderByAttributsLastValue){
        // $iMinimal = l'identifiant unique minimal de l'article, afin d'envoyer les suivants
        global $bdd; //PDO object
        global $forceChangeOrderSymbole;

        $orderByAttributs = 'id'; $orderByAttributsLastValue = 1;
        /* security */
        if(in_array(strval($inputOrderByAttributs) , articleOrderByList())){
            $orderByAttributs = strval($inputOrderByAttributs);
            $orderByAttributsLastValue = $inputOrderByAttributsLastValue;
        }
        $orderByType = 'ASC'; $orderSymbole = '>';
        if(strval($_GET["orderByType"]) == '-1'){
            $orderByType = 'DESC';
            $orderSymbole = '<';    
        }
        if($forceChangeOrderSymbole == 2){ $orderSymbole = '<'; }
        if( strval($categorie == "all") || !in_array(strval($categorie), articleCategorieList() )   ){
            $requestSomeArticles = $bdd->prepare("SELECT * FROM ".$tableName." WHERE `".$orderByAttributs."` ".$orderSymbole."= :orderByAttributsLastValue ".genBanItemForMySQLRequest()." ORDER BY `".$orderByAttributs."` ".$orderByType.", `id` ASC LIMIT :nbLimit");
        }else{
            $requestSomeArticles = $bdd->prepare("SELECT * FROM ".$tableName." WHERE `".$orderByAttributs."` ".$orderSymbole."= :orderByAttributsLastValue AND `categorie` = :categorie ORDER BY `".$orderByAttributs."` ".$orderByType.", `id` ASC LIMIT :nbLimit");
            $requestSomeArticles->bindParam(':categorie', strval($categorie), PDO::PARAM_STR);
        }

        $requestSomeArticles->bindParam(':nbLimit', intval($nbLimit), PDO::PARAM_INT);
        $requestSomeArticles->bindParam(':orderByAttributsLastValue', floatval($orderByAttributsLastValue), PDO::PARAM_STR);

        $requestSomeArticles->execute();
        //$myArticles = $requestSomeArticles->fetchAll(PDO::FETCH_CLASS); 
        $myArticles = array();
            while($tmpArticle = $requestSomeArticles->fetch(PDO::FETCH_ASSOC)){
                $myArticles[] = arrayUniversalTraductor($tmpArticle);
            }
        displayInJsonMyArray($myArticles);
    }
?>

Fonctionnement en détail :

Note : ne serons mentionné que les noms des fonctions, leur fonctionnement et les types de sorties (avec des exemples). Il n'y aura pas de copier-coller de morceaux de code afin d'éviter de devoir éditer le tutoriel à chaque édition du code source.

Listes des fonctions :

  1. articleOrderByList()
  2. articleCategorieList()
  3. genBanItemForMySQLRequest()
  4. displaySomeArticleInJSONUniversal($nbLimit, $categorie, $inputOrderByAttributs, $inputOrderByAttributsLastValue)
  5. displayInJsonMyArray($myArray)

articleOrderByList()

  • Récupère la liste des attributs possible (nom de cellule) pour la table de données.
    • Exemple de sorties :
$liste[1] = "film"
$liste[2] = "séries"
$liste[3] = "musiques"

articleCategorieList()

  • Retourne une liste sous forme d'un array contenant les noms des différentes catégories sans doublon.
    • Exemple de sorties :
$liste[1] = "id"
$liste[2] = "prix"
$liste[3] = "nom"
$liste[4] = "timeCreation"

genBanItemForMySQLRequest()

  • Récupère les identifiants des articles à bannir de la prochaine requête SQL. Utilise les variables $_GET[banItemX] afin de générer un morceau de requête SQL du type ' AND (id != '.intval($_GET[banItemX]).')' à insérer avant l'ORDER BY.
    • Exemple de sorties :
    $stringMorceauRequeteSQL = ' AND (id != 1) AND (id != 2) AND (id != 3) AND (id != 5) AND (id != 9) AND (id != 8)'

displaySomeArticleInJSONUniversal($nbLimit, $categorie, $inputOrderByAttributs, $inputOrderByAttributsLastValue)

  • La fonction displaySomeArticleInJSONUniversal($nbLimit, $categorie, $inputOrderByAttributs, $inputOrderByAttributsLastValue) est précédée d'un bloc de code chargé d'appréhender certaines informations envoyées par l'utilisateur avant d’exécuter la dite fonction. C'est la fonction principale : chargée de forger et exécuter la requête SQL, insérer les résultats dans un tableau (array) puis l'envoyer à displayInJsonMyArray($myArray).

displayInJsonMyArray($myArray)

  • Fonction toute banale recevant un tableau (array) et affichant les informations contenues via print_r() au format JSON avec la vérification des entiers.

-


-

-


-

Note pour la rédaction :

  • il faut encore simplifier le tuto, ajouter des exemples (et mettre en place un exemple en ligne afin que les lecteurs puissent tester (comme dans cet exemple lié à ce tuto))
  • le code aurait besoin d'une fraîcheur afin de le rendre plus compréhensible et généralisable au max (le but étant qu'un lecteur néophyte puisse copier-coller, éventuellement avec une légère modification puis en route)
  • des exemples d'utilisations suivront (un avec javascript et un avec angular 4)

Journal Gnew 2016.2

Posté par (page perso) . Licence CC by-sa
11
3
août
2016

Bonjour à tous,

Je souhaiterais vous faire part de la disponibilité de la version 2016.2 de Gnew (gestionnaire de contenu simple pour les publications web).

Voici la liste des nouveautés de cette version :

  • Ajout de la propriété CSS word-break dans les citations pour éviter les débordements
  • Ne pas afficher l'adresse e-mail dans les flux lorsque l'utilisateur ne le veut pas
  • Correction de la suppression des utilisateurs invalides sans utiliser le lien Purger les utilisateurs (administration)
  • Amélioration des suppressions (administration) (...)

Journal Présentation de freeostorrent.fr

27
16
juil.
2016

Freeostorrent.fr rassemble des OS libres (Systèmes d'exploitation) et les propose au téléchargement par l'intermédiaire du protocole Bittorrent.
Il est complémentaire des projets officiels qui possèdent déjà leurs services Bittorrent (distributions Gnu/Linux ou xBSD, projets divers, …) et s'adresse premièrement aux projets plus modestes qui recherchent un moyen simple de partager librement leurs travaux.

Conçu au départ comme une "étude de cas" pour un "béotien" désirant enfin apprendre - un peu - le PHP, le site est à l'origine un tracker (...)

Forum Programmation.php Gestion des accents dans un projet php/mysql...

Posté par . Licence CC by-sa
2
2
juin
2016

Bonjour à tous,

Avant de poser la question, je vais resituer le contexte : j'ai commencé à contribuer à un logiciel dont j'avais besoin pour mon boulot (non, je ne dirais pas lequel, non pas que ce soit hyper confidentiel, mais j'estime que ce n'est pas à moi de faire de la pub pour ce logiciel…). Comme indiqué dans le sujet, c'est un projet en PHP/Mysql qui n'a jamais pris le temps de gérer correctement le problème des accents.

Aujourd'hui (...)

Forum Programmation.php PHP7, passage de variable tableau d'un template blade à un autre

Posté par . Licence CC by-sa
Tags :
0
8
avr.
2016

Bonjour et bon vendredi, Robinsons,

J'ai un petit souci avec mon application php qui comporte actuellement un bogue.

L'application c'est un gestionnaire de fichiers en ligne, les fichiers sont soit stockés dans la base de données (si pas trop volumineux) soit sur le système de fichiers du serveur.

J'utilise Laravel 5.0

Pour l'explorateur de fichiers, j'ai deux vues importantes:
vue_liste.blade.php

        $assoc = json_decode($json_str);


        if ($assoc !== NULL) {
        foreach($assoc as $i => $row
(...)

Libertempo, gestion de congés, en version Quinnis

Posté par . Édité par Nÿco, Nils Ratusznik, ZeroHeure, tuiu pol, Benoît Sibaud et palm123. Modéré par ZeroHeure. Licence CC by-sa
20
4
avr.
2016
Bureautique

Libertempo est une application libre (PHP/MySQL) permettant de gérer les congés en ligne (fork de php_conges). Publié sous licence GPL, Libertempo est sorti en version Quinnis.

Au menu, plein de corrections de bug et d'amélioration du code. Mais avant vous voulez certainement savoir pourquoi "Quinnis" ? Et bien, parce que nous sommes fan de Dr Who ! Donc, chaque nouvelle version s’accompagnera d’un nouveau nom basé sur les planètes du Whoniverse.

Quelques informations sont disponibles en seconde partie de dépêche.

Forum Programmation.SQL Mysql piraté

Posté par . Licence CC by-sa
2
29
mar.
2016

Bonjour,

Je travaille dans une petite association et depuis quelques jour des bénévoles qui s'inscrivent sur notre site reçoivent des emails frauduleux les invitants à renvoyer des informations personnelles.

Notre site Web s'appuie sur 2 frontaux APACHE et une bases MySQL.
Savez vous comment je peux détecter des piratages de notre base de données?

Est-ce qu'il y a une possibilité d'obtenir les logs des requêtes Mysql effectuées depuis 20 jours avec l'adresse IP qui a envoyé ces requêtes et la (...)

Forum général.petites-annonces [EMPLOI] Développeur PHP/Symfony Junior

Posté par . Licence CC by-sa
2
26
nov.
2015

Nous

LesNumériques est un magazine en ligne dédié aux tests et à l'actualité high-tech. Nous aidons chacun à trouver les produits numériques qui lui correspondent, en publiant quotidiennement tests et comparatifs, à notre façon : objectivité, humour, amour du test bien fait, dialogue avec les lecteurs. Personne ne publie autant de tests que nous en français sur le web, nous voyons défiler tous les produits high-tech.

Vous

Vous pratiquez le PHP, êtes amateur de POO, de bonnes pratiques. Vous souhaitez (...)

Forum général.cherche-logiciel Générateur de formulaires PHP pour tables de SGBD (MySQL)

0
26
nov.
2015

Bonjour,

Pour une équipe désirant faire du prototypage rapide et/ou des petites applications jetables de type création / m.à j. / suppression dans des tables de base de données (MySQL), je recherche un générateur de code (PHP de préférence, c'est ce dont ils ont l'habitude).

J'ai trouvé Xataface : http://www.xataface.com/

En connaissez-vous d'autres ? Et lequel conseillerez-vous ?

Merci de vos retours.

Journal Appel aux bonnes volontés pour le développement du futur Digikam-5 avec Mysql/Mariadb

Posté par . Licence CC by-sa
16
11
nov.
2015

Bonjour
Digikam-4.xx n'est plus compatible avec Mysql depuis un certain moment. C'est dommage parce que l'utilisation de Sqlite ralentit beaucoup DK si l'on doit gérer beaucoup d'images. Je me permets de transmettre ici un appel de Gilles Caulier, principal développeur de Digikam, pour l'aider à corriger les bugs qui affectent Digikam-5 lors de son utilisation avec Mysql/Mariadb.

Forum Linux.général MariaDB (MySQL) MDB Tools → trés nombreux insert, extrêmement lent :( ? [résolu]

Posté par (page perso) . Licence CC by-sa
1
9
oct.
2015

Je dois remplacer l'usage d'Access de Microsoft par une application web sur MariaDB (alias MySQL).

Pour se faire, je développe l'application web sur une copie de la base de donnée Access.

La partie consultation est déjà opérationnelle ! Mais durant le développement de la partie insertion et modification, l'encodage se fait toujours sur la base de donnée Access. Je dois donc régulièrement "synchroniser", de la bd Access vers la bd MariaDB.

Pour se faire, j'utilise MDB Tools

Ça fonctionne bien…

Sauf (...)

Sortie de Flarum 0.1.0-beta

Posté par (page perso) . Édité par Yvan Munoz, Benoît Sibaud et Nils Ratusznik. Modéré par Benoît Sibaud. Licence CC by-sa
19
29
août
2015
PHP

Un équivalent en PHP/MySQL à Discourse vient d'être publié : Flarum. C'est un logiciel de forums, comprenant de nombreuses fonctionnalités et présentant un design sobre, élégant et moderne.

Il est compatible avec les smartphones, intègre un moteur de recherche, combine les fonctionnalités d'une liste de diffusion (on choisit ce qu'on veut recevoir comme message par mél) et les fonctionnalités d'un forum de discussion.

C'est un excellent outil pour remplacer les listes de discussion et les forums traditionnels. Le développement est très dynamique et des fonctionnalités futures très intéressantes : authentification unique SSO, intégration dans WordPress, mises à jour simplifiées, importation des données d'autres forums…

C'est libre (licence MIT) alors n'hésitez pas tester, signaler les bogues, aider à traduire.

Forum Linux.général [Zabbix]: problème de performance serveur

0
21
août
2015

Bonjour,
je sais qu'il y'a quelques gros fans zabbix qui trainent ici, je poste donc dans l'espoir que quelqu'un puisse m'orienter sur ma configuration.

Le contexte: 1 VM Ubuntu server 12.04 4 VCPU, 12GB ram, 80GB disk zabbix 2.2.8 + Mysql sur un autre serveur
Concernant zabbix:

*Number of hosts: 5472
*Number of items: 320402
*Number of triggers: 238018
*Number of users: 29
*Requiered server performance: 1228.98

Au niveau de la configuration du /etc/zabbix/zabbix_server.conf voici ce qui diffère de la (...)