Browse Source

Report de 66067 :

Ne faire qu'une seule fois par hit le déplacement de n documents. Sinon dans le cas d'une insertion de plusieurs docs venant d'un zip, on explose le temps de connexion à la base.
svn/root/tags/v2.0.5
yffic@cousumain.info 9 years ago
parent
commit
1c22ea399d
  1. 38
      hasher_fonctions.php
  2. 2
      paquet.xml

38
hasher_fonctions.php

@ -39,11 +39,13 @@ function hasher_deplacer_document($id_document, $corriger=false, $rev=false) {
// 1. recuperer les donnees du document
// et verifier qu'on peut le hasher
if (!$id_document = intval($id_document))
if (!$id_document = intval($id_document)){
spip_log("Erreur hasher_deplacer_document intval $id_document", 'hash');
return false;
}
if (!$s = spip_query('SELECT fichier FROM spip_documents WHERE id_document='.$id_document)
OR !$t = spip_fetch_array($s)) {
spip_log("Erreur hasher_deplacer_document select doc=$id_document ".var_export($s, true), 'hash'. _LOG_ERREUR);
spip_log("Erreur hasher_deplacer_document select doc=$id_document ".var_export($s, true), 'hash');
return false;
}
$src = $t['fichier'];
@ -54,15 +56,15 @@ function hasher_deplacer_document($id_document, $corriger=false, $rev=false) {
$dir_ref = preg_match(',^IMG/,', $src)
? _DIR_RACINE : _DIR_IMG;
// On fabrique le nom du fichier dest
// On fabrique le nom du fichier dest
if (!$dest = hasher_adresser_document($src, $rev)) {
spip_log("Erreur hasher_adresser_document($src) rev : $rev", 'hash'. _LOG_ERREUR);
spip_log("Erreur hasher_adresser_document($src) rev : $rev", 'hash');
return false;
}
// si le src n'existe pas, ciao, enfin presque
if (!file_exists($dir_ref.$src)) {
spip_log("Erreur hasher_deplacer_document fichier $dir_ref $src n'existe pas", 'hash'. _LOG_ERREUR);
spip_log("Erreur hasher_deplacer_document id_document $id_document fichier $dir_ref $src n'existe pas", 'hash');
// si le src n'existe pas, on verifie qu'il n'a pas deja ete déplace (ie le dest existe),
// et si oui, on modifie juste le chemin en base...
@ -70,14 +72,14 @@ function hasher_deplacer_document($id_document, $corriger=false, $rev=false) {
if(file_exists(_DIR_IMG.$dest)){
// on note la destination finale
if (!spip_query('UPDATE spip_documents SET fichier="'.$img.$dest.'" WHERE id_document='.$id_document)) {
spip_log("Erreur update correction $img $dest doc $id_document", 'hash'. _LOG_ERREUR);
spip_log("erreur hasher_deplacer_document update correction $img $dest doc $id_document", 'hash');
return false;
} else {
spip_log("hasher_deplacer_document fichier "._DIR_IMG."$dest existe deja, Table corrigee", 'hash'._LOG_INFO);
spip_log("hasher_deplacer_document fichier "._DIR_IMG."$dest existe deja, Table corrigee", 'hash');
return true ;
}
} else {
spip_log("hasher_deplacer_document fichier "._DIR_IMG."$dest n'existe pas", 'hash'._LOG_INFO);
spip_log("hasher_deplacer_document fichier "._DIR_IMG."$dest n'existe pas", 'hash');
}
}
return false ;
@ -93,7 +95,7 @@ function hasher_deplacer_document($id_document, $corriger=false, $rev=false) {
// 2. creer au besoin les sous-repertoires
if (!is_dir(_DIR_IMG.$dir = dirname($dest))
AND !mkdir(_DIR_IMG.$dir, _SPIP_CHMOD, /* recursive, php5 */ true)) {
spip_log("Erreur hasher_deplacer_document mkdir($dir)", 'hash'. _LOG_ERREUR);
spip_log("erreur hasher_deplacer_document mkdir($dir)", 'hash');
return false;
}
@ -101,18 +103,18 @@ function hasher_deplacer_document($id_document, $corriger=false, $rev=false) {
// on note les fichiers en cours de deplacement avec un - devant ; si
// ca casse on saura reparer
if (!spip_query('UPDATE spip_documents SET fichier=CONCAT("-", fichier) WHERE id_document='.$id_document)) {
spip_log("Erreur update 1", 'hash'. _LOG_ERREUR);
spip_log("erreur hasher_deplacer_document update 1", 'hash');
return false;
}
// on deplace
if (!rename($dir_ref.$src, _DIR_IMG.$dest)) {
spip_log("Erreur rename", 'hash'. _LOG_ERREUR);
spip_log("erreur hasher_deplacer_document rename", 'hash');
spip_query('UPDATE spip_documents SET fichier="'.$src.'" WHERE id_document='.$id_document);
return false;
}
// on note la destination finale
if (!spip_query('UPDATE spip_documents SET fichier="'.$img.$dest.'" WHERE id_document='.$id_document)) {
spip_log("Erreur update 2", 'hash'. _LOG_ERREUR);
spip_log("erreur hasher_deplacer_document update 2", 'hash');
return false;
}
@ -130,16 +132,21 @@ function hasher_deplacer_document($id_document, $corriger=false, $rev=false) {
* @return bool
*/
function hasher_deplacer_n_documents($n, $corriger=false, $rev=false) {
spip_log("hasher_deplacer_n_documents n $n corriger $corriger", 'hash'. _LOG_INFO);
$docs = array();
static $dejafait = false;
// Une seule fois par hit (cas de l'insertion de plusieurs docs venant d'un zip)
if ($dejafait) return $docs ;
$dejafait = true;
if (!$n = intval($n)
OR !$s = spip_query($q = "SELECT id_document FROM spip_documents WHERE fichier REGEXP '^(IMG/)?[^/]+/"
. ($rev ? "./././" : "")
."[^/]+$' AND distant='non' ORDER BY date DESC LIMIT $n")) {
spip_log("Erreur requete $q", 'hash'. _LOG_ERREUR);
spip_log("erreur hasher_deplacer_n_documents requete $q", 'hash');
return false;
}
$docs = array();
while ($t = spip_fetch_array($s)) {
$id_document = $t['id_document'];
if (hasher_deplacer_document($id_document, $corriger, $rev))
@ -153,6 +160,7 @@ function hasher_deplacer_n_documents($n, $corriger=false, $rev=false) {
* @return array
*/
function hasher_compter_documents() {
$s = spip_query($q = "SELECT COUNT(*) FROM spip_documents WHERE fichier REGEXP '^(IMG/)?[^/]+/"
."[^/]+$' AND distant='non'");
$non = array_pop(spip_fetch_array($s));

2
paquet.xml

@ -1,7 +1,7 @@
<paquet
prefix="hasher"
categorie="performance"
version="2.0.0"
version="2.0.1"
etat="test"
compatibilite="[3.0.0;3.0.99]"
logo="prive/themes/spip/images/hasher-32.png"

Loading…
Cancel
Save