Newsgroup: it.comp.www.php
Titolo: Plesk e databases

ciao ragazzi, ho un problemino..
io ho uno script dove creo dinamicamente da php vari database mysql,
ci lavoro con backup e restore, ecc... e fin qui tutto bene..
Il problema è che plesk non mi vede i database creati da script, e
quindi non riesce a farne i backup..
tuttavia dal phpmyadmin lanciato dal plesk, e da script, i database si
comportano cmq correttamente senza problemi, quindi credo che il
problema sia 'solo' che plesk non 'vede' tutti i vari database (e non
vede nemmeno gli utenti che creo da phpmyadmin o da codice)
a qualcuno è già capitato?
come potrei risolverlo?

 come potrei risolverlo?
Per ogni operazione che comporta una gestione da amministratore (es. 
creazione database) ed è presente un cosidetto pannello di controllo è 
consigliato usare le API dello stesso per comunicare eventuali modifiche 
manuali o fatte con programmi diversi.
http://download1.parallels.com/Plesk/Plesk8.6/Doc/en-US/plesk-8.6-api-rpc/index.htm?fileName=34398.htm
Se non si è pratici dell'interfacciamento con le api plesk permette di fare 
le stesse operazioni, o quasi, con le utility da riga di comando.
Nel caso specifico dovresti utilizzare l'eseguibile "database" (database.exe 
su server windows) per automatizzare la creazione/modifica dei database e 
rispettivi utenti.
http://download1.parallels.com/Plesk/Plesk8.6/Doc/en-US/plesk-8.6-unix-cli/index.htm?fileName=40244.htm
Documentazione API ed altro per Plesk
http://swdn.swsoft.com/en/library/plesk/
Saluti 

 Saluti
grazie mille, hai colpito al centro del mio problema!
ora mi studio bene bene i link che mi hai passato e con calma trovo la
soluzione.
speroc he quelle API siano gestibili da php, possibilmente senza lo
zendframework..
cmq, il mio problema è che ho un'applicazione che quando l'utente si
registra, gli viene creato il suo database in automatico da script
php, non posso farlo a  mano da plesk..
l'unico modo è come dici te 'comunicare' a plesk la creazione del
nuovo database (se si blocca con i nuovi, non oso immaginare che
problemi dà coi database eliminati da script)
cmq grazie mille!

ok, mi sono visto le api di plesk e sono molto semplici (per quel che
devo fare io, almeno)
mi basta creare l'xml dell'add database e il gioco è fatto..
il mio problema è (che non sono riuscito a capire dalla
documentazione): io creo il filexml, ok, ma poi, come lo 'spedisco' al
plesk?
glielo mando via post? via get?
a quale url?

 a quale url?
Via Post
C'è l'esempio nella documentazione
http://download1.parallels.com/Plesk/Plesk8.2/Doc/plesk-8.2-api-rpc-guide/33181.htm
leggi la documentazione... cerca altri esempi se non sono chiari. Richiama 
la semplice riga di comando se proprio non riesci a concludere niente(non è 
un offesa ma una soluzione).
Saluti
Leonardo Armando Iarrusso
http://www.j2be.com
 

