Compte tenu de vos commentaires à ma réponse précédente, je vous suggère de créer un Joomla! CLI (jetez un oeil dans le répertoire /cli
de votre installation Joomla 2.5+).
Nous avons fait la même chose que vous pour la version Pro de notre extension Easystaging que nous avons développée pour un usage interne, pour gérer les sites Web des clients avec des processus d'approbation de contenu particuliers. La version interne a dû répondre aux exigences de nos clients plus importants.
Effectivement, nous avons créé une classe qui hérite de JApplicationCli
et peut être lancée par CRON ou à partir de l'interface utilisateur de nos composants. par exemple.
class EasyStaging_PlanRunner extends JApplicationCli
{
/**
* Entry point for the plan funner (yes it's more fun)
*
* @return void
*
* @since 2.5
*/
public function doExecute()
{
}
}
Si elle est lancée par l'utilisateur à partir de Joomla nous utilisons une méthode utilitaire pour vous assurer que les fourches du système hors tension correctement:
/**
* Runs the script in the background by scheduling it with the `at` daemon and returns the result
*
* @param string $pathToScript A path to the script to run e.g. "/path/to/my/cli/app.php"
*
* @return int
*/
private function _runScriptInBackground($pathToScript)
{
$cmdPath = "/usr/bin/php -q $pathToScript";
// We need '2>&1' so we have something to pass back
$cmd = 'echo "' . $cmdPath . '" | at now 2>&1';
$result = shell_exec($cmd);
return $result;
}
Depuis ce forum fonctionne efficacement en tant que script de ligne de commande un lot des limites sont beaucoup plus lâches mais ils ne vous permettront toujours pas d'avoir une très grande table. (Certains de nos clients ont plusieurs milliers d'articles ou de moins bons éléments de contenu K2). Pour contourner cela, nous avons écrit une méthode d'exportation appelée à partir de notre boucle de répartition principale de doExecute()
pour récupérer et exporter des lignes de table dans des lots raisonnables. Pour nous raisonnable a été déterminée par la valeur des bases de données distantes max_allowed_packet
et nous créons un fichier SQL avec des déclarations qui correspondent à cette limite avec une petite allocation pour divers frais généraux. Vous ne pouvez pas avoir ces problèmes, mais même si vous devriez probablement décomposer votre SQL en déclarations de taille raisonnable insert
. Une fois le plan terminé, nous compressons tous les fichiers et les envoyons à l'archive.
Avez-vous essayé d'exporter chaque table dans son propre fichier séparé? – iTom
Oui. j'ai essayé. certains exportent mais à certaines tables il donne une erreur d'exécution. – Joomladev
Vous êtes SOL. Si l'une de ces tables nécessite plus de 30 secondes à traiter, un délai d'attente se produira; même casser la table basse DB par table. Et je doute fortement que vous allez les exporter ligne par ligne, puis utiliser lecture/écriture encore et encore au niveau du serveur; ce serait un tel porc de ressources. – Ohgodwhy