Estoy tratando de generar archivos apk de Android desde un script de shell, quiero ejecutar un archivo de script de shell desde PHP. Cuando ejecuto el script de shell en la terminal, funciona perfectamente. Si trato de ejecutar el script usando PHP, el script de shell no ejecuta todos los comandos. El comando ls en el script de shell funciona perfectamente, pero cuando se ejecuta con PHP, otros comandos no funcionan. Estoy usando el servidor xampp en un entorno Linux.
Mi script de shell
cd /home/user/AndroidStudioProjects/msvep4247-inghamautogroup-pulse-and/ ./gradlew assembleDebug cp -fr app/build/outputs/apk/app-debug.apk /opt/lampp/htdocs/sample/apk ls Salida de shell script ls
app autolead_data_format.pdf build build.gradle mejilla gradle gradle.properties gradlew gradlew.bat lib local.properties msvep4247-inghamautogroup-pulse-and.iml settings.gradle
Mi script PHP
<?php echo shell_exec('ls'); echo shell_exec('./generateApk.sh'); ?> Salida del script PHP ls
generarApk.sh generar.php APK
Nota: ls genera nombres de archivos en la carpeta
Configuré todos los permisos de archivo para el script de shell en el servidor xampp. ¿Alguien puede describir dónde me equivoco? En espera de respuestas...
Simplemente use la ruta completa al script/ejecutable, porque el entorno es diferente cuando se ejecuta desde php.
Parece que la variable de entorno PATH en el código PHP que se ejecuta en el servidor web es más limitada que la del shell en el que está trabajando. cambios.
<?php // set content type so the output is more readable in the browser header('Content-Type: text/plain'); // set $PATH to some limited value putenv('PATH=/bin:/sbin'); // verify, note that we have to use full path to 'env' print(shell_exec("/usr/bin/env|grep '^PATH='")); // this command won't run (assuming its full path is /usr/bin/id) print(shell_exec("id")); // add more directories to $PATH putenv('PATH=/bin:/sbin:/usr/bin:/usr/sbin'); // verify again, we can use env without specifying the path this time print(shell_exec("env|grep '^PATH='")); // this command will print(shell_exec("id")); Así que tienes que escribir putenv('PATH=<your_shell_PATH_contents>'); en la parte superior de su script PHP. El uso de la ruta completa al script de shell solo no ayudará si el script en sí usa rutas relativas a los archivos binarios que inicia.