Bug #71883 [Opn]: PHP exec() over UNC path on Windows
Edit report at https://bugs.php.net/bug.php?id=71883&edit=1
ID: 71883
Updated by: pajoye@php.net
Reported by: hobbes at visionfriendly dot com
Summary: PHP exec() over UNC path on Windows
Status: Open
Type: Bug
Package: IIS related
Operating System: Windows 2012R2
PHP Version: 5.6.19
Block user comment: N
Private report: N
New Comment:
Check what happens in proc open to see what kind of errors happen where.
If you copy it (anonymize it) on gist :)
Previous Comments:
------------------------------------------------------------------------
[2016-03-22 21:10:46] hobbes at visionfriendly dot com
Description:
------------
My environment is Windows Server 2012 R2, IIS 8, Active Directory, and a file share. IIS, AD, and
the file share are all separate VMs.
I have a website, www.example.com, set up in IIS. The application pool identity is set up as the AD
user IUSR_example, which has "full control" permissions on the folder containing the site
files. The site files are on the file share, which IIS references via UNC path.
In general, the site works in that it can serve up PHP, ASP.Net, and ASP Classic pages, and the code
can even create new files.
However, I am having a problem that seems specific to PHP exec(). I've tried calling whoami,
dir, and ffmpeg, and I get nothing returned from them. Using Sysinternals Procmon I have confirmed
that the executable never starts.
Weirdly enough, I am able to make the exact same calls with ASP Classic (using WScript.Shell), and
it works perfectly. I am also able to get PHP exec() working when the scripts are NOT running over
the UNC path.
Here's what I've tried/found:
â¢When using ASP, procmon reports that w3wp.exe spawns a cmd.exe process, which in turn spawns
conhost.exe and (for example) ffmpeg.exe. The output file from ffmpeg successfully appears.
â¢When using PHP, procmon reports that w3wp.exe spawns a php-cgi.exe process, which in turn
creates a cmd.exe and a conhost.exe. A thread for ffmpeg.exe never appears.
â¢cmd.exe is invoked with a command line that looks like this: cmd.exe /c ""--the
command to be executed--""
â¢The command line for the cmd.exe process is exactly the same for both ASP Classic and PHP.
â¢In Procmon, the user is always reported as IUSR_example
â¢I've tried adding 2>&1 to the end of the command
â¢I've tried giving the IUSR to the "Replace Process-level Token" right
â¢I've tried turning off FastCGI impersonation and switching between "NamedPipe"
and "TCP" under Process Model > Advanced Settings
â¢There are no errors in the PHP error log
â¢There are no errors in any of the Windows Event logs
Note that this is not specific to ffmpeg. Any other use of exec() also fails. Also, I would prefer
not to use WScript.Shell from within PHP because eventually we will be using WordPress plugins that
rely on exec().
How can I further troubleshoot this?
(I posted this on ServerFault, but so far there haven't been any answers.)
Test script:
---------------
$cmd = '"\\\\myShare\\inetpub\\wwwroot\\example.com\\ffmpeg\\bin\\ffmpeg" -i
"\\\\myShare\\inetpub\\wwwroot\\example.com\\input.jpg" -vf
"crop=100:100:70:80"
"\\\\myShare\\inetpub\\wwwroot\\example.com\\output.jpg"';
exec($cmd, $output, $return_var);
Expected result:
----------------
Procmon indicates that ffmpeg starts.
A new file appears called output.jpg
Actual result:
--------------
Procmon does not indicate that ffmpeg starts.
Output.jpg does not appear
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=71883&edit=1
Thread (4 messages)