Bonjour à tous,

Je viens poster mon problème ici car j'ai un soucis; je n'arrive pas a lancer un script shell via mon PHP, il ne semble pas s’exécuter.

Voici le principe: on upload un fichier grâce à un formulaire dans un dossier "upload" sur le serveur debian, le but du script est ensuite de couper ce fichier vers le dossier "/home/xbmc".

Voici les fichiers PHP:

addmusique.php

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
	<head>
		<title>StarBox - Musique</title>
		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
		<link rel="stylesheet" media="screen" type="text/css" title="Design" href="style/css/style.css" />
	</head>
	<body>
		<?php
		session_start();
		require_once('db.php');
		include("header.php");
 
		if (!isset($_SESSION['login'])) {
			echo '<div class="error"><p>Vous devez vous connecter pour accéder à cette page.</p></div>';
			session_destroy();
			header ("Refresh: 2;URL=index.php");
		}
		else {
			?>
 
			<div class="starbox">
 
			<?php echo "Bonjour " . $_SESSION['login'] . "."; ?>
 
			<form class="starbox" name="addmusic" method="post" action="business_addmusic.php" enctype="multipart/form-data" OnSubmit="return Send()">
			<a href="home.php"><< Accueil</a> <br />
			<h1>Ajouter une musique</h1>
			<table class="addmusic">
				<tr colspan="2">
					<td>Fichier à ajouter:<br />
					<input name="addmusic_path" type="file" />*<br /><br /></td>
				</tr>
				<tr>
					<td>Titre:<br />
					<input type="text" name="addmusic_titre" />*<br /><br /></td>
					<td>Artiste: <i>(Laisser vide si inconnu)</i><br />
					<input type="text" name="addmusic_artiste" /><br /><br /></td>
				</tr>
				<tr>
					<td>Numéro de piste: <i>(Laisser vide si inconnu)</i><br />
					<input type="text" name="addmusic_number" /><br /><br /></td>
					<td>Nom de l'album: <i>(Laisser vide si inconnu)</i><br />
					<input type="text" name="addmusic_album" /><br /><br /></td>
				</tr>
				<tr>
					<td>Année:<i>(Laisser vide si inconnu)</i><br />
					<input type="text" name="addmusic_annee" /><br /><br /></td>
				</tr>
				<tr>
					<td colspan="2">Genre:<br />
								<?php 
								$genresmusic=$database->query('SELECT GENRE_ID, GENRE_NOM FROM genre WHERE GENRE_TYPE = 1 ORDER BY GENRE_NOM');
								while($val = $genresmusic->fetch())
								{
									echo '<input type="radio" name="genre" value="'.$val['GENRE_NOM'].'" id="'.$val['GENRE_ID'].'" /> <label for="'.$val['GENRE_ID'].'">'.$val['GENRE_NOM'].'</label><br />';
								}
								?>
					<br /><br /></td>
				</tr>
				<tr>
					<td>Confidentialité:<br />
					<input type="checkbox" id="private" name="confidentialite" value="Privé"/><label for="private">Privé</label><br /><br /></td>
				</tr>
			</table>
			<input type="submit" value="Ajouter la musique" />
			</form>
			</div>
			<?php 
		}
		?>
	</body>
</html>


