#40758 [Fbk->Opn]: Test fcgi_is_fastcgi() is wrong on windows
ID: 40758 User updated by: jostb2345 at yahoo dot com Reported By: jostb2345 at yahoo dot com -Status: Feedback +Status: Open Bug Type: CGI related Operating System: Windows (all versions) PHP Version: 5.2.1 Assigned To: dmitry New Comment: > May be older PHP versions were able to support sockets on win32, but I > have never seen any FastCGI plugin implmentation that passes sockets. PHPIntKitForWindows.zip => http://www.alphaworks.ibm.com/tech/phpintwasce/download > Also I don't see any sockets advantages (only disadvantages). I don't think named pipes work on all operating systems. Furthermore Java supports only TCP socket communication (well, it is possible to access Windows and Unix named pipes from Java. But one has to implement it twice. RandomAccessFile on Windows, a pair of normal Files on Unix). To be practical -- and for backward compatibility -- we need a working TCP socket implementation on both operating systems. tcp sockets worked in PHP versions < 5.2.0 and I don't see a good reason to drop this. Regards, Jost Boekemeier Previous Comments: [2007-03-12 17:21:32] [EMAIL PROTECTED] yes. PHP expects pipe but not a socket. In C you may even try to pass window HANDLE :) May be older PHP versions were able to support sockets on win32, but I have never seen any FastCGI plugin implmentation that passes sockets. Also I don't see any sockets advantages (only disadvantages). ---- [2007-03-09 17:06:35] jostb2345 at yahoo dot com > I don't understand for what reason some program passes stdout to > PHP Because I thought you need to distinguish sockets from named pipes. I have attached code which crashes php since 5.2.0. Regards, Jost Boekemeier [2007-03-09 17:01:01] jostb2345 at yahoo dot de # include # include # define close closesocket term() { printf("err:%d", (GetLastError())); exit(1); } struct sockaddr_in saddr; main() { SOCKET listen_handle; SOCKADDR_IN saServer; char *cmd = "php-cgi.exe"; STARTUPINFO su_info; SECURITY_ATTRIBUTES sa = { 0 }; WORD wVersionRequested = MAKEWORD(1,1); WSADATA wsaData; int n = WSAStartup(wVersionRequested, &wsaData); if (wsaData.wVersion != wVersionRequested) term(); listen_handle = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); saServer.sin_family = AF_INET; saServer.sin_addr.s_addr = INADDR_ANY; saServer.sin_port = htons(9667); n = bind(listen_handle, (LPSOCKADDR)&saServer, sizeof(struct sockaddr)); if (n == SOCKET_ERROR) term(); n = listen(listen_handle, 20); if (n == SOCKET_ERROR) term(); ZeroMemory(&su_info, sizeof(STARTUPINFO)); su_info.cb = sizeof(STARTUPINFO); su_info.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES; su_info.wShowWindow = SW_HIDE; su_info.hStdInput = listen_handle; su_info.hStdError = INVALID_HANDLE_VALUE; su_info.hStdOutput = INVALID_HANDLE_VALUE; SetHandleInformation(su_info.hStdInput, HANDLE_FLAG_INHERIT, TRUE); PROCESS_INFORMATION p; if(CreateProcess(NULL, cmd, NULL, NULL, 1, 0, NULL, NULL, &su_info, &p)) { CloseHandle(p.hThread); closesocket(listen_handle); } else { term(); } if( WaitForSingleObject(p.hProcess, INFINITE) == WAIT_FAILED ){ term(); } WSACleanup(); } [2007-03-09 13:36:15] [EMAIL PROTECTED] I don't see any difference with old code. See OS_IsFcgi() and OS_LibInit(). Also I don't understand for what reason some program passes stdout to PHP. ---------------- [2007-03-08 13:45:33] jostb2345 at yahoo dot com Description: On windows, php 5.2.0 and above the following code (written in pseudo-code) doesn't work anymore: socket = socket(AF_INET, ...); bind(socket, ...); listen(socket, ...); outputHandle=GetStdHandle(...); inputHandle=socket; CreateProcess(...,"php-cgi.exe", ..., IOHandles); The problem is that "is_fastcgi" is only set if the OutputHandle and ErrorHandle are invalid. If both are invalid, InputHandle is assumed to be a named pipe. The Unix version still uses the old (correct) code. To correct this problem either the old FCGI_isfcgi() should be used or the test must be dublicated. See procedures: int fcgi_init(void); int fcgi_is_fastcgi(void); Regards, Jost Boekemeier Reproduce code: --- See above. If necessary I can provide a test program. -- Edit this bug report at http://bugs.php.net/?id=40758&edit=1
#40758 [Fbk->Opn]: Test fcgi_is_fastcgi() is wrong on windows
ID: 40758 User updated by: jostb2345 at yahoo dot com Reported By: jostb2345 at yahoo dot com -Status: Feedback +Status: Open Bug Type: CGI related Operating System: Windows (all versions) PHP Version: 5.2.1 Assigned To: dmitry New Comment: > I don't understand for what reason some program passes stdout to > PHP Because I thought you need to distinguish sockets from named pipes. I have attached code which crashes php since 5.2.0. Regards, Jost Boekemeier Previous Comments: [2007-03-09 17:01:01] jostb2345 at yahoo dot de # include # include # define close closesocket term() { printf("err:%d", (GetLastError())); exit(1); } struct sockaddr_in saddr; main() { SOCKET listen_handle; SOCKADDR_IN saServer; char *cmd = "php-cgi.exe"; STARTUPINFO su_info; SECURITY_ATTRIBUTES sa = { 0 }; WORD wVersionRequested = MAKEWORD(1,1); WSADATA wsaData; int n = WSAStartup(wVersionRequested, &wsaData); if (wsaData.wVersion != wVersionRequested) term(); listen_handle = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); saServer.sin_family = AF_INET; saServer.sin_addr.s_addr = INADDR_ANY; saServer.sin_port = htons(9667); n = bind(listen_handle, (LPSOCKADDR)&saServer, sizeof(struct sockaddr)); if (n == SOCKET_ERROR) term(); n = listen(listen_handle, 20); if (n == SOCKET_ERROR) term(); ZeroMemory(&su_info, sizeof(STARTUPINFO)); su_info.cb = sizeof(STARTUPINFO); su_info.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES; su_info.wShowWindow = SW_HIDE; su_info.hStdInput = listen_handle; su_info.hStdError = INVALID_HANDLE_VALUE; su_info.hStdOutput = INVALID_HANDLE_VALUE; SetHandleInformation(su_info.hStdInput, HANDLE_FLAG_INHERIT, TRUE); PROCESS_INFORMATION p; if(CreateProcess(NULL, cmd, NULL, NULL, 1, 0, NULL, NULL, &su_info, &p)) { CloseHandle(p.hThread); closesocket(listen_handle); } else { term(); } if( WaitForSingleObject(p.hProcess, INFINITE) == WAIT_FAILED ){ term(); } WSACleanup(); } [2007-03-09 13:36:15] [EMAIL PROTECTED] I don't see any difference with old code. See OS_IsFcgi() and OS_LibInit(). Also I don't understand for what reason some program passes stdout to PHP. -------------------- [2007-03-08 13:45:33] jostb2345 at yahoo dot com Description: On windows, php 5.2.0 and above the following code (written in pseudo-code) doesn't work anymore: socket = socket(AF_INET, ...); bind(socket, ...); listen(socket, ...); outputHandle=GetStdHandle(...); inputHandle=socket; CreateProcess(...,"php-cgi.exe", ..., IOHandles); The problem is that "is_fastcgi" is only set if the OutputHandle and ErrorHandle are invalid. If both are invalid, InputHandle is assumed to be a named pipe. The Unix version still uses the old (correct) code. To correct this problem either the old FCGI_isfcgi() should be used or the test must be dublicated. See procedures: int fcgi_init(void); int fcgi_is_fastcgi(void); Regards, Jost Boekemeier Reproduce code: --- See above. If necessary I can provide a test program. -- Edit this bug report at http://bugs.php.net/?id=40758&edit=1
#40758 [NEW]: Test fcgi_is_fastcgi() is wrong on windows
From: jostb2345 at yahoo dot com Operating system: Windows (all versions) PHP version: 5.2.1 PHP Bug Type: Reproducible crash Bug description: Test fcgi_is_fastcgi() is wrong on windows Description: On windows, php 5.2.0 and above the following code (written in pseudo-code) doesn't work anymore: socket = socket(AF_INET, ...); bind(socket, ...); listen(socket, ...); outputHandle=GetStdHandle(...); inputHandle=socket; CreateProcess(...,"php-cgi.exe", ..., IOHandles); The problem is that "is_fastcgi" is only set if the OutputHandle and ErrorHandle are invalid. If both are invalid, InputHandle is assumed to be a named pipe. The Unix version still uses the old (correct) code. To correct this problem either the old FCGI_isfcgi() should be used or the test must be dublicated. See procedures: int fcgi_init(void); int fcgi_is_fastcgi(void); Regards, Jost Boekemeier Reproduce code: --- See above. If necessary I can provide a test program. -- Edit bug report at http://bugs.php.net/?id=40758&edit=1 -- Try a CVS snapshot (PHP 4.4): http://bugs.php.net/fix.php?id=40758&r=trysnapshot44 Try a CVS snapshot (PHP 5.2): http://bugs.php.net/fix.php?id=40758&r=trysnapshot52 Try a CVS snapshot (PHP 6.0): http://bugs.php.net/fix.php?id=40758&r=trysnapshot60 Fixed in CVS: http://bugs.php.net/fix.php?id=40758&r=fixedcvs Fixed in release: http://bugs.php.net/fix.php?id=40758&r=alreadyfixed Need backtrace: http://bugs.php.net/fix.php?id=40758&r=needtrace Need Reproduce Script:http://bugs.php.net/fix.php?id=40758&r=needscript Try newer version:http://bugs.php.net/fix.php?id=40758&r=oldversion Not developer issue: http://bugs.php.net/fix.php?id=40758&r=support Expected behavior:http://bugs.php.net/fix.php?id=40758&r=notwrong Not enough info: http://bugs.php.net/fix.php?id=40758&r=notenoughinfo Submitted twice: http://bugs.php.net/fix.php?id=40758&r=submittedtwice register_globals: http://bugs.php.net/fix.php?id=40758&r=globals PHP 3 support discontinued: http://bugs.php.net/fix.php?id=40758&r=php3 Daylight Savings: http://bugs.php.net/fix.php?id=40758&r=dst IIS Stability:http://bugs.php.net/fix.php?id=40758&r=isapi Install GNU Sed: http://bugs.php.net/fix.php?id=40758&r=gnused Floating point limitations: http://bugs.php.net/fix.php?id=40758&r=float No Zend Extensions: http://bugs.php.net/fix.php?id=40758&r=nozend MySQL Configuration Error:http://bugs.php.net/fix.php?id=40758&r=mysqlcfg