简体   繁体   中英

shell_exec() always returning an empty string

I am trying to create a server within my Android phone. I am unable to execute any shell script from my PHP code.

Here's the code:

//index.php
<?php
$output=shell_exec("sdcard/htdocs/myscript.sh 2>&1");
if(!$output){
  echo "Failed";
}else{
  echo $output;
}
?>

//myscript.sh
cd sdcard/htdocs/images
ls -t1 | head -n 1

The script works fine within terminal emulator. I also tried changing permissions of the script file but that didn't work. I don't know if it requires superuser permissions to execute shell scripts within PHP code.

The whole code is used to return the filename of the last file created in the images directory.

Need suggestions to make this code work.Is there any other way to perform the required job?

Your code looks fine. Superuser permission is not necessary for script execution. You should turn on PHP error output or check the PHP error log file. I bet you find the reason there. If not, recheck the directory, and file permissions:

./index.php
./sdcard/htdocs/myscript.sh
./sdcard/htdocs/images

sdcard and sdcard/htdocs require executable persmissions. sdcard/htdocs/images requires executable and read permission ( ls in myscript.sh ), and so does sdcard/htdocs/myscript.sh . But I guess it's something else because permission errors should be displayed ( 2>&1 ).


Edit

You can find the last modified file with PHP, no need to run another process. Take one of these two:

$images = glob('sdcard/htdocs/images/*');
$images = array_combine(array_map('filemtime', $images), $images);
asort($images);
echo $lastModifiedImage = end($images);

Or with some fewer array operations:

$images = glob('sdcard/htdocs/images/*');
array_reduce($images, function($previous, $element) use (&$found) {
    $mtime = filemtime($element);
    $found = $previous < $mtime ? $found : $element;
    return $previous < $mtime ? $mtime : $previous;
}, 0);
echo $found;

Make sure what you have run

chmod a+x sdcard/htdocs/myscript.sh

on your file.

Also $output is not a boolean.

sdcard and sdcard/htdocs require executable persmissions. sdcard/htdocs/images requires executable and read permission (ls in myscript.sh), and so does sdcard/htdocs/myscript.sh. But I guess it's something else because permission errors should be displayed (2>&1).

Probably FAT !

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM