Re: About rewrite zend_compile_file on win32.

From: Date: Sun, 29 May 2016 12:21:09 +0000
Subject: Re: About rewrite zend_compile_file on win32.
References: 1  Groups: php.pecl.dev 
Request: Send a blank email to pecl-dev+get-13788@lists.php.net to get a copy of this message
I have solved the problem, Use windows pipe *int _pipe( int *phandles, unsigned int psize, int textmode ); * instead of CreatePipe or CreateNamedPipe. Thanks! ~~~~~~~~~~~~ - bleakwind@gmail.com 2016-05-29 10:07 GMT+08:00 Bleakwind <bleakwind@gmail.com>: > About rewrite zend_compile_file on win32. > > pipe on windows can not work. > > > >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> *static zend_op_array *mynew_compile_file(zend_file_handle *file_handle, >> int type) { // Some Code... #if PHP_WIN32 // On win this >> can not work HANDLE piperead, pipewrite; SECURITY_ATTRIBUTES >> sa; sa.nLength = sizeof(SECURITY_ATTRIBUTES); >> sa.lpSecurityDescriptor = NULL; sa.bInheritHandle = TRUE; if >> (!CreatePipe(&piperead, &pipewrite, &sa, 0)) { return NULL; >> } if (!WriteFile(pipewrite, data_source, data_source_len, NULL, >> NULL)) { return NULL; } int file_des = >> _open_osfhandle((zend_intptr_t)piperead, 0); if (file_handle->type >> == ZEND_HANDLE_FP) { fclose(file_handle->handle.fp); } if >> (file_handle->type == ZEND_HANDLE_FD) { close(file_handle->handle.fd); } >> file_handle->type = ZEND_HANDLE_FD; file_handle->handle.fd = >> file_des; ////// // On win this also can not work >> const char *pStrPipeName = "\\\\.\\pipe\\NamePipe_MoreWindows"; >> DWORD dwLen = 0; OVERLAPPED ov; memset(&ov, 0, >> sizeof(OVERLAPPED)); HANDLE hPipe = CreateNamedPipe(pStrPipeName, >> PIPE_ACCESS_DUPLEX, PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_NOWAIT, >> PIPE_UNLIMITED_INSTANCES, 0, 0, NMPWAIT_WAIT_FOREVER, 0); if >> (WaitNamedPipe(pStrPipeName, NMPWAIT_WAIT_FOREVER) == FALSE) { >> return NULL; } WriteFileEx(hPipe, data_source, >> data_source_len, &dwLen, &ov); int file_des = >> _open_osfhandle((intptr_t)hPipe, 0); if (file_handle->type == >> ZEND_HANDLE_FP) { fclose(file_handle->handle.fp); } if >> (file_handle->type == ZEND_HANDLE_FD) { close(file_handle->handle.fd); } >> file_handle->type = ZEND_HANDLE_FD; file_handle->handle.fd = >> file_des; ////// #else // On Unix this can work int >> pipeline[2] = {0, 0}; if (0 != pipe(pipeline)) { return >> NULL; } if (write(pipeline[1], data_source, data_source_len) >> != data_source_len) { return NULL; } if >> (file_handle->type == ZEND_HANDLE_FP) { fclose(file_handle->handle.fp); } >> if (file_handle->type == ZEND_HANDLE_FD) { >> close(file_handle->handle.fd); } file_handle->type = >> ZEND_HANDLE_FD; file_handle->handle.fd = pipeline[0]; if >> (pipeline[1]) { close(pipeline[1]); } ////// #endif return >> myori_compile_file(file_handle, type);}* > > > > ~~~~~~~~~~~~ > - bleakwind@gmail.com >

« previous php.pecl.dev (#13788) next »