您的位置:首页 > 编程语言 > PHP开发

windows下将任意程序(PHP)添加为服务

2016-12-11 18:56 267 查看

题记

本文主要阐述instsrv.exe 和 srvany.exe 将某程序(PHP)添加到windows 服务中。

近期遇到一些情况,web服务如果按照Apache+PHP+MySql 搭建起来代价有点高。Mysql可以用Sqlite代替。PHP有自带的Web Server。这样一个PHP就可以解决。略微麻烦的是后台执行和开机启动的问题。

如何使用PHP自带Web Server

命令 php -S {server}:{port} [-t path] [router.php] [-file webServer.php]

例句 php -S lcoalhost:80 -t D:\path router.php-file webServer.php

{server} 必填 域名、主机名或IP地址

{port} 必填 监听的端口号

[-t path] 选填 如果不填默认为当前目录

[router.php] 选填 不填将不使用路由

[-file webServer.php] 选填 不填将不修改webServer机制

路由文件

如果路由为 index.php

$url = parse_url($_SERVER['REQUEST_URI']);
$uri = $url['path'];
if ($uri != "/" && $uri != "/index.php" && file_exists(dirname(__FILE__).$uri)) {
//请求的文件或目录存在,直接返回
return false;
}


如果路由不为 index.php

$url = parse_url($_SERVER['REQUEST_URI']);
$uri = $url['path'];
if (file_exists(dirname(__FILE__).$uri)) {
//请求的文件或目录存在,直接返回
return false;
}


以上代码 能实现类似于 以下
.htaccess
文件的效果

<IfModule mod_rewrite.c>
Options +FollowSymlinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
</IfModule>


服务器配置文件

webServer.php
文件 复制自php官方,请自行脑补或测试其功能

<?php
if (preg_match('/\.css|\.js|\.jpg|\.png|\.map$/', $_SERVER['REQUEST_URI'], $match)) {
$mimeTypes = [
'.css' => 'text/css',
'.js'  => 'application/javascript',
'.jpg' => 'image/jpg',
'.png' => 'image/png',
'.map' => 'application/json'
];
$path = __DIR__ . $_SERVER['REQUEST_URI'];
if (is_file($path)) {
header("Content-Type: {$mimeTypes[$match[0]]}");
require $path;
exit;
}
}
require_once __DIR__.'/../app/bootstrap.php';


创建 windows服务

安装与删除

instsrv.exe 与 srvany.exe的资料网上较少,基本都是相互复制。

至今没找到64位版的程序,不过我在64位Win10测试无异常

instsrv.exe 的作用是将 srvany.exe 添加到windows 服务中

srvany.exe 的作用是通过服务方式加载指定程序。

instsrv.exe 与 srvany.exe可以放到任意目录 并非必须放在 System32

添加 C:\server\instsrv.exe {Name} C:\server\srvany.exe

删除 C:\server\instsrv.exe {Name} remove

添加服务后打开注册表
regedit

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\{Name}

服务名称项目右击新建项,名称为Parameters。

定位到Parameters项,新建以下几个字符串值。

名称 Application 值为你要作为服务运行的程序地址。

名称 AppDirectory 值为你要作为服务运行的程序所在文件夹路径。

名称 AppParameters 值为你要作为服务运行的程序启动所需要的参数。



通过服务
services.msc
管理



找到添加的服务
{Name}
可以与普通服务一样管理

后记

将PHP直接添加到服务中的意义,不仅在于省掉一个Apache之类的东西。还可以在Windows环境中使用PHP创建其他常驻内存的服务(如果对性能要求不高的话)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息