Send PHP variable to Shell Script

3

I have a .sh file and it has variables that I need to get from PHP, here's an example:

//variavel 1 que preciso receber externamente
NAME=""
//variavel 2 que preciso receber externamente
DIR=""

tar -zcf $HOME.tar.gz $DIR

Calling the file by PHP would look like this:

shell_exec('sh arquivo.sh');

I just need to know how to send the data from the 2 variables.

Another way would be to send the entire script directly through php via shell_exec() , how would you send such a script ?

(This does not work):

shell_exec('VAR=tar -zcf teste.tar.gz teste/testeDir
if [ "$SUCCESS" == "0" ]; then
   echo "Sucesso!"
else
   echo "Sucesso!"
fi');
    
asked by anonymous 29.07.2016 / 20:44

3 answers

4

Pass the data through arguments, which can be read in bash scripts through $ 1, $ 2, etc. Your bash script would look like this:

#!/bin/bash
NAME="$1"
DIR="$2"

tar -zcf $NAME.tar.gz $DIR

In PHP, enter the arguments in their order:

shell_exec('sh seu_script.sh nome_qualquer diretorio_qualquer');
    
29.07.2016 / 21:48
1

When you run the shell_exec function, you can pass variable values as arguments to the command that will be executed:

$arquivo = "teste";
$dir = "testeDir";

$resultadoExec = shell_exec("sh script1.sh $arquivo $dir");

echo $resultadoExec;

To receive the information in the .sh file, use the special variables $1 and $2 :

#!/bin/bash

arquivo=$1".tar.gz"
dir=$2

# Verifica se o script recebe os argumentos
if [ $# -ne 2 ] then
   echo "Atenção! É necessário informar o arquivo e diretório de destino!"
   echo "Exemplo: \n $0 <nomeArquivo> <diretorio>"
   exit
fi

tar -zcf $arquivo $dir
if [ $? -eq 0 ] then
   echo "Arquivo descompactado com sucesso no diretório: $dir"
else
   echo "Erro! Não foi possível realizar a operação! Tente novamente"
fi
    
29.07.2016 / 21:48
0

In the shell file script.sh do the following:

#!/bin/bash

NAME='filename'
DIR='path'

echo $NAME
echo $DIR
tar -zcf $NAME.tar.gz $DIR

In PHP do so:

$file = "script.sh";
if (file_exists($file)) {
   chmod($file, "go+x");
   $string = shell_exec('sh '.$file);
   $data = explode("\n", $string);
   //Nome: filename - Diretório: path
   echo 'Nome: '. $data[0] . ' - Diretório: ' . $data[1]; 
} else {
  echo 'arquivo  não existe';
}

If you need to pass parameters, in the shell:

  #!/bin/bash

    NAME=$1
    DIR=$2

    echo $NAME
    echo $DIR
    tar -zcf $NAME.tar.gz $DIR

In PHP:

 $file = "script.sh";

   $params = array('filename', 'path');
   $param = ' '.implode(' ', $params);
    if (file_exists($file)) {
       chmod($file, "go+x");
       $string = shell_exec('sh '.$file.$param);
       $data = explode("\n", $string);
       //Nome: filename - Diretório: path
       echo 'Nome: '. $data[0] . ' - Diretório: ' . $data[1]; 
    } else {
      echo 'arquivo  não existe';
    }
    
30.07.2016 / 00:12