php在linux,unix下有php-fpm,spawn-fcgi等进程守护程序,但是在window下没有。 一般会以下命令启动C:/php5/php-cgi.exe-b127.0.0.1:9000-cC:/php5/php.ini 但是这样受限于php-cgi的PHP_FCGI_MAX_REQUESTS环境变量,默认处理500次后自动退出php-cgi.加之一些非
php在linux,unix下有php-fpm,spawn-fcgi等进程守护程序,但是在window下没有。
一般会以下命令启动 C:/php5/php-cgi.exe -b 127.0.0.1:9000 -c C:/php5/php.ini
但是这样受限于php-cgi的PHP_FCGI_MAX_REQUESTS环境变量,默认处理500次后自动退出php-cgi.加之一些非正常原因的异常退出,都会导致php-cgi.exe的退出。所有在window需要进程守护程序,当php-cgi退出后自动打开新的php-cgi进程。
注意事项:windows建议关闭Dr. Watson,否则 异常的php-cgi无法正常退出。
http://support.microsoft.com/kb/188296/zh-cn
// FastCGIHelper.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #pragma comment(lib, "ws2_32.lib") const PCHAR cServiceName="WinFastCGIHelper"; HANDLE hJob; INT icount; INT iport; CHAR ipbuf[32]; CHAR cmdbuf[256]; //--------------------------------------------------------------------------- SERVICE_STATUS ServiceStatus; SERVICE_STATUS_HANDLE hStatus; void Install(void); void Uninstall(void); void ServiceMain(int argc, char** argv); void ThreadProc(LPVOID pParam); void ControlHandler(DWORD request); //--------------------------------------------------------------------------- int _tmain(int argc, _TCHAR* argv[]) { if (argc>1 && _stricmp(argv[1],"/i")==0) { Install(); } else if (argc>1 && _stricmp(argv[1],"/u")==0) { Uninstall(); } else { SERVICE_TABLE_ENTRY ServiceTable[2]; ServiceTable[0].lpServiceName = cServiceName; ServiceTable[0].lpServiceProc = (LPSERVICE_MAIN_FUNCTION)ServiceMain; ServiceTable[1].lpServiceName = NULL; ServiceTable[1].lpServiceProc = NULL; ::StartServiceCtrlDispatcher(ServiceTable); } return 0; } void ServiceMain(int argc, char** argv) { ServiceStatus.dwServiceType =SERVICE_WIN32; ServiceStatus.dwCurrentState =SERVICE_START_PENDING; ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN; ServiceStatus.dwWin32ExitCode = 0; ServiceStatus.dwServiceSpecificExitCode = 0; ServiceStatus.dwCheckPoint = 0; ServiceStatus.dwWaitHint = 0; hStatus = ::RegisterServiceCtrlHandler(cServiceName, (LPHANDLER_FUNCTION)ControlHandler); if (hStatus == NULL) return; if (GetLastError()!=NO_ERROR) { ServiceStatus.dwCurrentState = SERVICE_STOPPED; ::SetServiceStatus(hStatus, &ServiceStatus); return; } CHAR cConfigName[256]; ZeroMemory(cConfigName,256); DWORD dwSize=GetModuleFileName(NULL,cConfigName,256); while(dwSize>0 && cConfigName[dwSize]!='\\') cConfigName[dwSize--]=0; strcat_s(cConfigName,"config.ini"); icount=GetPrivateProfileInt("setup","CmdCount",1,cConfigName); GetPrivateProfileString("setup","CmdPath","",cmdbuf,256,cConfigName); if(icount<1) icount=1; if(icount>32) icount=32; iport =GetPrivateProfileInt("setup","Port",9000,cConfigName); GetPrivateProfileString("setup","IP","127.0.0.1",ipbuf,32,cConfigName); WSADATA wsa_data; WSAStartup(0x0202, &wsa_data); SOCKADDR_IN listen_addr; listen_addr.sin_family =AF_INET; listen_addr.sin_addr.S_un.S_addr= inet_addr(ipbuf); listen_addr.sin_port = htons(iport); DWORD s=socket(AF_INET,SOCK_STREAM,IPPROTO_IP); if(bind(s, (struct sockaddr*)&listen_addr, sizeof(struct sockaddr_in)) || listen(s,16) ){ ServiceStatus.dwCurrentState = SERVICE_STOPPED; ::SetServiceStatus(hStatus, &ServiceStatus); return; } CHAR strtmp[128]; ZeroMemory(strtmp,128); GetPrivateProfileString("env","PHPRC",".",strtmp,127,cConfigName); SetEnvironmentVariable("PHPRC",strtmp); GetPrivateProfileString("env","PHP_FCGI_MAX_REQUESTS","5000",strtmp,127,cConfigName); SetEnvironmentVariable("PHP_FCGI_MAX_REQUESTS",strtmp); hJob=CreateJobObject(NULL,NULL); JOBOBJECT_EXTENDED_LIMIT_INFORMATION limit; QueryInformationJobObject(hJob, JobObjectExtendedLimitInformation, &limit, sizeof(limit), NULL); limit.BasicLimitInformation.LimitFlags |= JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE; SetInformationJobObject(hJob, JobObjectExtendedLimitInformation, &limit, sizeof(limit)); ServiceStatus.dwCurrentState = SERVICE_RUNNING; SetServiceStatus(hStatus, &ServiceStatus); for(int i=0;i<icount;i++) CloseHandle(CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadProc,(LPVOID)s,0,0)); WaitForSingleObject(hJob, INFINITE); closesocket(s); WSACleanup(); ServiceStatus.dwWin32ExitCode = 0; ServiceStatus.dwCurrentState = SERVICE_STOPPED; SetServiceStatus(hStatus, &ServiceStatus); } //--------------------------------------------------------------------------- void ThreadProc(LPVOID pParam) { STARTUPINFO si; PROCESS_INFORMATION pi; while(ServiceStatus.dwCurrentState == SERVICE_RUNNING) { ZeroMemory(&si,sizeof(STARTUPINFO)); ZeroMemory(&pi,sizeof(PROCESS_INFORMATION)); si.cb = sizeof(STARTUPINFO); si.dwFlags = STARTF_USESTDHANDLES; si.hStdInput = (HANDLE)pParam; si.hStdOutput = INVALID_HANDLE_VALUE; si.hStdError = INVALID_HANDLE_VALUE; if(0==CreateProcess(NULL,cmdbuf,NULL,NULL,TRUE, CREATE_NO_WINDOW | CREATE_SUSPENDED | CREATE_BREAKAWAY_FROM_JOB ,NULL,NULL,&si,&pi)) break; AssignProcessToJobObject(hJob, pi.hProcess); ResumeThread(pi.hThread); WaitForSingleObject(pi.hProcess, INFINITE); CloseHandle( pi.hProcess); CloseHandle( pi.hThread ); } } //--------------------------------------------------------------------------- void ControlHandler(DWORD request) { switch(request) { case SERVICE_CONTROL_STOP: ServiceStatus.dwWin32ExitCode = 0; ServiceStatus.dwCurrentState = SERVICE_STOPPED; SetServiceStatus(hStatus, &ServiceStatus); CloseHandle(hJob); return; case SERVICE_CONTROL_SHUTDOWN: ServiceStatus.dwWin32ExitCode = 0; ServiceStatus.dwCurrentState = SERVICE_STOPPED; SetServiceStatus(hStatus, &ServiceStatus); CloseHandle(hJob); return; } ::SetServiceStatus (hStatus, &ServiceStatus); } //--------------------------------------------------------------------------- void Install(void) { char szFilePath[256]; SC_HANDLE hSCM,hService; ZeroMemory(szFilePath,256); GetModuleFileName(NULL,szFilePath,256); hSCM=::OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); SC_LOCK sclLock = LockServiceDatabase(hSCM); hService = ::CreateService( hSCM, cServiceName, cServiceName, SERVICE_ALL_ACCESS, SERVICE_WIN32_OWN_PROCESS,SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL, szFilePath, NULL, NULL,NULL, NULL, NULL); SERVICE_DESCRIPTION sdBuf; sdBuf.lpDescription = "php fastcgi process helper for windows"; ChangeServiceConfig2(hService,SERVICE_CONFIG_DESCRIPTION,&sdBuf); ::CloseServiceHandle(hService); ::UnlockServiceDatabase(sclLock); ::CloseServiceHandle(hSCM); printf("Service Install OK !!!"); } //--------------------------------------------------------------------------- void Uninstall(void) { SERVICE_STATUS sStatus ; SC_HANDLE hSCM=::OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); SC_HANDLE hService=::OpenService(hSCM, cServiceName, SERVICE_STOP | DELETE); if (hService==NULL) { printf("Service Open Error !!!"); } else { ::ControlService(hService, SERVICE_CONTROL_STOP, &sStatus); ::DeleteService(hService); printf("Service Uninstall OK !!!"); } ::CloseServiceHandle(hService); ::CloseServiceHandle(hSCM); } //---------------------------------------------------------------------------