business_addmusique.php:


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
	<head>
		<title>Redirection...</title>
		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
		<link rel="stylesheet" media="screen" type="text/css" title="Design" href="style/css/style.css" />
	</head>
	<body>
		<?php
		session_start();
		require_once('db.php');
		include("header.php");
 
		if (!isset($_SESSION['login'])) {
			echo '<div class="error"><p>Vous devez vous connecter pour accéder à cette page.</p></div>';
			session_destroy();
			header ("Refresh: 2;URL=index.php");
		}
		else {
 
 
			if ($_FILES['addmusic_path']['name'] != "" and $_POST['addmusic_titre'] != "") {
 
				if ($_POST['addmusic_artiste'] == "") {
					$_POST['addmusic_artiste'] = "Inconnu";
				}
 
				if ($_POST['addmusic_number'] == "") {
					$_POST['addmusic_number'] = "NA";
				}
 
				if ($_POST['addmusic_album'] == "") {
					$_POST['addmusic_album'] = "Inconnu";
				}
 
				if ($_POST['addmusic_annee'] == "") {
					$_POST['addmusic_annee'] = "Inconnue";
				}
 
				if (!isset($_POST['genre'])) {
					$_POST['genre'] = "Divers";
				}
 
				if (isset($_POST['confidentialite'])) {
					$_POST['confidentialite'] = 1;
				}
				else {
					$_POST['confidentialite'] = 0;
				}
 
				$idgenre=$database->prepare('SELECT GENRE_ID FROM genre WHERE GENRE_NOM = "'.$_POST['genre'].'" AND GENRE_TYPE = 1');
				$idgenre->execute();
				$data = $idgenre->fetch();
 
				$_SESSION['idgenre'] = $data['GENRE_ID'];
 
 				$dossier = 'upload/';
 				$fichier = basename($_FILES['addmusic_path']['name']);
 				$taille = filesize($_FILES['addmusic_path']['tmp_name']);
 				$extensions = array('.mp3', '.ogg', '.wav', '.aac', '.m4a', '.flac', '.wma', '.MP3', '.OGG', '.WAV', '.AAC', '.M4A', '.FLAC', '.WMA');
 				$extension = strrchr($_FILES['addmusic_path']['name'], '.');
 				//Début des vérifications de sécurité...
 				if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
 				{
 					$erreur = '<div class="error">Vous devez envoyer une musique de type mp3, ogg, wav, aac, m4a, flac ou wma.</div>';
 				}
 
 				if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
 				{
 					//On formate le nom du fichier ici...
 					if(move_uploaded_file($_FILES['addmusic_path']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
 					{
 						$addmusic=$database->prepare('INSERT INTO fichier(GENRE_ID, TYPE_ID, FICHIER_NOM, FICHIER_CHEMIN, FICHIER_ANNEE, FICHIER_ARTISTE, FICHIER_ALBUM, FICHIER_PRIVE, FICHIER_PROPRIO, FICHIER_NUMERO) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)');
 						$addmusic->execute(array($_SESSION['idgenre'], 1, $_POST['addmusic_titre'], $_FILES['addmusic_path']['name'], $_POST['addmusic_annee'], $_POST['addmusic_artiste'], $_POST['addmusic_album'], $_POST['confidentialite'], $_SESSION['user_id'], $_POST['addmusic_number']));
 
 						exec(escapeshellcmd('scripts/aj_musique.sh', $_FILES['addmusic_path']['name'], $_POST['addmusic_titre'], $_POST['addmusic_artiste'], $_POST['addmusic_album'], $_POST['genre'], $_POST['addmusic_annee'], $_POST['addmusic_number']));
 
 						echo '<div class="success">Musique ajoutée.</div>';
						unset($_SESSION['idgenre']);
						unset($_FILES['addmusic_path']['name']);
						unset($_POST['addmusic_titre']);
						unset($_POST['addmusic_artiste']);
						unset($_POST['addmusic_number']);
						unset($_POST['addmusic_album']);
						unset($_POST['addmusic_annee']);
						unset($_POST['genre']);
						unset($_POST['confidentialite']);
						header ("Refresh: 2;URL=musique.php");
 					}
 					else //Sinon (la fonction renvoie FALSE).
 					{
 						print_r($_FILES);
 						echo $fichier;
 						echo '<div class="error">Échec de l\'upload !</div>';
 					}
 				}
 				else
 				{
 					echo $erreur;
 				}
 
 
			}
			else {
				echo '<div class="error">Merci de remplir tous les champs obligatoires.</div>';
				unset($_SESSION['idgenre']);
				unset($_POST['addmusic_path']);
				unset($_POST['addmusic_titre']);
				unset($_POST['addmusic_artiste']);
				unset($_POST['addmusic_number']);
				unset($_POST['addmusic_album']);
				unset($_POST['addmusic_annee']);
				unset($_POST['genre']);
				unset($_POST['confidentialite']);
				header ("Refresh: 2;URL=musique.php");
			}
 		}
		?>

Et enfin, le script shell que je cherche à exécuter:

aj_musique.sh:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
#!/bin/bash
chemin_film="../upload/$_FILES['addmusic_path']['name']"
extension="${chemin_film##*.}"
 
var_titre="$_POST['addmusic_titre']"
var_artist="$_POST['addmusic_artiste']"
var_album="$_POST['addmusic_album']"
var_genre="$_POST['genre']"
var_date="$_POST['addmusic_annee']"
var_number="$_POST['addmusic_number']"
 
if [ ! -d /home/xbmc/musique/"$var_artist"/"$var_album" ]
then mkdir -p /home/xbmc/musique/"$var_artist"/"$var_album"
fi
 
touch /home/xbmc/musique/"$var_artist"/"$var_album"/"$var_titre".nfo
 
echo "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?>
<music>
<title>"$var_titre"</title>
<artist>"$var_artist"</artist>
<album>"$var_album"</album>
<genre>"$var_genre"</genre>
<year>"$var_date"</year>
<number>"$var_number"</number>
</music>" > /home/xbmc/musique/"$var_artist"/"$var_album"/"$var_titre".nfo
 
cp "$chemin_film" /home/xbmc/musique/"$var_artist"/"$var_album"/"$var_titre"."$extension"
 
#echo /home/xbmc/musique/"$var_artist"/"$var_album"/"$var_titre"."$extension"

Étant donné que je suis très mauvais sur Linux, il ne serait pas impossible qu'il manque des droits quelque part...

J'ai juste mis le dossier "upload" en 777 (via filezilla). Ce n'est pas très grave pour la sécurité, l’application est destinée à être utilisée en local.

PS: Je n'ai aucun message d'erreur, j'ai l'impression que le script shell ne s'exécute simplement pas, l'upload, lui, fonctionne correctement.

Je vous remercie par avance pour toute l'aide que vous pourrez m'apporter.

Cordialement,
Sayko.