Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP exec() will not execute shell command when executed via browser

Tags:

php

system

exec

I have a certain PHP script that calls exec() to execute a command to convert a PDF to JPG. This command works fine in bash.

To preempt your initial troubleshooting guesses, note the following:

  • safe_mode = Off
  • Permission on the directory containing the PDF and the script is set to 777, and this directory is also where the JPG is being written.
  • The command I am passing to exec() explicitly points to the binary being used (e.g. /usr/local/bin/convert).
  • display_errors = On
  • error_reporting = E_ALL
  • disable_functions = [blank]
  • I am echoing exec()'s output and it returns nothing. The command being run by default returns nothing.

When I call this PHP script from the browser (visiting http://www.example.com/script.php), exec() does not execute its argument.

IMPORTANT: I know that there are no issues with my script or the way I have constructed the bash command, because from bash, I can execute the script with 'php' and it works (e.g. 'php script.php' converts the file)

I have also tried switching out exec() with system().

Last, I have had this issue once before in the past but cannot remember how I fixed it.

I know there is something I am missing, so I hope someone else has experienced this as I have and remembers how to fix it!

Thank you in advance for any assistance you can provide.

Alex

like image 616
Alex Avatar asked Feb 11 '09 21:02

Alex


People also ask

How do I run a shell script in PHP?

The shell_exec() function is an inbuilt function in PHP which is used to execute the commands via shell and return the complete output as a string. The shell_exec is an alias for the backtick operator, for those used to *nix.

How do I know if PHP exec is enabled?

php phpinfo(); ?> You can search for disable_functions and if exec is listed it means it is disabled. To enable it just remove the exec from the line and then you need to restart Apache and you will be good to go. If exec is not listed in the disable_functions line it means that it is enabled.

Which operator is used to run the shell command in PHP?

The PHP execution operator consists of backticks (``) and is used to run shell commands. The output of the command will be returned, and may, therefore, be stored in a variable.

Does PHP exec wait until finished?

PHP exec will wait until the execution of the called program is finished, before processing the next line, unless you use & at the end of the string to run the program in background.


2 Answers

Add 2>&1 to the end of your command to redirect errors from stderr to stdout. This should make it clear what's going wrong.

like image 199
Greg Avatar answered Sep 20 '22 04:09

Greg


Just some guess, it might be that your webserver process user does not have privileges to do so.

like image 31
TomHastjarjanto Avatar answered Sep 24 '22 04:09

TomHastjarjanto