Problème de variables php vers sh

[Résolu]
Signaler
Messages postés
125
Date d'inscription
dimanche 9 août 2009
Statut
Membre
Dernière intervention
29 juillet 2021
-
Messages postés
29984
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
26 juillet 2021
-
Bonjour,

Pour les personnes intéressées, voici le code php & sh complet, par contre je sais pas si on peut faire plus propre, j'ai bien entendu donné des exemples de username, password et nom de domaine pour des raisons de sécurité.

Et je n'arrive pas à passer mes variables dans mon shell (voir code plus bas).

Code page PHP :

<?php
//affichage des erreurs php
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
require('config.php');

$username="supraSupra";
$password="test";

$path = "/var/www/".$username;
if (!is_dir($path)) {
    mkdir($path, 0777, true);
}
$vhost = $username.".conf";
$query_mysql_user = "CREATE USER $username@'%' IDENTIFIED BY '$password'";
$res_mysql_user = mysqli_query($conn, $query_mysql_user);
$query_mysql_grant = "GRANT USAGE ON * . * TO $username@'%' IDENTIFIED BY '$password'";
$res_mysql_grant = mysqli_query($conn, $query_mysql_grant);
$query_mysql_create_db = "CREATE DATABASE IF NOT EXISTS $username DEFAULT CHARACTER SET = utf8 DEFAULT COLLATE = utf8_general_ci";
$res_mysql_create_db = mysqli_query($conn, $query_mysql_create_db);
$query_mysql_all_privilege = "GRANT ALL PRIVILEGES ON $username . * TO $username@'%'";
$res_mysql_all_privilege = mysqli_query($conn, $query_mysql_all_privilege);
$query_ftp = "INSERT INTO `ftpd` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `comment`, `ipaccess`, `QuotaSize`, `QuotaFiles`) VALUES ('$username', '1', '".hash('MD5', $password)."', '2001', '2001', '$path', '0', '0', '', '*', '0', '0')";
$res_ftp = mysqli_query($conn, $query_ftp);
  file_put_contents("/etc/apache2/sites-available/".$vhost, "<VirtualHost *:80>\r\n ServerName $username.test.be\r\n\r\n\r\nServerAdmin admin@test.be\r\n DocumentRoot $path\r\n\r\n\r\n ErrorLog /var/logs/apache2/error.log\r\n CustomLog /var/logs/apache2/access.log combined\r\n\r\n\r\n</VirtualHost>");
  $output = exec("./heb.sh $vhost");
?>


Code Shell de heb.sh : (se trouvant dans le même dossier)

#!/bin/bash

sudo a2ensite $vhost
sudo service apache2 reload


Avez-vous des idées pour améliorer le code, passer les variables dans mon shell et le rendre plus propre svp ?

Merci d'avance

5 réponses

Messages postés
16454
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 juillet 2021
881
bonjour,
oublions provisoirement le php.
peux-tu donner un exemple simple de réception de variables en shell, par exemple à partir d'un appel en ligne de commande?
Messages postés
125
Date d'inscription
dimanche 9 août 2009
Statut
Membre
Dernière intervention
29 juillet 2021

Ouille aucune idée je pensais qu’en la passant comme je l’ai fais cela se ferais.

Désolé je suis un vrai débutant.

Je n’ai jamais codé de sh mais je remarque que mon php ne pourra pas seul réaliser ce que je veux faire
Messages postés
33147
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
29 juillet 2021
3 641
Bonsoir,

Tu avais posé la question dans ta précédente discussion....
à quoi je t'avais répondu :
https://www.commentcamarche.net/faq/5444-bash-les-arguments-parametres

Messages postés
125
Date d'inscription
dimanche 9 août 2009
Statut
Membre
Dernière intervention
29 juillet 2021

J’ai lu et relu la page, mais je suis sûr de pas comprendre quelque chose, j’ai essayer

  $output = exec("./heb.sh ‘$vhost’"); 


Et dans mon sh :

#!/bin/bash
set $vhost

sudo a2ensite $vhost
sudo service apache2 reload 


Mais rien ne change, donc je présume que je comprends mal quelque chose …

Merci d’avance
Messages postés
33147
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
29 juillet 2021
3 641 >
Messages postés
125
Date d'inscription
dimanche 9 août 2009
Statut
Membre
Dernière intervention
29 juillet 2021

Relis bien le chapitre

Paramètres positionnels

il faut utiliser les variables
$1  $2 $3 ...

chaque $x correspondant à la variable dans l'ordre de son passage

Si tu appelles un script avec trois paramètres ( ici des nombres .. )
./affiche_param.sh 1 2 3

Alors, pour récupérer chaque paramètre.. tu feras
echo "Le 1er paramètre est : $1"
echo "Le second paramètre est : $2"
echo "Le 3ème paramètre est : $3"

Bref... suffit de lire le lien que je t'ai donné... je ne pense pas qu'on puisse trouver plus limpide et plus simple comme explications...
Messages postés
125
Date d'inscription
dimanche 9 août 2009
Statut
Membre
Dernière intervention
29 juillet 2021
>
Messages postés
33147
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
29 juillet 2021

Désolé encore je vais vraiment paraître bête mais je le comprends comme ceci :

$output = exec("./heb.sh vhost");
 


Et dans mon sh :

#!/bin/bash

sudo a2ensite $vhost
sudo service apache2 reload 
Messages postés
33147
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
29 juillet 2021
3 641 >
Messages postés
125
Date d'inscription
dimanche 9 août 2009
Statut
Membre
Dernière intervention
29 juillet 2021

Dans ton bash il faut utiliser $1. Et non pas $vhost
$1 correspond au premier paramètre ( peu importe le nom que tu lui as donné côté PHP)
Messages postés
29984
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
26 juillet 2021
7 141
Bonjour,

