Doc #71883 [Com]: PHP exec() over UNC path on Windows

[email protected] ("melindaetinw81 at gmail dot com") Thu, 05 Jan 2023 11:45:28 +0000
Newsgroups php.doc.bugs
Message-ID <[email protected]>
Edit report at https://bugs.php.net/bug.php?id=71883&edit=1

 ID:                 71883
 Comment by:         melindaetinw81 at gmail dot com
 Reported by:        hobbes at visionfriendly dot com
 Summary:            PHP exec() over UNC path on Windows
 Status:             Verified
 Type:               Documentation Problem
 Package:            IIS related
 Operating System:   Windows 2012R2
 PHP Version:        5.6.19
 Block user comment: N
 Private report:     N

 New Comment:

this might help.....
(https://www.myatriumhealth.us/)github.com


Previous Comments:
------------------------------------------------------------------------
[2018-04-24 13:57:57] frank at louwers dot be

Please note this is Windows related, not (only) IIS related. Happens in Windows + Apache + PHP as well!

As a workaround, use the chdir() method. Do not try to be clever and try to avoid this issue by moving make a "symlink" (or whatever that's called in the windows world) to the UNC. You will then suffer from wierd 403 bugs that only pop up once every X request.

------------------------------------------------------------------------
[2017-07-25 19:47:56] [email protected]

Reclassified as a doc issue

------------------------------------------------------------------------
[2017-01-18 17:27:03] internero at gmail dot com

Exactly same issue here: but with PHP 5.4.24 running on IIS 7.5 with Windows Server 2008R2, inside a load balanced server farm, using UNC paths to share PHP files to servers.

The big problem is that we cannot just chdir() to a local drive/folder because the command passed to exec() save files. If we change chdir(), files saved just get lost (ie go to the wrong place).

I think this need to be fixed in all PHP versions with active support.

And thanks a lot for finding the the actual reason of processes not running when using UNC path.

------------------------------------------------------------------------
[2016-03-23 17:36:47] hobbes at visionfriendly dot com

Wow.  Using proc_open() allowed me to successfully execute commands.  This in turn allowed me to use procmon to discover the difference between the way I was using exec() and proc_open().  Long story short, I would call this a core bug in PHP running on Windows when the PHP scripts are on a network share.  Here are the key details:

* exec() defaults the current working directory to the path of 
  the PHP script, which in my case is a UNC path.
* cmd.exe does not allow you do have a UNC path as the current 
  working directory, and cmd.exe claims that it will revert to 
  the Windows folder.
* Although cmd.exe continues to execute and conhost.exe is 
  spawned, the original working directory still causes some 
  sort of problem, and the desired executable is never started.

So a simple workaround is to chdir() to a local directory before calling exec().  However, there are a lot of WordPress plugins that rely on exec(), so in my opinion exec() should be agnostic to whether the PHP script is running on a share.

Thank you for your help, @pajoye!  What can we do to get this submitted as a bug to be fixed in the next release?

------------------------------------------------------------------------
[2016-03-23 03:53:59] [email protected]

Check what happens in proc open to see what kind of errors happen where.

If you copy it (anonymize it) on gist :)

------------------------------------------------------------------------


The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at

    https://bugs.php.net/bug.php?id=71883


--
Edit this bug report at https://bugs.php.net/bug.php?id=71883&edit=1