c盘的users是用户文件夹,主要存放用户的各项配置文件。users文件夹是windows系统的重要文件夹,不能随意删除;它保存了很多用户信息,一旦删除会造成数据丢失,严重的话会导致系统无法启动。

启动任务管理器的三个快捷键是:1、“Ctrl+Shift+Esc”,可直接打开任务管理器;2、“Ctrl+Alt+Delete”,会进入“安全选项”的锁定界面,选择“任务管理器”,即可以打开任务管理器;3、“Win+R”,会打开“运行”窗口,输入“taskmgr”命令,点击“确定”即可调出任务管理器。

PIN码是Windows系统为了方便用户本地登录而独立于window账户密码的快捷登录密码,是Windows系统新添加的一套本地密码策略;在用户登陆了Microsoft账户后就可以设置PIN来代替账户密码,不仅提高安全性,而且也可以让很多和账户相关的操作变得更加方便。PIN码只能通过本机登录,无法远程使用,所以不用担心PIN码被盗。

对于刚刚开始使用PHP的用户来说,如果在Windows操作系统中遇到了“php不是内部或外部命令”的问题,可能会感到困惑。这个错误通常是由于系统无法识别PHP的路径导致的。在本文中,我将为您提供一些可能会导致这个问题的原因和解决方法,以帮助您快速解决这个问题。

