stangill13
asked on
PHP exec() not executing php file
I am trying to call a PHP file to run as a background process from another PHP file using the exec() command and it does not appear to be working.
I have a file called test1.php that just calls a second file test2.php to run in the background.
Very simple...
test1.php:
exec ("/usr/bin/php -f /path/to/test2.php > /dev/null &");
test2.php just sends out an email to me using the mail function. (just a basic function to debug and figure out what's wrong).
If I run test2.php from the command line, it works fine.
php -f /path/to/test2.php - this works fine and I receive the email if I run this in putty.
If I put test2.php in the public_html directory and go to it directly, that also works fine. But when I try to call it from another PHP file using exec(), nothing happens.
Also, if I call a basic linux command or another program such as ffmpeg using exec() that all works fine. It just appears to be calling a php file. Some google searching has suggested it could be an issue with the php or apache user being set to NOONE and not having permissions. But I'm not sure about that, or what the best solution is if that's the case.
This is on a dedicated linux server. Centos 4.7 PHP 5.2.6 safe_mode = Off
Let me know what other info would be helpful.
Thanks!
I have a file called test1.php that just calls a second file test2.php to run in the background.
Very simple...
test1.php:
exec ("/usr/bin/php -f /path/to/test2.php > /dev/null &");
test2.php just sends out an email to me using the mail function. (just a basic function to debug and figure out what's wrong).
If I run test2.php from the command line, it works fine.
php -f /path/to/test2.php - this works fine and I receive the email if I run this in putty.
If I put test2.php in the public_html directory and go to it directly, that also works fine. But when I try to call it from another PHP file using exec(), nothing happens.
Also, if I call a basic linux command or another program such as ffmpeg using exec() that all works fine. It just appears to be calling a php file. Some google searching has suggested it could be an issue with the php or apache user being set to NOONE and not having permissions. But I'm not sure about that, or what the best solution is if that's the case.
This is on a dedicated linux server. Centos 4.7 PHP 5.2.6 safe_mode = Off
Let me know what other info would be helpful.
Thanks!
Why don't you include the mail module or do it somehow else? You don't need to execute it, do you?
> But when I try to call it from another PHP file using exec(), nothing happens.
Try to analyze the output (if there's any). PHP is compiled with --enable-force-cgi-redirec t sometimes which means that calls from shell won't work.
Try to analyze the output (if there's any). PHP is compiled with --enable-force-cgi-redirec
Put both files in same directory and try this...
exec ("/usr/bin/php -f test2.php > /dev/null &");
Better yet just include the file (it will run)
include 'test2.php'; // run test2.php
ASKER
Hey guys, the scripts here are just some basic test scripts to get this working.
The ultimate goal is that the first file will be a file uploader (video files). And once the file is uploaded it will then exec() the second file, which will encode the video to .flv format using ffmpeg. The mail function was just a test to try to figure out whether or not it's working. So that's the reason I'm not just including it. Eventually the second file I'm trying to call will be doing video encoding and I will want that to run in the background.
sh0e: how can I double check if that is the correct path and it's permissions?
NerdsOfTech: putting the two php files in the same directory has the same result.
caterham_www: what do you mean by analyze the output?
Thanks!
The ultimate goal is that the first file will be a file uploader (video files). And once the file is uploaded it will then exec() the second file, which will encode the video to .flv format using ffmpeg. The mail function was just a test to try to figure out whether or not it's working. So that's the reason I'm not just including it. Eventually the second file I'm trying to call will be doing video encoding and I will want that to run in the background.
sh0e: how can I double check if that is the correct path and it's permissions?
NerdsOfTech: putting the two php files in the same directory has the same result.
caterham_www: what do you mean by analyze the output?
Thanks!
ASKER
caterham_www:
I don't believe that is the case --enable-force-cgi-redirec t. From the php info file -
'./configure' '--enable-bcmath' '--enable-calendar' '--enable-exif' '--enable-ftp' '--enable-gd-native-ttf' '--enable-libxml' '--enable-magic-quotes' '--enable-mbstring' '--enable-pdo=shared' '--enable-soap' '--enable-sockets' '--enable-sqlite-utf8' '--enable-wddx' '--enable-zip' '--prefix=/usr' '--with-bz2' '--with-curl=/opt/curlssl/ ' '--with-curlwrappers' '--with-freetype-dir=/usr' '--with-gd' '--with-gettext' '--with-imap=/opt/php_with _imap_clie nt/' '--with-imap-ssl=/usr' '--with-jpeg-dir=/usr' '--with-kerberos' '--with-libexpat-dir=/usr' '--with-libxml-dir=/opt/xm l2' '--with-libxml-dir=/opt/xm l2/' '--with-mcrypt=/opt/libmcr ypt/' '--with-mhash=/opt/mhash/' '--with-mime-magic' '--with-mysql=/usr' '--with-mysql-sock=/var/li b/mysql/my sql.sock' '--with-mysqli=/usr/bin/my sql_config ' '--with-openssl=/usr' '--with-openssl-dir=/usr' '--with-pdo-mysql=shared' '--with-pdo-sqlite=shared' '--with-png-dir=/usr' '--with-pspell' '--with-sqlite=shared' '--with-tidy=/opt/tidy/' '--with-ttf' '--with-xmlrpc' '--with-xpm-dir=/usr/X11R6 ' '--with-xsl=/opt/xslt/' '--with-zlib' '--with-zlib-dir=/usr'
I also added the optional output and return_var arguments to the exec call. The result was output was simply an empty Array() and the return_var was 0.
I don't believe that is the case --enable-force-cgi-redirec
'./configure' '--enable-bcmath' '--enable-calendar' '--enable-exif' '--enable-ftp' '--enable-gd-native-ttf' '--enable-libxml' '--enable-magic-quotes' '--enable-mbstring' '--enable-pdo=shared' '--enable-soap' '--enable-sockets' '--enable-sqlite-utf8' '--enable-wddx' '--enable-zip' '--prefix=/usr' '--with-bz2' '--with-curl=/opt/curlssl/
I also added the optional output and return_var arguments to the exec call. The result was output was simply an empty Array() and the return_var was 0.
ASKER
Also, _ENV["PATH"] is /bin:/usr/bin
I assume that's the path to PHP? And if so, do I have it correct here:
exec ("/usr/bin/php -f /path/to/test2.php > /dev/null &");
I assume that's the path to PHP? And if so, do I have it correct here:
exec ("/usr/bin/php -f /path/to/test2.php > /dev/null &");
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Yes that's it, THANK YOU!
which php -> /usr/local/bin/php
Path to php was wrong. (figures something basic) I changed that and everything works as it should.
which php -> /usr/local/bin/php
Path to php was wrong. (figures something basic) I changed that and everything works as it should.
ASKER
Although,
which php -a
does list both paths
/usr/local/bin/php
/usr/bin/php
which php -a
does list both paths
/usr/local/bin/php
/usr/bin/php
What are its permissions?