Grazie mille per l'aiuto, posto i miei risultati se mai dovrebbero
tornare utili a qualcuno nella mia stessa situazione:
Elenco di API XML Plesk, gestibili tranquillamente da php tramite
CURL:
http://download1.parallels.com/Plesk/Plesk8.4/Doc/en-US/plesk-8.4-api-rpc/index.htm
Per chi non vuole usare il DOM per parsare i result delle varie
richieste, questa funzione è molto comoda (anche se abbastaza lenta
come esecuzione):
http://www.bin-co.com/php/scripts/xml2array/
e infine, questo è il codice che ho 'mixato' io:
class ApiRequestException extends Exception {}
function curlInit($host, $login, $password){
	$curl = curl_init();
	curl_setopt($curl, CURLOPT_URL, "https://{$host}:8443/enterprise/
control/agent.php");
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($curl, CURLOPT_POST, true);
	curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
	curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
	curl_setopt($curl, CURLOPT_HTTPHEADER, array("HTTP_AUTH_LOGIN:
{$login}", "HTTP_AUTH_PASSWD: {$password}", "HTTP_PRETTY_PRINT: TRUE",
"Content-Type: text/xml"));
	return $curl;
}
function sendRequest($curl, $packet){
	curl_setopt($curl, CURLOPT_POSTFIELDS, $packet);
	$result = curl_exec($curl);
	if (curl_errno($curl)) {
		$errmsg = curl_error($curl);
		$errcode = curl_errno($curl);
		curl_close($curl);
		throw new ApiRequestException($errmsg, $errcode);
	}
	curl_close($curl);
	return $result;
}
/**
 * xml2array() will convert the given XML text to an array in the XML
structure.
 * Link: 
http://www.bin-co.com/php/scripts/xml2array/
 * Arguments : $contents - The XML text
 *				$get_attributes - 1 or 0. If this is 1 the function will get the
attributes as well as the tag values - this results in a different
array structure in the return value.
 * Return: The parsed XML in an array form.
 */
function xml2array($contents, $get_attributes=1){
	if(!$contents) return array();
	if(!function_exists('xml_parser_create')){
		print "'xml_parser_create()' function not found!";
		return array();
	}
	//Get the XML parser of PHP - PHP must have this module for the
parser to work
	$parser = xml_parser_create();
	xml_parser_set_option( $parser, XML_OPTION_CASE_FOLDING, 0 );
	xml_parser_set_option( $parser, XML_OPTION_SKIP_WHITE, 1 );
	xml_parse_into_struct( $parser, $contents, $xml_values );
	xml_parser_free( $parser );
	if(!$xml_values) return;//Hmm...
	//Initializations
	$xml_array = array();
	$parents = array();
	$opened_tags = array();
	$arr = array();
	$current = &$xml_array;
	//Go through the tags.
	foreach($xml_values as $data){
		unset($attributes,$value);//Remove existing values, or there will be
trouble
		//This command will extract these variables into the foreach scope
		// tag(string), type(string), level(int), attributes(array).
		extract($data);//We could use the array by itself, but this cooler.
		$result = '';
		if($get_attributes){//The second argument of the function decides
this.
			$result = array();
			if(isset($value)) $result['value'] = $value;
			//Set the attributes too.
			if(isset($attributes)){
				foreach($attributes AS $attr => $val){
					if($get_attributes == 1) $result['attr'][$attr] = $val; //Set all
the attributes in a array called 'attr'
					/**  :TODO: should we change the key name to '_attr'? Someone may
use the tagname 'attr'. Same goes for 'value' too */
				}
			}
		}else if(isset($value)){
			$result = $value;
		}
		//See tag status and do the needed.
		if($type == "open"){//The starting of the tag '<tag>'
			$parent[$level-1] = &$current;
			if(!is_array($current) OR (!in_array($tag, array_keys($current))))
{//Insert New tag
				$current[$tag] = $result;
				$current = &$current[$tag];
			}else{ //There was another element with the same tag name
				if(isset($current[$tag][0])){
					array_push($current[$tag], $result);
				}else{
					$current[$tag] = array($current[$tag],$result);
				}
				$last = count($current[$tag]) - 1;
				$current = &$current[$tag][$last];
			}
		}else if($type == "complete"){//Tags that ends in 1 line '<tag />'
			//See if the key is already taken.
			if(!isset($current[$tag])){//New Key
				$current[$tag] = $result;
			}else{//If taken, put all things inside a list(array)
				if((is_array($current[$tag]) and $get_attributes == 0)//If it is
already an array...
						or (isset($current[$tag][0]) and is_array($current[$tag][0]) and
$get_attributes == 1)){
					array_push($current[$tag],$result); // ...push the new element
into that array.
				}else{//If it is not an array...
					$current[$tag] = array($current[$tag],$result); //...Make it an
array using using the existing value and the new value
				}
			}
		}else if($type == 'close'){ //End of tag '</tag>'
			$current = &$parent[$level-1];
		}
	}
	return($xml_array);
}
//funzione di esempio
function createDatabaseByPlesk($dbName){
	$host = 'xx.xx.xxx.xxx'; //host del server
	$login = 'xxxxx'; //username plesk
	$password = 'xxxxxxx'; //password plesk
	$domainId = xx; //id del dominio
	//Richiesta, i tag variano in base alla richiesta che si desidera
	$creazioneDb = "<packet version=\"1.4.2.0\">";
	$creazioneDb .= "<database>";
	$creazioneDb .= "<add-db>";
	$creazioneDb .= "<domain-id>$domainId</domain-id>";
	$creazioneDb .= "<name>$dbName</name>";
	$creazioneDb .= "<type>mysql</type>";
	$creazioneDb .= "</add-db>";
	$creazioneDb .= "</database>";
	$creazioneDb .= "</packet>";
	$curl = curlInit($host, $login, $password);
	$responseDb = sendRequest($curl, $creazioneDb);
	$rayResponseDb = xml2array($responseDb, 0);
	$resultDb = $rayResponseDb['packet']['database']['result']['add-db']
['status'];
	if($resultDb == 'ok'){
		$idDb = $rayResponseDb['packet']['database']['result']['add-db']
['id'];
	}else{
		die($rayResponseDb['packet']['database']['result']['add-db']
['errtext']);
	}
	return $idDb;
}
$creazioneDB = createDatabaseByPlesk('prova');
echo "database creato, id: $creazioneDB";