win10自带的onenote是UWP版本;onenote是一套用于自由形式的信息获取以及多用户协作工具,而UWP版本是“Universal Windows Platform”的简称,表示windows通用应用平台,不是为特定的终端设计的,而是针对使用windows系统的各种平台。

因为win10系统是不自带扫雷游戏的,需要用户自行手动安装。安装步骤:1、点击打开“开始菜单”;2、在打开的菜单中,找到“Microsoft Store”应用商店,并点击进入;3、在应用商店主页的搜索框中,搜索“minesweeper”;4、在搜索结果中,点击选择需要下载的“扫雷”游戏;5、点击“获取”按钮,等待获取完毕后自动完成安装游戏即可。

在windows中鼠标指针呈四箭头时一般表示选中对象可以上、下、左、右移动。在Windows中鼠标指针首次用不同的指针来表示不同的状态,如系统忙、移动中、拖放中;在Windows中使用的鼠标指针文件还被称为“光标文件”或“动态光标文件”。

windows操作系统的特点包括:1、图形界面;直观高效的面向对象的图形用户界面,易学易用。2、多任务;允许用户同时运行多个应用程序,或在一个程序中同时做几件事情。3、即插即用。4、出色的多媒体功能。5、对内存的自动化管理。


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

드림위버 CS6
시각적 웹 개발 도구

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.
