Ce script est inspiré de la contrib suivante : Déplacer un document vers un répertoire autre que IMG
Comment ça marche :
[(#LOGO_DOCUMENT|#URL_DOCUMENT|deplacer_document_ftp{"http://www.monsite.fr/","doc/img/","jpg,doc,ppt"})]
ce que fait le script :
- Ouvrir une connexion ftp;
- Copie le fichier dans le repertoire de destination ;
- Met à jour la table spip_documents ;
- Renvoie un lien vers le fichier sur le site distant.
ce qu’il ne fait pas :
- Il ne crée pas le dossier de destination s’il n’existe pas.
Le code de ftp.php appelé dans mes_fonctions
<?php
class myFTP
{
var $serveurFTP;
var $loginUtilisateur;
var $motdepasseUtilisateur;
var $id_connexion;
var $login_result;
//initialisation et connexion au ftp
function connecter($serveur,$login,$motdepasse)
{
$this->serveurFTP = $serveur;
$this->loginUtilisateur = $login;
$this->motdepasseUtilisateur = $motdepasse;
$this->id_connexion = ftp_connect($this->serveurFTP);
$this->login_result = ftp_login($this->id_connexion,$this->loginUtilisateur , $this->motdepasseUtilisateur);
if(!$this->id_connexion || !$this->login_result)
{ return false;}
else
{return true;}
}
//deconnecter le ftp
function deconnecter(){ ftp_close($this->id_connexion); }
//upload d'un fichier en mode synchrone
function uploader($destination_file,$source_file)
{
$upload = ftp_put($this->id_connexion, $destination_file, $source_file, FTP_BINARY);
// vérification du status
if (!$upload)
{
return false;
}
else
{
return true;
}
}
//changement de dossier sur le ftp
function changeDir($_dir)
{
ftp_chdir($this->id_connexion,$_dir);
}
//on teste si le fichier existe
function fichierExiste($strFichier)
{
if(ftp_size($this->id_connexion,$strFichier ) == -1)
{ return false;}
else
{ return true;}
}
}
?>
La fonction a ajouter à mes_fonctions.php3
<?php
/**
/*
* +----------------------------------+
* Nom du Filtre : deplacer_document_ftp()
* +----------------------------------+
* Date : février 2004
* Auteur : Pierre
* pierre@wanadoo.fr
* +-------------------------------------+
* Fonctions de ce filtre :
* deplacer un document sur un FTP
* modifier le chemin indiqué dans la BDD
* pointer sur le nouveau chemin pour les URL affichées en HTML.
*
* Ce filtre est basé deplacer_document (dispo sur spip_contrib) réalisé par :
* seb
* schoupas@opac-montpellier.fr
*
*
* +-------------------------------------+
*
* $site_distant = url du site : http://monsite.fr/
* $repertoire_dest = repertoire de destination sur le ftp : test/
* $type : type des docs a transferer : "doc,pdf,jpg"
*
**/
//la classe qui fait du ftp
include_once("ftp.php");
function deplacer_document_ftp($url,$site_distant,$repertoire_dest,$type)
{
/* A MODIFIER */
$mon_site_ftp = "ftp.monsite.fr";
$mon_identifiant_ftp = "user@monsite.fr";
$mon_pass_ftp = "******";
$type = explode(",",$type);
if(is_array($type) ) $type = join ("|", $type);
$monftp = new myFtp();
$monftp->connecter($mon_site_ftp,$mon_identifiant_ftp,$mon_pass_ftp);
$monftp->changeDir($repertoire_dest);
// on cherche dans le code HTML d'affichage les chemins d'accès spécifiques aux docs
if(ereg("(IMG)/($type)/([A-Za-z_]*).($type)",$url,$reg) )
{
$chemin_old = $reg[1]."/".$reg[2]."/";
$fichier=$reg[3].".".$reg[4];
//on récupère l'id du document et de l'article auquel il est rattaché dans la BDD
$query = "SELECT d.id_document,da.id_article,id_rubrique FROM spip_documents d,spip_documents_articles da,spip_articles a WHERE d.id_document=da.id_document AND da.id_article=a.id_article AND fichier ='".$chemin_old.$fichier."'";
$result = spip_query($query);
$row = spip_fetch_array($result);
$id_document = $row["id_document"];
$id_rubrique = $row["id_rubrique"];
if($monftp->uploader($fichier, $chemin_old.$fichier))
{
//si la copie réussit,on l'efface du repertoire local
unlink($chemin_old.$fichier);
//on modifie le nom du fichier dans la BDD
$query = "SELECT fichier from spip_documents WHERE id_document=".$id_document;
$result = spip_query($query);
$row = spip_fetch_array($result);
if($row['fichier']==$chemin_old.$fichier)
{
$query = "UPDATE spip_documents SET fichier = '".$repertoire_dest.$fichier."' WHERE id_document=".$id_document;
$result = spip_query($query);
}
$url = ereg_replace($chemin_old.$fichier,$site_distant.$repertoire_dest.$fichier,$url);
}
//on retourne l'url modifiée
return $url;
$monftp->deconnecter();}
//si rien ne ressemble à un chemin type IMG/doc on retourne l'url telle quelle
else
{
$url = ereg_replace("href='","href='".$site_distant , $url);
return $url ;
}
}
?>
Aucune discussion
Ajouter un commentaire
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
Merci d’avance pour les personnes qui vous aideront !
Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.
Suivre les commentaires : |