Problem using PHP exec command to execute a batch file

ぃ、小莉子 提交于 2019-12-08 11:29:30

问题


I'm attempting to get PHP to call a batch file which will take an RTF file and convert it to a PDF using an OpenOffice macro. I've tested the batch file on the command line and it works fine, but I'm not having any luck calling and using the same batch file from PHP.

My machine OS is XP professional SP 3. I'm running IIS 6 and PHP version 5.2.9. I've granted execute permissions to the internet user on c:\windows\system32\cmd.exe. I specified the full path to the batch file being executed and the full path to the RTF file to be converted.

The PHP looks like this where $arg is the RTF to be converted:

$arg = "C:\\web_root\\whatever\\tempOutput.rtf";
$command = "c:\\windows\\system32\\cmd.exe /c c:\\web_root\\whatever\\convert.bat $arg";

Then inside a try-catch I call the exec command:

exec("$command 2>&1 && exit", $ret, $err);

I echo the results after the catch:

echo "ret: ";
print_r ($ret);
print "<br>";
echo "err is ";
echo $err;
print "<br>";
echo "DONE!";

And this is what I see:

ret: Array ( ) 
err is 0
DONE!

The RTF file does not get converted and I'm not seeing the errors. Any ideas on what I can try next? Thanks!!!


回答1:


I'm going to bet this is about permissions.

In a typical setup, PHP runs as apache - so you'll want to make sure apache has the rights to execute the batch file.

also, check this relevant SO question, and this google search.




回答2:


Looks like the output array is empty. Is your batch script supposed to have output?

Also, escapeshellcmd and escapeshellarg should be used




回答3:


Are you using IIS as your webserver? If so, the PHP exec function will not work by default and you should NOT circumvent the security measures that prevent it from running.

Check your event viewer and you should find some errors pertaining to your problem. Run a query through google for: IIS PHP exec. This should give you a large selection of information about the problem.

Basically, the PHP exec function tries to fork a new cmd.exe instance. IIS prohibits this because it could open a security hole in the system.

The best solution that I have come up with is to have your php script either write the command that you want to execute to a flat file or make a database entry. You will then need to write a seperate script that is launched by the windows scheduler to run every 10 minutes or so that will check your flat file or database for commands to run. The new script will then run the commands and then place either the results or an execution confirmation that your web app will be able to access at a later time.

It's a kludge for sure.




回答4:


Is PHP running in safe-mode? If so, shell commands are escaped with escapeshellcmd. Perhaps this is the problem?

Do you have control of the server running the PHP script?



来源:https://stackoverflow.com/questions/940756/problem-using-php-exec-command-to-execute-a-batch-file

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!