bonjour à tous ,
je vous explique le problématique
je dois récupérer des informations depuis des bases de données clients externes et puis les insérer de mon côté après pour des autres utilisations :
j'ai crée ces 2 scripts qui gère les traitements de mon côté
class importLink {
var $dbLayer;
var $xmlDoc;
public function getExternalIdByXmlFile($xmlFile) {
$this->xmlDoc=new DOMDocument();
$this->xmlDoc->Load($xmlFile);
$extIds=$this->xmlDoc->childNodes->item(0)->childNodes;
$externalId = array();
foreach($extIds as $extId) {
$externalId[] = $extId->textContent;
}
return $externalId;
}
public function insertIdImported($internalId,$externalId,$dbLayer) {
$this->dbLayer = $dbLayer;
//Insert external_id with unique value of internal_id in the client_links table
$linkSql = "insert into client_links(internal_id,external_id) values (:internalId,:externalId)";
$this->dbLayer->executeSQL($linkSql,array(":internalId"=>$internalId,":externalId"=>$externalId));
echo "<strong> Saving External id :</strong>".$externalId."<br>";
}
}
et l'autre pour les setting des params et l'appel des méthodes des classes
require_once("importLink.php");
require_once ("allDBAccess.php");
//Parameter of internal table
$driver = "pgsql";
$host = "localhost";
$databasename ="xxxxxxx";
$login = "postgres";
$pass = "admin";
$internalDbConn = new allDBAccess($driver,$host,$databasename,$login,$pass);
$objectImportLink = new importLink();
$extID = $objectImportLink->getExternalIdByXmlFile("http://adresseDu clientcontenantlefichierxml/ext_id.xml");
if($extID!=null and sizeof($extID)>0) {
for($i=0;$i<sizeof($extID);$i++) {
$internalId = rand();
$resultImport = $objectImportLink->insertIdImported($internalId,$extID[$i],$internalDbConn);
}
}else{
echo "NO EXTERNAL ID TO IMPORT";
}
J'ai créé aussi ces 2 fichiers que je pense fournir au client pour qu'ils puissent me géréner un fichier xml contenant les données voulues
class generateXmlofExtid {
var $dbLayer;
public function getExternalId($fieldName,$tableName,$dbLayer) {
$this->dbLayer = $dbLayer;
//getting the external_id
$sqlExternalId = "select $fieldName from $tableName";
$resultExtId = $this->dbLayer->executeSQL($sqlExternalId,array());
if($resultExtId!=null || sizeof($resultExtId)!=0) {
return $resultExtId;
}else{
return false;
}
}
public function getExternalIdfromDb($sqlExternalId,$dbLayer ) {
$this->dbLayer = $dbLayer;
//getting the external_id
$resultExtId = $this->dbLayer->executeSQL($sqlExternalId,array());
if($resultExtId!=null || sizeof($resultExtId)!=0) {
return $resultExtId;
}else{
return false;
}
}
public function generateXml($resultXmlData) {
$xml = '<?xml version="1.0" encoding="ISO-8859-1"?>';
$xml.='<client>';
for($i=0;$i<count($resultXmlData);$i++) {
$xml .= '<externalId id ="'.$i.'">'.$resultXmlData[$i]['id'].'</externalId>';
}
$xml .= '</client>';
$fp = fopen("ext_id.xml", 'w+');
fputs($fp, $xml);
fclose($fp);
echo 'Export XML effectue !<br><a href="ext_id.xml">Voir le fichier</a>';
}
}
et un autre fichier principal
require_once("generateXmlofExtid.php");
require_once("allDBAccess.php");
$driver = "mysql";
$host = "localhost";
$databasename ="customers";
$login = "root";
$pass = "";
$tableName = "informations";
$fieldName = "id";
$pgDBConn = new allDBAccess($driver,$host,$databasename,$login,$pass);
$newXml = new generateXmlofExtid();
$resultXmlData = $newXml->getExternalId($fieldName,$tableName,$pgDBConn);
print "<pre>";
print_r($resultXmlData);
print "</pre>";
if($resultXmlData!=null || sizeof($resultXmlData)>0) {
$newXml->generateXml($resultXmlData);
}
Là j'ai pris un exemple avec une base de données mysql
Le probleme se pose sur allDbAccess.php appelé du coté des clients
car alldbAccess.php est une classe qui herite d'un autre classe abstraite dans mon serveur
require_once ("BaseDBAccess.php");
class allDBAccess extends BaseDBAccess {
public function getLastInsertedId($param) {
return $this->oPdo->lastInsertId($param);
}
}
qui herite de
abstract class BaseDBAccess {
var $oPdo=null;
public function __construct($sDriver='',$sHost='',$sDatabase='',$sUser='',$sPassword='') {
$sDrive = $sDriver.':dbname='.$sDatabase.";host=".$sHost;
$this->oPdo=new PDO($sDrive, $sUser, $sPassword);
$this->oPdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
public function executeSQL($sql, $parameters) {
//1. Prepare the statement
$stamement=$this->oPdo->prepare($sql);
//2.execute the statement
$stamement->execute($parameters);
//3. return the result
if(!ereg('insert',$sql)) {
return $stamement->fetchAll();
}
}
abstract protected function getLastInsertedId($tableName);
}
Donc ma question est que
Si je voudrais faire executer par les clients externes mes fichiers config.php et generateXmlofExtid.php comment devais-je procéder pour eviter toute faille de sécurité.
j'ai compris si je fais un require("http:") mon fichier sera interprété
je dois le faire par ftp alors require("ftp:")?
et puis après est_il possible un traitement qui va m'envoyer ce fichier xml généré du côté du client xml dans un repertoire de mon serveur ou je dois faire comme ci-dessus
Code : Tout sélectionner
$extID = $objectImportLink->getExternalIdByXmlFile("http://localhost/xxxxxx/php/sources/logging/ext_id.xml");
c'est à dire que le client va me fournir le chemin d'accès au fichier xml générer à chaque fois que celui ci soit générer?
merci pour votre conseil