Quelques modifications sur le PHP, car ce vhost correspond plutôt au nom de dossier (du coup j'ai renommé vhost en vhost_conf), et en général le vhost et l'utilisateur SQL ne sont pas forcément égaux (d'ailleurs, les logins SQL sont généralement écrits en minuscules).

J'ai un peu corrigé aussi les droits car 777 c'est open bar. En tout rigueur, tout le contenu de ton dossier /var/www/supraSupra devrait appartenir à l'utilisateur www-data, groupe
www-data
(
chown -R root:www-data
) avec des droits 750 sur les dossiers (ainsi au moins, seul l'utilisateur apache peut y accéder) et même plutôt 640 sur les fichiers (ainsi seul l'administrateur de la machine peut modifier le site).

<?php
//affichage des erreurs php
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
require('config.php');

$vhost="supraSupra"
$username=$vhost;
$password="test";
$vhost_conf = $username.".conf";
$path = "/var/www/".$vhost;
if (!is_dir($path)) {
    mkdir($path, 0755, true);
}
$query_mysql_user = "CREATE USER $username@'%' IDENTIFIED BY '$password'";
$res_mysql_user = mysqli_query($conn, $query_mysql_user);
$query_mysql_grant = "GRANT USAGE ON * . * TO $username@'%' IDENTIFIED BY '$password'";
$res_mysql_grant = mysqli_query($conn, $query_mysql_grant);
$query_mysql_create_db = "CREATE DATABASE IF NOT EXISTS $username DEFAULT CHARACTER SET = utf8 DEFAULT COLLATE = utf8_general_ci";
$res_mysql_create_db = mysqli_query($conn, $query_mysql_create_db);
$query_mysql_all_privilege = "GRANT ALL PRIVILEGES ON $username . * TO $username@'%'";
$res_mysql_all_privilege = mysqli_query($conn, $query_mysql_all_privilege);
$query_ftp = "INSERT INTO `ftpd` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `comment`, `ipaccess`, `QuotaSize`, `QuotaFiles`) VALUES ('$username', '1', '".hash('MD5', $password)."', '2001', '2001', '$path', '0', '0', '', '*', '0', '0')";
$res_ftp = mysqli_query($conn, $query_ftp);
  file_put_contents("/etc/apache2/sites-available/".$vhost_conf, "<VirtualHost *:80>\r\n ServerName $username.test.be\r\n\r\n\r\nServerAdmin admin@test.be\r\n DocumentRoot $path\r\n\r\n\r\n ErrorLog /var/logs/apache2/error.log\r\n CustomLog /var/logs/apache2/access.log combined\r\n\r\n\r\n</VirtualHost>");
  $output = exec("./heb.sh $vhost_conf");
?>


Du coup au niveau du script shell, tu peux relativement extraire le nom du vhost. On en profite pour utiliser
systemctl
plutôt que
service
qui n'est pas toujours utilisable.

#!/bin/bash

vhost=$(grep vhost toto.txt | sed -e 's/\$vhost\s*=\s*\"\(.*\)\"/\1/')
sudo a2ensite $vhost
sudo systemctl reload apache2


Bonne chance
Messages postés
29984
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
26 juillet 2021
7 141 >
Messages postés
125
Date d'inscription
dimanche 9 août 2009
Statut
Membre
Dernière intervention
29 juillet 2021

Oui, tout à fait.
Messages postés
125
Date d'inscription
dimanche 9 août 2009
Statut
Membre
Dernière intervention
29 juillet 2021
>
Messages postés
29984
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
26 juillet 2021

A mon avis j’ai un problème de permission sur mon serveur car cela ne change rien, il n’a pas l’air de tenir compte de mon heb.sh tout le reste se fait sauf cela (Apache2 est installé avec l’user et le groupe www-data) tandis que les commandes de mon script sh doivent être exécutée en root je pense.

Y’a t’il une solution ? Je suis en Ubuntu 18.04.

Merci d’avance
Messages postés
29984
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
26 juillet 2021
7 141 >
Messages postés
125
Date d'inscription
dimanche 9 août 2009
Statut
Membre
Dernière intervention
29 juillet 2021

Bonjour, est-ce que la commande :

grep vhost /chemin/vers/le/fichier.php | sed -e 's/\$vhost\s*=\s*\"\(.*\)\"/\1/'


... fait ce qu'il faut ? Quel est le chemin vers le script php ? Et enfin, oui ton script shell (
heb.sh
) doit être lancé en root ou via
sudo
(e.g.
sudo ./heb.sh
)

Bonne chance
Messages postés
125
Date d'inscription
dimanche 9 août 2009
Statut
Membre
Dernière intervention
29 juillet 2021
>
Messages postés
29984
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
26 juillet 2021

La commande ne fait rien,
Aussi bien ma page dossier.php et heb.sh sont dans le même dossier qui est /var/www/hebergeur/

Je sais que ces commandes dans le .sh doivent être lancé par root, mais je sais pas comment faire.

Tout le reste de la page php fonctionne cependant on dirait qu’il ignore heb.sh

Merci d’avance
Messages postés
29984
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
26 juillet 2021
7 141 >
Messages postés
125
Date d'inscription
dimanche 9 août 2009
Statut
Membre
Dernière intervention
29 juillet 2021

Bonjour, quel est le résultat de
grep vhost /var/www/hebergeur/dossier.php
?
Messages postés
125
Date d'inscription
dimanche 9 août 2009
Statut
Membre
Dernière intervention
29 juillet 2021

Bonjour,

Voilà où j'en suis tout est dans le même répertoire /var/www/hebergeur/

Tout fonctionne à part l'execution du shell, j'ai mis les logs erreurs & sortie ci-dessous.

Merci d'avace pour votre aide.

Code php : (dossier.php)

<?php
//affichage des erreurs php
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
require('config.php');

$vhost="suprasupra";
$username=$vhost;
$password="test";
$vhost_conf = $username.".conf";
$path = "/var/www/".$vhost;
$ftpuser = "ftpuser";
$ftpgroup = "ftpgroup";
if (!is_dir($path)) {
    mkdir($path, 0777, true);
 chown($path, $ftpuser);
 chgrp($path, $ftpgroup);
}
$query_mysql_user = "CREATE USER $username@'%' IDENTIFIED BY '$password'";
$res_mysql_user = mysqli_query($conn, $query_mysql_user);
$query_mysql_grant = "GRANT USAGE ON * . * TO $username@'%' IDENTIFIED BY '$password'";
$res_mysql_grant = mysqli_query($conn, $query_mysql_grant);
$query_mysql_create_db = "CREATE DATABASE IF NOT EXISTS $username DEFAULT CHARACTER SET = utf8 DEFAULT COLLATE = utf8_general_ci";
$res_mysql_create_db = mysqli_query($conn, $query_mysql_create_db);
$query_mysql_all_privilege = "GRANT ALL PRIVILEGES ON $username . * TO $username@'%'";
$res_mysql_all_privilege = mysqli_query($conn, $query_mysql_all_privilege);
$query_ftp = "INSERT INTO `ftpd` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `comment`, `ipaccess`, `QuotaSize`, `QuotaFiles`) VALUES ('$username', '1', '".hash('MD5', $password)."', '2001', '2001', '$path', '0', '0', '', '*', '0', '0')";
$res_ftp = mysqli_query($conn, $query_ftp);
  file_put_contents("/etc/apache2/sites-available/".$vhost_conf, "<VirtualHost *:80>\r\n ServerName $username.test.be\r\n\r\n\r\nServerAdmin admin@test.be\r\n DocumentRoot $path\r\n\r\n\r\n ErrorLog /var/logs/apache2/error.log\r\n CustomLog /var/logs/apache2/access.log combined\r\n\r\n\r\n</VirtualHost>");
  $output = exec("./heb.sh $vhost_conf");
?>


Code shell : (heb.sh)

#!/bin/bash
LOG_FILE=Sortie.log
ERR_FILE=Erreurs.log
 
exec 1>$LOG_FILE
exec 2>$ERR_FILE
ls -hal  # Sortie 'normale' -> STDOUT
apt-get update # Erreur de droits -> STDERR

vhost=$(grep vhost dossier.php | sed -e 's/\$vhost\s*=\s*\"\(.*\)\"/\1/')
sudo a2ensite $vhost
sudo systemctl reload apache2


Log erreurs : (Erreurs.log)


E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied)
E: Unable to lock directory /var/lib/apt/lists/
W: Problem unlinking the file /var/cache/apt/pkgcache.bin - RemoveCaches (13: Permission denied)
W: Problem unlinking the file /var/cache/apt/srcpkgcache.bin - RemoveCaches (13: Permission denied)
sudo: no tty present and no askpass program specified
sudo: no tty present and no askpass program specified


