IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Exécution de script shell via PHP


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 17
    Points : 7
    Points
    7
    Par défaut Exécution de script shell via PHP
    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.

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 17
    Points : 7
    Points
    7
    Par défaut
    Rebonjour,

    J'ai du nouveau

    Avec un simple "mkdir /home/xbmc/" cela fonctionne.

    Le problème semble donc venir du fait que je n'arrive pas a récupérer la valeur de mes variables PHP au sein de mon script shell.

Discussions similaires

  1. Exécuter un script shell côté client via php
    Par Heisen dans le forum Langage
    Réponses: 2
    Dernier message: 15/03/2011, 18h45
  2. Sortir d'un script shell via PHP
    Par omelhor dans le forum Langage
    Réponses: 0
    Dernier message: 02/05/2010, 18h40
  3. Exécuter un script shell depuis php
    Par allyass dans le forum Linux
    Réponses: 5
    Dernier message: 12/12/2009, 01h14
  4. Réponses: 10
    Dernier message: 15/07/2008, 11h52
  5. Exécuter un script shell via le fichier .mailrc
    Par Olivier Regnier dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 16/06/2007, 18h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo