Problème de variables php vers sh

Résolu/Fermé
Tzmagnum Messages postés 126 Date d'inscription dimanche 9 août 2009 Statut Membre Dernière intervention 10 mai 2022 - Modifié le 28 juin 2021 à 10:23
mamiemando Messages postés 33294 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 septembre 2024 - 9 juil. 2021 à 01:32
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
A voir également:

5 réponses

yg_be Messages postés 23235 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 30 septembre 2024 Ambassadeur 1 538
23 juin 2021 à 21:41
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?
0
Tzmagnum Messages postés 126 Date d'inscription dimanche 9 août 2009 Statut Membre Dernière intervention 10 mai 2022
23 juin 2021 à 22:04
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
0
jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024 4 689
23 juin 2021 à 22:25
Bonsoir,

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

0
Tzmagnum Messages postés 126 Date d'inscription dimanche 9 août 2009 Statut Membre Dernière intervention 10 mai 2022
23 juin 2021 à 23:37
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
0
jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024 4 689 > Tzmagnum Messages postés 126 Date d'inscription dimanche 9 août 2009 Statut Membre Dernière intervention 10 mai 2022
Modifié le 24 juin 2021 à 00:19
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...
0
Tzmagnum Messages postés 126 Date d'inscription dimanche 9 août 2009 Statut Membre Dernière intervention 10 mai 2022 > jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024
24 juin 2021 à 00:29
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 
0
jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024 4 689 > Tzmagnum Messages postés 126 Date d'inscription dimanche 9 août 2009 Statut Membre Dernière intervention 10 mai 2022
24 juin 2021 à 04:43
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)
0
mamiemando Messages postés 33294 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 septembre 2024 7 788
Modifié le 24 juin 2021 à 12:48
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
0
Tzmagnum Messages postés 126 Date d'inscription dimanche 9 août 2009 Statut Membre Dernière intervention 10 mai 2022
24 juin 2021 à 17:54
Bonjour,

Dans le script Shell je remplace toto.txt par le nom de ma page php (dossier.php) ?

C’est bien cela ?

Merci d’avance
0
mamiemando Messages postés 33294 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 septembre 2024 7 788 > Tzmagnum Messages postés 126 Date d'inscription dimanche 9 août 2009 Statut Membre Dernière intervention 10 mai 2022
Modifié le 28 juin 2021 à 10:24
Oui, tout à fait.
0
Tzmagnum Messages postés 126 Date d'inscription dimanche 9 août 2009 Statut Membre Dernière intervention 10 mai 2022 > mamiemando Messages postés 33294 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 septembre 2024
28 juin 2021 à 11:36
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
0
mamiemando Messages postés 33294 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 septembre 2024 7 788 > Tzmagnum Messages postés 126 Date d'inscription dimanche 9 août 2009 Statut Membre Dernière intervention 10 mai 2022
28 juin 2021 à 11:48
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
0
Tzmagnum Messages postés 126 Date d'inscription dimanche 9 août 2009 Statut Membre Dernière intervention 10 mai 2022 > mamiemando Messages postés 33294 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 septembre 2024
Modifié le 28 juin 2021 à 12:45
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
0
Tzmagnum Messages postés 126 Date d'inscription dimanche 9 août 2009 Statut Membre Dernière intervention 10 mai 2022
Modifié le 29 juin 2021 à 01:54
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...
0
mamiemando Messages postés 33294 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 septembre 2024 7 788
5 juil. 2021 à 13:35
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
...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Tzmagnum Messages postés 126 Date d'inscription dimanche 9 août 2009 Statut Membre Dernière intervention 10 mai 2022
5 juil. 2021 à 00:31
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
0
mamiemando Messages postés 33294 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 septembre 2024 7 788
5 juil. 2021 à 13:41
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
0
yg_be Messages postés 23235 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 30 septembre 2024 1 538 > mamiemando Messages postés 33294 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 septembre 2024
5 juil. 2021 à 19:19
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
0
Tzmagnum Messages postés 126 Date d'inscription dimanche 9 août 2009 Statut Membre Dernière intervention 10 mai 2022 > yg_be Messages postés 23235 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 30 septembre 2024
6 juil. 2021 à 00:39
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.
0
Tzmagnum Messages postés 126 Date d'inscription dimanche 9 août 2009 Statut Membre Dernière intervention 10 mai 2022 > mamiemando Messages postés 33294 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 septembre 2024
Modifié le 6 juil. 2021 à 01:16
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.
0
mamiemando Messages postés 33294 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 septembre 2024 7 788 > Tzmagnum Messages postés 126 Date d'inscription dimanche 9 août 2009 Statut Membre Dernière intervention 10 mai 2022
Modifié le 9 juil. 2021 à 01:34
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
0