Log sortie : (Sortie.log)


total 20K
drwsrwsrwt 2 www-data root 4.0K Jun 29 01:37 .
drwsrwsrwt 34 www-data www-data 4.0K Jun 29 01:34 ..
-rwxrwxrwt 1 www-data root 0 Jun 29 01:37 Erreurs.log
-rwxrwxrwt 1 www-data root 0 Jun 29 01:37 Sortie.log
-rwxrwxrwt 1 www-data root 443 Jun 21 00:26 config.php
-rwxrwxrwt 1 root root 1.8K Jun 25 02:26 dossier.php
-rwxrwxrwt 1 root root 296 Jun 29 01:33 heb.sh
Reading package lists...
Messages postés
29984
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
26 juillet 2021
7 141
Il faudrait mettre
sudo
devant
apt-get update
. Ceci dit, vu que tu n'installes pas de paquets, tu n'as aucune raison de lancer
sudo apt-get update
...
Messages postés
125
Date d'inscription
dimanche 9 août 2009
Statut
Membre
Dernière intervention
29 juillet 2021

Bonjour,

Bon j'ai adapté mon fichier sudoers sur ubuntu 18.04, mais il y'a une erreur autre part.

Tout fonctionne bien sauf que dans donc le fichier suprasupra.conf se créer bien dans /etc/apache2/sites-available avec tout ce qu'il le faut dedans et tout.

Mais le sauf que le sudo a2ensite $vhost et le sudo systemctl reload apache2, ne se font toujours pas.

Quelqu'un a une idée svp ?

Merci d'avance.

Voici les adaptations :

Je rappel que mon php et mon script shell se trouve dans le même dossier.

Code php : (dossier.php)

<?php
//affichage des erreurs php
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
require('config.php');

