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