web-dev-qa-db-fra.com

Comment télécharger et installer la base de données de plugins à distance

J'ai le problème suivant. J'ai eu un plugin qui est énorme en raison de toutes les données nécessaires. Les données concernent tous les pays et villes du monde, ainsi qu'une base de données maxmind.mmdb.

1 - Issue

Actuellement, tout est emballé dans le plug-in, ce qui en fait un plug-in de 20 Mo, ce qui crée un problème pour les utilisateurs dont la taille de téléchargement est limitée, ce qui les force à décompresser et à télécharger manuellement par FTP le plug-in complet.

2 - Issue

Pour charger toutes les villes, j'ai obtenu 6 fichiers csv que je charge lors de l'activation à l'aide du code suivant:

if ($wpdb->get_var( "SHOW TABLES LIKE '{$city_table_name}'") != $city_table_name) {
    dbDelta( $city_table );

    for ( $i = 1; $i <= 6; $i ++ ) {
        $csv_file  = dirname( __FILE__ ) . '/data/cities' . $i . '.csv';
        $load_data = "LOAD DATA LOCAL INFILE '{$csv_file}' INTO TABLE `{$wpdb->base_prefix}geot_cities` CHARACTER SET UTF8 FIELDS TERMINATED BY ',' ENCLOSED BY '\"' ESCAPED BY '\\\' LINES TERMINATED BY '\\n' ( `country_code` , `city`);";
        $wpdb->query( $load_data );
    }
}

Cela fonctionne sur presque tous les hébergements mais cela échoue dans certains d'entre eux, comme par exemple WPEngine.

Solution posible

Je pensais donc que, pour résoudre les deux problèmes en même temps, je pourrais télécharger toutes les données sur mon instance Amazon et une fois le plug-in activé, l'utilisateur téléchargerait et installerait toutes les données en cliquant simplement sur un bouton.

Des questions

  • Est-ce quelque chose de viable ou de faisable en utilisant les fonctions WordPress ou je vais faire face à d’autres incompatibilités d’hébergement. Quelqu'un a-t-il déjà utilisé quelque chose comme ça?
  • Si cela est faisable, quel serait le meilleur moyen de stocker les données? Parce qu'au lieu de charger le csv, je devrai remplacer cela pour une sorte de requête d'insertion de données afin de le rendre plus compatible.

J'espère que quelqu'un pourra nous éclairer un peu. Merci!

1
chifliiiii

Pour répondre directement à vos questions:

Votre solution proposée est en effet viable. Assurez-vous simplement que votre solution CDN (Amazon S3, par exemple) est configurée pour accepter les connexions sécurisées (http) et non sécurisées (https).

En ce qui concerne votre prochaine question, CSV est par nature un excellent moyen de stocker une représentation d'une table. Une autre alternative (sans voir un exemple de jeu de données avec lequel vous travaillez) est XML. Cela pourrait également convenir, car cela permet des relations un à plusieurs.

JSON peut également convenir pour faciliter la transition entre le texte et une base de données.

Cela dit, la meilleure solution consiste à créer un service d'API vous-même et à permettre à votre plug-in de communiquer avec lui.

0
pwbred

Je peux voir deux options:

  • Vous créez une API avec les informations sur la ville et faites en sorte que le plug-in utilise l'API
  • Vous créez des add-ons distincts pour votre plugin, un pour chaque fichier CSV.
3
Bruno Cantuaria

Quelques idées:

  1. ENFERMÉ PAR '\"'

Ce n'est pas un must dans ce cas. Sans "caractères, vous pouvez réduire la taille de vos fichiers .csv. Cela pourrait aider seul.

  1. Utiliser SQLite peut être une autre option. Si les codes postaux sont uniquement des chiffres, cela peut enregistrer un fichier de base de données plus petit qu'un fichier .csv, mais je ne l'ai pas testé. Cela vaut la peine d'essayer. Et vous pouvez l'utiliser comme base de données. WP ne le supporte pas par défaut, vous devez donc écrire ou utiliser d'autres fonctions.
  2. Utilisez les fonctions de l'API HTTP ! Ces fonctions sont également utilisées par le gestionnaire de plug-in. Donc, si cela fonctionne là-bas, vous pouvez également les utiliser ici.

Stockage des données: mon meilleur choix (si LOAD DATA n'est pas autorisé) consiste à stocker des instructions JSON ou INSERT compressées sur votre instance Amazon.

Vous pouvez également vérifier les fonctions désactivées sur WP Engine ici.

0
Szektor