$vhost="suprasupra";
$username=$vhost;
$password="test";
$vhost_conf = $username.".conf";
$path = "/var/www/".$vhost;
$ftpuser = "ftpuser";
$ftpgroup = "ftpgroup";
if (!is_dir($path)) {
    mkdir($path, 0777, true);
	chown($path, $ftpuser);
	chgrp($path, $ftpgroup);
}
$query_mysql_user = "CREATE USER $username@'%' IDENTIFIED BY '$password'";
$res_mysql_user = mysqli_query($conn, $query_mysql_user);
$query_mysql_grant = "GRANT USAGE ON * . * TO $username@'%' IDENTIFIED BY '$password'";
$res_mysql_grant = mysqli_query($conn, $query_mysql_grant);
$query_mysql_create_db = "CREATE DATABASE IF NOT EXISTS $username DEFAULT CHARACTER SET = utf8 DEFAULT COLLATE = utf8_general_ci";
$res_mysql_create_db = mysqli_query($conn, $query_mysql_create_db);
$query_mysql_all_privilege = "GRANT ALL PRIVILEGES ON $username . * TO $username@'%'";
$res_mysql_all_privilege = mysqli_query($conn, $query_mysql_all_privilege);
$query_ftp = "INSERT INTO `ftpd` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `comment`, `ipaccess`, `QuotaSize`, `QuotaFiles`) VALUES ('$username', '1', '".hash('MD5', $password)."', '2001', '2001', '$path', '0', '0', '', '*', '0', '0')";
$res_ftp = mysqli_query($conn, $query_ftp);
  file_put_contents("/etc/apache2/sites-available/".$vhost_conf, "<VirtualHost *:80>\r\n ServerName $username.test.be\r\n\r\n\r\nServerAdmin admin@test.be\r\n DocumentRoot $path\r\n\r\n\r\n ErrorLog /var/logs/apache2/error.log\r\n CustomLog /var/logs/apache2/access.log combined\r\n\r\n\r\n</VirtualHost>");
  $output = exec("sudo /var/www/hebergeur/heb.sh $vhost_conf"); exit;
?>


Voici le script shell : (heb.sh)

#!/bin/bash
LOG_FILE=Sortie.log
ERR_FILE=Erreurs.log
 
exec 1>$LOG_FILE
exec 2>$ERR_FILE
ls -hal		# Sortie 'normale' -> STDOUT


vhost=$(grep vhost dossier.php | sed -e 's/\$vhost\s*=\s*\"\(.*\)\"/\1/')
sudo a2ensite $vhost
sudo systemctl reload apache2


Voici le fichier Erreurs.log :


