Bonjour,
Je te recomande d'utiliser la POO pour ton script ! en effet moi j'aurais créer une class pour la BDD et une class pour ton action :
Un petit exemple de script :
<?php
class sql {
private $host="localhost";
private $dbname="ta base";
private $dbpassword="";
private $dbuser="root";
private $debug="ERRMODE_WARNING";
public $datab;
public $sql;
function __construct() {
try{
$this->datab = new PDO('mysql:host='.$this->host.';dbname='.$this->dbname,$this->dbuser,$this->dbpassword,array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
$this->datab->setAttribute(PDO::ATTR_ERRMODE,PDO::$this->debug);
}catch(PDOException $e){
echo 'Il y à un soucis de Connexion à mysql';
}
}
function doReq($sql,$result=true){
$this->sql=$sql;
$pre=$this->datab->query($sql);
if($result){
$d = $pre->fetchAll(PDO::FETCH_OBJ);
return $d;
}
}
}
Voila comme ca tu as un bojet que tu poura utiliser dans d'autres scripts !
Maintenant tu as une partie a créer qui te scan la table et l'archive en fonction de la taille.
<?php
class archiver {
var $db;
function __construct() {
// Pour simplifier tes requettes :
require('taclassPDO.php');
$this->db=new sql();
//on stock ca dans l'instance de class
//on compte le nombre d'entrées dans la table
if($this->countInputs()){
newTable();
}
}
/**
* Vérifie si le nombre d'enregistrements est inférieur à 1000
* @return boolean
*/
function countInputs() {
$res=$this->db->doReq("SELECT * FROM mdl_log");
if(count($res)>10000){
return true;
}else{
return false;
}
}
/**
* Pour créer une table automatiquement
*
*
*/
function newTable() {
//on crée la table d'indexation
$sqlIndexation = " CREATE TABLE IF NOT EXISTS `mdl_log_index` (
`id` bigint( 10 ) NOT NULL AUTO_INCREMENT,
`start_id` bigint( 10 ) NOT NULL DEFAULT '0',
`end_id` bigint( 10 ) NOT NULL DEFAULT '0',
PRIMARY KEY ( `id` ))";
//si la table d'incexation existe on ne la crée pas
$this->db->doReq($sqlIndexation);
//on récupére les enregistrements
$archivage_fields=$this->db->doReq("SELECT * FROM mdl_log LIMIT 10000 ORDER BY id ASC");
//on créer le nouvel index
$n=count($archivage_fields);
$firstId=$archivage_fields['0']->id;
$lastId=$archivage_fields[$n-1]->id;
$this->db->doReq("INSERT INTO `mdl_log_index` VALUE('', '$firstId', '$lastId')");
//on récupére l'id créer grace à une requette (question de gout perso)
$numeroDeTable= $this->db->doReq("SELECT * FROM mdl_log_index WHERE `start_id`='$firstId' AND `end_id`='$lastId'");
$number=$numeroDeTable['0']->id;
//ya plus q'a créer la table
$sql = "CREATE TABLE `mdl_log_".$number."` (
`id` bigint( 10 ) NOT NULL AUTO_INCREMENT,
`time` bigint( 10 ) NOT NULL DEFAULT '0',
`userid` bigint( 10 ) NOT NULL DEFAULT '0',
`ip` varchar( 45 ) NOT NULL DEFAULT '',
`course` bigint( 10 ) NOT NULL DEFAULT '0',
`module` varchar( 20 ) NOT NULL DEFAULT '',
`cmid` bigint( 10 ) NOT NULL DEFAULT '0',
`action` varchar( 40 ) NOT NULL DEFAULT '',
`url` varchar( 100 ) NOT NULL DEFAULT '',
`info` varchar( 255 ) NOT NULL DEFAULT '',
PRIMARY KEY ( `id` ) ,
KEY `mdl_log_coumodact_ix` ( `course` , `module` , `action` ) ,
KEY `mdl_log_tim_ix` ( `time`),
KEY`mdl_log_act_ix` ( `action` ) ,
KEY `mdl_log_usecou_ix` ( `userid` , `course` ) ,
KEY `mdl_log_cmi_ix` ( `cmid` ))";
$this->db->doReq($sql);
$sqlD="INSERT INTO `mdl_log_".$number."` VALUE ";
//puis on insert les resultats
foreach ($archivage_fields as $key => $value) {
$sqlD.= '('.$value->id.', '.$value->time.', '.$value->userid.', '.$value->ip.', '.$value->course.', '.$value->module.', '.$value->cmid.', '.$value->action.', '.$value->url.', '.$value->info.'),';
}
//on insert
$this->db->doReq($sqlD);
//puis on efface
$this->db->doReq("DELETE FROM `mdl_log` WHERE `id` > '$firstId' AND `id` > '$lastId' LIMIT 10000");
}
}
tu range ces deux fichier dans un repertoire tu require le fichier archiver.
tu fait juste un petit new archiver().
Puis tu relance ce script quand tu veux archiver avec une tache planifier de ton serveur et l'affaire est réglé.
voici mon mail contact moi n'hesite pas
[email protected]
bye ..
Bonjour,
Je te recomande d'utiliser la POO pour ton script ! en effet moi j'aurais créer une class pour la BDD et une class pour ton action :
Un petit exemple de script :
[php]
<?php
class sql {
private $host="localhost";
private $dbname="ta base";
private $dbpassword="";
private $dbuser="root";
private $debug="ERRMODE_WARNING";
public $datab;
public $sql;
function __construct() {
try{
$this->datab = new PDO('mysql:host='.$this->host.';dbname='.$this->dbname,$this->dbuser,$this->dbpassword,array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
$this->datab->setAttribute(PDO::ATTR_ERRMODE,PDO::$this->debug);
}catch(PDOException $e){
echo 'Il y à un soucis de Connexion à mysql';
}
}
function doReq($sql,$result=true){
$this->sql=$sql;
$pre=$this->datab->query($sql);
if($result){
$d = $pre->fetchAll(PDO::FETCH_OBJ);
return $d;
}
}
}
[/php]
Voila comme ca tu as un bojet que tu poura utiliser dans d'autres scripts !
Maintenant tu as une partie a créer qui te scan la table et l'archive en fonction de la taille.
[php]
<?php
class archiver {
var $db;
function __construct() {
// Pour simplifier tes requettes :
require('taclassPDO.php');
$this->db=new sql();
//on stock ca dans l'instance de class
//on compte le nombre d'entrées dans la table
if($this->countInputs()){
newTable();
}
}
/**
* Vérifie si le nombre d'enregistrements est inférieur à 1000
* @return boolean
*/
function countInputs() {
$res=$this->db->doReq("SELECT * FROM mdl_log");
if(count($res)>10000){
return true;
}else{
return false;
}
}
/**
* Pour créer une table automatiquement
*
*
*/
function newTable() {
//on crée la table d'indexation
$sqlIndexation = " CREATE TABLE IF NOT EXISTS `mdl_log_index` (
`id` bigint( 10 ) NOT NULL AUTO_INCREMENT,
`start_id` bigint( 10 ) NOT NULL DEFAULT '0',
`end_id` bigint( 10 ) NOT NULL DEFAULT '0',
PRIMARY KEY ( `id` ))";
//si la table d'incexation existe on ne la crée pas
$this->db->doReq($sqlIndexation);
//on récupére les enregistrements
$archivage_fields=$this->db->doReq("SELECT * FROM mdl_log LIMIT 10000 ORDER BY id ASC");
//on créer le nouvel index
$n=count($archivage_fields);
$firstId=$archivage_fields['0']->id;
$lastId=$archivage_fields[$n-1]->id;
$this->db->doReq("INSERT INTO `mdl_log_index` VALUE('', '$firstId', '$lastId')");
//on récupére l'id créer grace à une requette (question de gout perso)
$numeroDeTable= $this->db->doReq("SELECT * FROM mdl_log_index WHERE `start_id`='$firstId' AND `end_id`='$lastId'");
$number=$numeroDeTable['0']->id;
//ya plus q'a créer la table
$sql = "CREATE TABLE `mdl_log_".$number."` (
`id` bigint( 10 ) NOT NULL AUTO_INCREMENT,
`time` bigint( 10 ) NOT NULL DEFAULT '0',
`userid` bigint( 10 ) NOT NULL DEFAULT '0',
`ip` varchar( 45 ) NOT NULL DEFAULT '',
`course` bigint( 10 ) NOT NULL DEFAULT '0',
`module` varchar( 20 ) NOT NULL DEFAULT '',
`cmid` bigint( 10 ) NOT NULL DEFAULT '0',
`action` varchar( 40 ) NOT NULL DEFAULT '',
`url` varchar( 100 ) NOT NULL DEFAULT '',
`info` varchar( 255 ) NOT NULL DEFAULT '',
PRIMARY KEY ( `id` ) ,
KEY `mdl_log_coumodact_ix` ( `course` , `module` , `action` ) ,
KEY `mdl_log_tim_ix` ( `time`),
KEY`mdl_log_act_ix` ( `action` ) ,
KEY `mdl_log_usecou_ix` ( `userid` , `course` ) ,
KEY `mdl_log_cmi_ix` ( `cmid` ))";
$this->db->doReq($sql);
$sqlD="INSERT INTO `mdl_log_".$number."` VALUE ";
//puis on insert les resultats
foreach ($archivage_fields as $key => $value) {
$sqlD.= '('.$value->id.', '.$value->time.', '.$value->userid.', '.$value->ip.', '.$value->course.', '.$value->module.', '.$value->cmid.', '.$value->action.', '.$value->url.', '.$value->info.'),';
}
//on insert
$this->db->doReq($sqlD);
//puis on efface
$this->db->doReq("DELETE FROM `mdl_log` WHERE `id` > '$firstId' AND `id` > '$lastId' LIMIT 10000");
}
}
[/php]
tu range ces deux fichier dans un repertoire tu require le fichier archiver.
tu fait juste un petit new archiver().
Puis tu relance ce script quand tu veux archiver avec une tache planifier de ton serveur et l'affaire est réglé.
voici mon mail contact moi n'hesite pas
[email protected]bye ..