ERROR: No site found matching *:80>\r\n!
ERROR: Site suprasupra; does not exist!
ERROR: Site $username=$vhost; does not exist!
ERROR: Site $vhost does not exist!
ERROR: Site = does not exist!
ERROR: Site $username..conf; does not exist!
ERROR: Site $path does not exist!
ERROR: Site = does not exist!
ERROR: Site /var/www/.$vhost; does not exist!
ERROR: Site file_put_contents(/etc/apache2/sites-available/.$vhost_conf, does not exist!
ERROR: Site "<VirtualHost does not exist!
ERROR: Site ServerName does not exist!
ERROR: Site $username.test.bernrnrnServerAdmin does not exist!
ERROR: Site admin@test.bern does not exist!
ERROR: Site DocumentRoot does not exist!
ERROR: Site $pathrnrnrn does not exist!
ERROR: Site ErrorLog does not exist!
ERROR: Site /var/logs/apache2/error.logrn does not exist!
ERROR: Site CustomLog does not exist!
ERROR: Site /var/logs/apache2/access.log does not exist!
ERROR: Site combinedrnrnrn</VirtualHost>"); does not exist!
ERROR: Site $output does not exist!
ERROR: Site = does not exist!
ERROR: Site exec("sudo does not exist!
ERROR: Site /var/www/hebergeur/heb.sh does not exist!
ERROR: Site $vhost_conf"); does not exist!
ERROR: Site exit; does not exist!


Voici le fichier Sortie.log :


total 20K
drwsrwsrwt 2 www-data root 4.0K Jun 29 01:37 .
drwsrwsrwt 34 www-data www-data 4.0K Jul 4 23:58 ..
-rwxrwxrwt 1 www-data root 0 Jul 5 00:06 Erreurs.log
-rwxrwxrwt 1 www-data root 0 Jul 5 00:06 Sortie.log
-rwxrwxrwt 1 www-data root 443 Jun 21 00:26 config.php
-rwsrwsrwt 1 www-data root 1.8K Jul 5 00:05 dossier.php
-rwxrwxrwt 1 www-data root 243 Jul 5 00:05 heb.sh
Messages postés
29984
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
26 juillet 2021
7 141
Bonjour,

Il y a des erreurs dans ton script php (confusions entre la syntaxe shell et PHP) qu'on retrouve dans
Erreurs.log
au niveau des commandes construites à partir de variables PHP (en PHP, tu ne peux pas évaluer le contenu d'une variable à l'intérieur d'une chaîne de caractères). Ainsi, l'instruction :

$query_mysql_user = "CREATE USER $username@'%' IDENTIFIED BY '$password'";


devrait être corrigée en :

$query_mysql_user = "CREATE USER ".$username."@'%' IDENTIFIED BY \'".$password."\"";


Idem pour
$query_mysql_grant
,
$query_mysql_create_db
,
$query_mysql_all_privilege
.

Bonne chance
Messages postés
16454
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 juillet 2021
881 >
Messages postés
29984
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
26 juillet 2021

PHP: La fonctionnalité la plus intéressante des chaîne de caractères guillemets doubles est que les noms de variables seront interprétés.
https://www.php.net/manual/fr/language.types.string.php
Messages postés
125
Date d'inscription
dimanche 9 août 2009
Statut
Membre
Dernière intervention
29 juillet 2021
>
Messages postés
16454
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 juillet 2021

Bonjour,

C'est ce que je pensais aussi au premier abord, mais bon je vais toujours essayer de suivre le conseil de mamiemando pour voir ce que cela donne.

Je vous tiens au courant.

Bien à vous.
Messages postés
125
Date d'inscription
dimanche 9 août 2009
Statut
Membre
Dernière intervention
29 juillet 2021
>
Messages postés
29984
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
26 juillet 2021

Bonjour,

J'ai essayé ta méthode, si j'ai bien compris le concepte.

Code php : (dossier.php)

<?php
//affichage des erreurs php
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
require('config.php');

$vhost="suprasupra";
$username=$vhost;
$password="test";
$vhost_conf = $username.".conf";
$path = "/var/www/".$vhost;
$ftpuser = "ftpuser";
$ftpgroup = "ftpgroup";
if (!is_dir($path)) {
    mkdir($path, 0777, true);
 chown($path, $ftpuser);
 chgrp($path, $ftpgroup);
}
$query_mysql_user = "CREATE USER ".$username."@'%' IDENTIFIED BY \'".$password."\'";
$res_mysql_user = mysqli_query($conn, $query_mysql_user);
$query_mysql_grant = "GRANT USAGE ON * . * TO ".$username."@'%' IDENTIFIED BY \'".$password."\'";
$res_mysql_grant = mysqli_query($conn, $query_mysql_grant);
$query_mysql_create_db = "CREATE DATABASE IF NOT EXISTS ".$username." DEFAULT CHARACTER SET = utf8 DEFAULT COLLATE = utf8_general_ci";
$res_mysql_create_db = mysqli_query($conn, $query_mysql_create_db);
$query_mysql_all_privilege = "GRANT ALL PRIVILEGES ON ".$username." . * TO ".$username."@'%'";
$res_mysql_all_privilege = mysqli_query($conn, $query_mysql_all_privilege);
$query_ftp = "INSERT INTO `ftpd` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `comment`, `ipaccess`, `QuotaSize`, `QuotaFiles`) VALUES ('$username', '1', '".hash('MD5', $password)."', '2001', '2001', '$path', '0', '0', '', '*', '0', '0')";
$res_ftp = mysqli_query($conn, $query_ftp);
  file_put_contents("/etc/apache2/sites-available/".$vhost_conf, "<VirtualHost *:80>\r\n ServerName $username.test.be\r\n\r\n\r\nServerAdmin admin@test.be\r\n DocumentRoot $path\r\n\r\n\r\n ErrorLog /var/logs/apache2/error.log\r\n CustomLog /var/logs/apache2/access.log combined\r\n\r\n\r\n</VirtualHost>");
  $output = exec("sudo /var/www/hebergeur/heb.sh $vhost_conf"); exit;
?>


Cela me donne toujours les mêmes fichiers log, je rassure j'avais bien vider mes 2 fichiers log avant d'essayer et je l'ai fais plusieurs fois.

Erreurs.log :


ERROR: No site found matching *:80>\r\n!
ERROR: Site suprasupra; does not exist!
ERROR: Site $username=$vhost; does not exist!
ERROR: Site $vhost does not exist!
ERROR: Site = does not exist!
ERROR: Site $username..conf; does not exist!
ERROR: Site $path does not exist!
ERROR: Site = does not exist!
ERROR: Site /var/www/.$vhost; does not exist!
ERROR: Site file_put_contents(/etc/apache2/sites-available/.$vhost_conf, does not exist!
ERROR: Site "<VirtualHost does not exist!
ERROR: Site ServerName does not exist!
ERROR: Site $username.test.bernrnrnServerAdmin does not exist!
ERROR: Site admin@test.bern does not exist!
ERROR: Site DocumentRoot does not exist!
ERROR: Site $pathrnrnrn does not exist!
ERROR: Site ErrorLog does not exist!
ERROR: Site /var/logs/apache2/error.logrn does not exist!
ERROR: Site CustomLog does not exist!
ERROR: Site /var/logs/apache2/access.log does not exist!
ERROR: Site combinedrnrnrn</VirtualHost>"); does not exist!
ERROR: Site $output does not exist!
ERROR: Site = does not exist!
ERROR: Site exec("sudo does not exist!
ERROR: Site /var/www/hebergeur/heb.sh does not exist!
ERROR: Site $vhost_conf"); does not exist!
ERROR: Site exit; does not exist!


Sortie.log


total 20K
drwsrwsrwt 2 www-data root 4.0K Jun 29 01:37 .
drwsrwsrwt 34 www-data www-data 4.0K Jul 4 23:58 ..
-rwxrwxrwt 1 www-data root 0 Jul 5 00:06 Erreurs.log
-rwxrwxrwt 1 www-data root 0 Jul 5 00:06 Sortie.log
-rwxrwxrwt 1 www-data root 443 Jun 21 00:26 config.php
-rwsrwsrwt 1 www-data root 1.8K Jul 5 00:05 dossier.php
-rwxrwxrwt 1 www-data root 243 Jul 5 00:05 heb.sh


Si cela peut aider a résoudre mon problème mon but et qu'à la création d'un utilisateur cela crée son dossier personnel dans /var/www/ avec comme user ftpuser & ftpgroup et que sa ajoute son compte avec son accès dans mon pureftpd-mysql.

Que sa créer l'user sql et sa table.

Que cela créer le fichier vhost en ".conf" dans le dossier /etc/apache2/sites-available/ et que cela active le vhost dans le dossier /etc/apache2/sites-enabled/ et que cela reload la configuration d'apache2.

Genre me permettre de créer un hébergement complet via formulaire.

Merci d'avance.
Messages postés
29984
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
26 juillet 2021
7 141 >
Messages postés
125
Date d'inscription
dimanche 9 août 2009
Statut
Membre
Dernière intervention
29 juillet 2021

Bonjour,

Je te recommande d'ajouter des
echo
dans ton script pour vérifier pas à pas la valeur de chacune de tes variables (idem dans le script shell).

Ton fichier
error.log
semble suggérer que la valeur passée en paramètre à
a2ensite
est incorrecte. Peux-tu nous redonner le contenu de
heb.sh
afin qu'on voit s'il extrait correctement l'information de ton fichier
dossier.php
?

Pour l'histoire des double-quotes en PHP, je ne savais pas que cette syntaxe marchait (ça fait des années que je n'ai pas écrit de PHP), donc si tes erreurs ne sont pas dues à ça, utilise la syntaxe qui te plaît.

Bonne chance