太阳侠

我是一颗恒星


  • 首页

  • 分类

  • 归档

  • 标签

  • 关于

linux查找并移动文件

发表于 2021-08-15   |   分类于 服务器

linux查找并移动文件

原文参考

find . -name '10-*.dat' -exec mv {} ../ \;

这里:

=> -exec mv {} /mnt/mp3 \; - 运行mv命令。

=> {} - 字符 ‘{}’ 代表find到的所有内容。

=>../表示当前用户目录的上一级目录

=> \; - 结束 /bin/mv 命令。

亲测可用

移动搜索匹配条件的文件到指定目录

查找并移动

find . -name 'faverifyimage_*.png' -exec mv {} ../ \;

只查找

find . -name 'faverifyimage_*.png';

以下命令是:

移动【当前目录下(不含子目录)】【以faverifyimage_开头的图片文件】到【faverifyimgbk】目录。

说明:扩展了“不含子目录”这个条件,只操作“当前目录”;同时,继续执行了其他格式的图片文件。

find . -maxdepth 1 -name 'faverifyimage_*.png' -exec mv {} ./faverifyimgbk \;
find . -maxdepth 1 -name 'faverifyimage_*.jpg' -exec mv {} ./faverifyimgbk \;
find . -maxdepth 1 -name 'faverifyimage_*.jpeg' -exec mv {} ./faverifyimgbk \;

<<<<<<< HEAD

之后好久没更新。

因为github在2021年08月13日之后停止了账号密码的登录机制。

1005c8acaffa52e5d81b9fff2815f3f1febb6fdc   

PHP浮点数计算必须使用PHP提供的高精度计算函数

发表于 2021-06-07   |   分类于 技术日记

一、前方有坑

php在使用加减乘除等运算符计算浮点数的时候,经常会出现意想不到的结果,特别是关于财务数据方面的计算,给不少工程师惹了很多的麻烦。比如今天工作终于到的一个案例:

$a = 2586;

$b = 2585.98;

var_dump($a-$b);

期望的结果是:float(0.02)

实际结果:

float(0.019999999999982)

人生有坑,处处提防

二、防坑攻略:

1、通过乘100的方式转化为整数加减,然后在除以100转化回来……

2、使用number_format转化成字符串,然后在使用(float)强转回来……

3、php提供了高精度计算的函数库,实际上就是为了解决这个浮点数计算问题而生的。

主要函数有:

bcadd — 将两个高精度数字相加

bccomp — 比较两个高精度数字,返回-1, 0, 1

bcdiv — 将两个高精度数字相除

bcmod — 求高精度数字余数

bcmul — 将两个高精度数字相乘

bcpow — 求高精度数字乘方

bcpowmod — 求高精度数字乘方求模,数论里非常常用

bcscale — 配置默认小数点位数,相当于就是Linux bc中的”scale=”

bcsqrt — 求高精度数字平方根

bcsub — 将两个高精度数字相减

前两种流氓的办法就不测试了,使用bcsub测试第三种两数相减的例子,

先看bcsub用法(来自官网)

string bcsub ( string $left_operand , string $right_operand [, int $scale = int ] )

参数

left_operand 字符串类型的左操作数.

right_operand 字符串类型的右操作数.

scale 此可选参数用于设置结果中小数点后的小数位数。也可通过使用 bcscale() 来设置全局默认的小数位数,用于所有函数。

返回值 返回减法之后结果为字符串类型.

测试代码:

var_dump(bcsub($a,$b,2));

结果

0.02

其他的函数请参考PHP官方网站

三、为啥有坑:

php的bug?不是,这是所有语言基本上都会遇到的问题,所以基本上大部分语言都提供了精准计算的类库或函数库。

要搞明白这个原因, 首先我们要知道浮点数的表示(IEEE 754):

浮点数, 以64位的长度(双精度)为例, 会采用1位符号位(E), 11指数位(Q), 52位尾数(M)表示(一共64位).

符号位:最高位表示数据的正负,0表示正数,1表示负数。

指数位:表示数据以2为底的幂,指数采用偏移码表示

尾数:表示数据小数点后的有效数字.

这里的关键点就在于, 小数在二进制的表示, 小数如何转化为二进制呢?

算法是乘以2直到没有了小数为止。这里举个例子,0.9表示成二进制数

0.9*2=1.8 取整数部分 1

0.8(1.8的小数部分)*2=1.6 取整数部分 1

0.6*2=1.2 取整数部分 1

0.2*2=0.4 取整数部分 0

0.4*2=0.8 取整数部分 0

0.8*2=1.6 取整数部分 1

0.6*2=1.2 取整数部分 0

………

0.9二进制表示为(从上往下): 1100100100100……

注意:上面的计算过程循环了,也就是说*2永远不可能消灭小数部分,这样算法将无限下去。很显然,小数的二进制表示有时是不可能精确的 。其实道理很简单,十进制系统中能不能准确表示出1/3呢?同样二进制系统也无法准确表示1/10。这也就解释了为什么浮点型减法出现了”减不尽”的精度丢失问题。

换句话说:我们看到十进制小数,在计算机内存储的不是一个精确的数字,也不可能精确。所以在数字加减乘除后出现意想不到的结果。

四、防坑提示

基于以上原因,所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。如果确实需要更高的精度,应该使用任意精度数学函数或者 gmp 函数。

原文链接:https://www.cnblogs.com/kenshinobiy/p/10797902.html

Linux系统安装Composer的两种方法

发表于 2021-04-26   |   分类于 技术日记

实际使用的系统:CentOS 6.5

1、方法一 CURL

下载composer.phar文件

curl -sS https://getcomposer.org/installer | php

将composer.phar移动到环境变量中并且更名为composer

mv composer.phar  /usr/local/bin/composer

使用国内镜像

composer config -g repo.packagist composer https://packagist.phpcomposer.com

2、方法二 直接下载composer

下载

wget https://getcomposer.org/composer.phar

安装

cp composer.phar /usr/local/bin/composer
chmod u+x /usr/local/bin/composer

测试

composer –help

3、安装的时候用root用户,使用的时候用非root用户

否则,如果使用root运行会有提示:

运行composer出现do not run Composer as root/super user!

解决方法:

第1步 创建非root的新用户

[root@centos ~]# useradd newname
[root@centos ~]# passwd  newname

第2步 切换为新用户账户

[root@centos ~]# su newname

切换到新用户后 , 即可执行 原来的操作 , 顺利完成 composer 指令。

【注意】同时,需要使用root用户将 /usr/local/bin/composer 设置为755,否则其他用户无法执行该命令。

【本人亲测,使用上述方法2和步骤3成功安装了Composer 2.1-dev版。方法1未测试。】

服务器管理血的教训

发表于 2021-04-25   |   分类于 服务器

服务器管理血的教训

服务器管理,尤其是Linux服务器管理,必须注意以下几项原则,并做到。

1、绝对不能随便使用rm -rf命令

因为会递归强制删除文件,几乎都不会可恢复。【影响响程度太深】

挽救措施:

1、马上停止数据继续写入,将系统挂起。使用一些恢复数据的方法进行磁盘数据数据恢复操作。一般不能全部恢复;而且还会影响线上的业务的停止。

2、把快照的数据恢复到一个其他不是生产环境的阿里云服务器实例上,然后恢复到那个快照中的数据,再把误删除而需要的数据拷贝过来。原线上生产环境的业务不用停止。

2、绝对不能使用 yum update命令

因为会升级Linux 内核,而这个升级后的内核可能会引起各种问题。【影响范围太大】

挽救措施:

如果之前的系统内核还在,重启启动那个内核;
如果没问题的话,设置开机启动的内核为这个正常可用的内核。

3、关键操作开始之前必须备份数据+快照

既不能因为精神不好产生错误的指令输入,或者粗心大意没有在意造成严重的后果;
又不能怕操作错误而什么都不敢做了。

有一个宗旨【稳定第一】【宁愿冗余,也不得丢失数据】。

不明确知道命令输入执行的后果的,就绝不执行。

——————于2021年04月25日 凌晨5:35——必须记下。

DiscuzX3.1使用Composer安装第三方类库

发表于 2021-04-23   |   分类于 技术日记

Discuz X3.1 是一个成熟的基于PHP开发的社区系统(广义上来讲是一个建站系统),自从被企鹅收购后悄无声息的被遗弃了,伤感啊。如今要在Discuz上加什么功能,改bug什么的只能依靠自力更生了;好在有各种开源社区,开发好的功能、类库你可以无偿的直接拿来用。

Composer 是一个PHP类库管理器(官网http://docs.phpcomposer.com)。Composer 优雅的解决了PHP项目中第三方类库的安装及依赖关系。很多成熟的项目(如 Laravel )已经把Composer作为首选的安装方式;

所以,在Discuz X3.1 上安装第三方类库使用Composer后,会很大提高生产力。

下面我来说说如何在 Discuz X3.1中使用 Composer 安装并使用第三方类库 ;

先说安装Composer到Discuz X3.1框架下

一. 修改 class_core.php (\source\class\class_core.php) 如下

$autoloadfile=DISCUZ_ROOT.'/vendor/autoload.php';
if(!file_exists($autoloadfile)){  
    if(function_exists('spl_autoload_register')) {
        spl_autoload_register(array('core', 'autoload'));
    } else {
           function __autoload($class) {
            return core::autoload($class);
        }
       }
}else{
    require_once  $autoloadfile;//如果存在Composer 加载器 ,则使用 ;
}

二. 在 Discuz 目录下,新建一个 composer.json 内容如下:

{

    "require": {
         "guzzlehttp/guzzle": "~6.0"
    },

    "autoload":{
        "classmap": ["source/class/"]
    }
}

三. 终端上执行命令 composer install

看到类似这样的执行结果,表示已经安装成功了

Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 10 installs, 0 updates, 0 removals
  - Installing ralouphie/getallheaders (3.0.3): Loading from cache
  - Installing psr/http-message (1.0.1): Loading from cache
  - Installing guzzlehttp/psr7 (1.8.1): Loading from cache
  - Installing guzzlehttp/promises (1.4.1): Loading from cache
  - Installing symfony/polyfill-php72 (v1.19.0): Loading from cache
  - Installing symfony/polyfill-intl-normalizer (v1.19.0): Loading from cache
  - Installing paragonie/random_compat (v2.0.20): Loading from cache
  - Installing symfony/polyfill-php70 (v1.19.0): Loading from cache
  - Installing symfony/polyfill-intl-idn (v1.19.0): Loading from cache
  - Installing guzzlehttp/guzzle (6.5.5): Loading from cache
guzzlehttp/psr7 suggests installing laminas/laminas-httphandlerrunner (Emit PSR-   7 responses)
symfony/polyfill-intl-normalizer suggests installing ext-intl (For best performa   nce)
paragonie/random_compat suggests installing ext-libsodium (Provides a modern cry   pto API that can be used to generate random bytes.)
symfony/polyfill-intl-idn suggests installing ext-intl (For best performance)
guzzlehttp/guzzle suggests installing psr/log (Required for using the Log middle   ware)
Writing lock file
Generating autoload files
4 packages you are using are looking for funding.
Use the `composer fund` command to find out more!

另外,也可以查看项目根目录下的vendor下面的文件,核验新引入的类库是否下载更新成功。

具体如何安装及使用 Composer 请参阅 http://docs.phpcomposer.com

再说在Discuz程序中如何使用 “composer安装”的第三方类库

通过Composer autoload 加载器会把这些第三方库自动加载进来,这些第三方类库程序中的类、方法(函数)等等 在Discuz 程序中你想怎么用都可以。

例如,以使用guzzle为例。在任何一个Discuz X3.1框架下的PHP文件中,直接使用下面代码即可。

use GuzzleHttp\Client;

$client = new Client([
    // Base URI is used with relative requests
    'base_uri' => 'http://httpbin.org',
    // You can set any number of default request options.
    'timeout'  => 2.0,
]);

$response = $client->get('http://httpbin.org/get');

$code = $response->getStatusCode(); // 200
$reason = $response->getReasonPhrase(); // OK

// Check if a header exists.
if ($response->hasHeader('Content-Length')) {
    echo "It exists";
}

另外,Discuz X3.2 也适用上述方法。

DiscuzX二次开发之目录结构和运行逻辑

发表于 2021-04-23   |   分类于 技术日记

1.目录结构

DISCUZ使用自己的框架,与现在主流的web框架不同,DISCUZ没有路由表,他的路由是由入口文件来实现的。

api

  • uc.php UCenter 通信文件
  • /api/addons 应用中心
  • /api/connect 通讯互联
  • /api/google Google引擎结构处理
  • /api/javascript 数据和广告的js调用
  • /api/manyou manyou应用及搜索等相关服务
  • /api/remote 远程更新
  • /api/trade 支付宝、财付通等交易接口

archiver (论坛Archiver静态化目录)

config

  • config_global.php 论坛核心参数配置文件
  • config_ucenter.php UCenter核心参数配置文件

data (论坛数据缓存目录)

install (论坛安装目录(初始化运行时直接请求到此处将重新安装论坛))

source (程序后端功能处理目录)

  • discuz_version.php 程序版本号文件
  • /source/admincp 后台管理
  • /source/archiver 论坛archiver静态化程序目录
  • /source/class 核心类库
  • /source/function discuzX自定义函数库
  • /source/include 程序功能组件目录
  • /source/language 程序语言包(kv结构)
  • /source/module 程序功能模块程序包
  • /source/plugins 插件扩展目录

static (程序资源目录(头像、图片、下载文件、js文件等等))

template (前端模板目录)

  • /default/common 基础css文件、header、footer等公共引入文件
  • /default/collage 大学计划页面
  • /default/dige dige专区页面
  • /default/forum 首页、帖子页面
  • /default/member 会员页面
  • /default/home 家园页面
  • /default/group 群组页面
  • /default/mobile 移动端页面
  • /default/portal 文章页面
  • /default/search 搜索页面

uc_client (UCenter客户端)

  • /uc_client/control UC业务处理操作类
  • /uc_client/data 缓存文件目录
  • /uc_client/lib 类库目录(包括数据库操作类,XML类,UCCODE类,邮件发送类)
  • /uc_client/model UC业务模型类

uc_server (UCenter服务端 后台ucenter功能实现目录)

根目录文件

  • admin.php 后台入口文件
  • api.php API输出 入口文件
  • collage.php 大学计划入口文件
  • composer.json composer依赖版本记录文件
  • composer.lock composer依赖版本控制文件
  • connect.php 云平台接口文件
  • dige.php dige专区入口文件
  • forum.php 帖子信息入口文件
  • group.php 群组入口文件
  • home.php 家园入口文件
  • index.php 首页
  • member.php 用户入口文件(登录、注册、退出等)
  • misc.php 程序杂项扩展入口
  • plugin.php 插件入口文件
  • portal.php 门户入口文件
  • robots.txt 搜索引擎限制文件
  • search.php 搜索频道入口文件

2. 运行逻辑

discuz的入口文件起到了路由的作用。一个标准的discuz请求如下:

http://localhost/home.php?mod=space&uid=1&do=profile

当在浏览器输入以上url时,首先执行的是跟目录下的 home.php 文件

<?php

define('APPTYPEID', 1);
define('CURSCRIPT', 'home');

if(!empty($_GET['mod']) && ($_GET['mod'] == 'misc' || $_GET['mod'] == 'invite')) {
    define('ALLOWGUEST', 1);
}

require_once './source/class/class_core.php';  //引入核心类文件,作用为:自动引入类规则,错误和异常处理,单例创建discuz_application类实例,引入默认函数库function.core.php
require_once './source/function/function_home.php';  //引入discuzX函数库

$discuz = C::app();  //实例化discuz_application类
$cachelist = array('magic','usergroups', 'diytemplatenamehome','forumlinks','identity'); //加身份组缓存
$discuz->cachelist = $cachelist; //设置缓存列表
$discuz->init();  //初始化应用:数据库、系统设置、用户、session、任务、等(discuz_appication类里面)
$space = array();

$mod = getgpc('mod'); //接收$_GET['mod']数据
if(!in_array($mod, array('space', 'spacecp', 'misc', 'magic', 'editor', 'invite', 'task', 'medal', 'rss', 'follow'))) {
    $mod = 'space';
    $_GET['do'] = 'home';
}

if($mod == 'space' && ((empty($_GET['do']) || $_GET['do'] == 'index') && ($_G['inajax']))) {
    $_GET['do'] = 'profile';
}
$curmod = !empty($_G['setting']['followstatus']) && (empty($_GET['diy']) && empty($_GET['do']) && $mod == 'space' || $_GET['do'] == 'follow') ? 'follow' : $mod;
define('CURMODULE', $curmod);
runhooks($_GET['do'] == 'profile' && $_G['inajax'] ? 'card' : $_GET['do']);
require_once libfile('home/'.$mod, 'module');  //根据请求时传的mod参数经由上方判断确定加载对应文件

?>

注: libfile()函数在会将对应的模块字符串替换为模块的实际url。
libfile('home/'.$mod, 'module')的实际访问地址是 /source/module/home/$mod.php

进入到/source/module/home/home_space.php 文件中 根据请求参数 uid和do的值判断具体的执行过程,有些时候会直接引入响应的程序组件完成逻辑处理(这里引入了 /include/space/space_profile.php)

在 space_profile.php中判断运行之后输出到模板文件/template/default/home/space_profile.htm中。
注:template()函数在 核心函数库 function_core.php 中 用于加载当前使用模板的模板文件 。根据传参此时加载了 /template/default/home/space_profile.htm 文件

在模板文件space_profile.htm中 可以直接使用php文件中的数据变量进行赋值渲染输出到浏览器。
注:template模板语法不赘述 详见 模板语法

PHP实现中文字符串的长度计算和截取无乱码

发表于 2021-04-12   |   分类于 技术日记

在我们学习PHP知识的过程中,PHP截取字符串应该是一个非常常见的字符串基础操作了,想必大家都比较熟悉这方面知识点。

但是有些新手朋友们可能遇到过,当待截取的字符串出现中英文混合时,计算字符串的长度,会出现不准确和截取出现乱码的情况,其实这个也是非常容易解决的。

首先,要了解关于中英文占多少字节的问题。

ASCII码:一个中文汉字占两个字节的空间。

UTF-8编码:一个中文(含繁体)等于三个字节。

Unicode编码:一个中文(含繁体)等于两个字节。

其次,如果是需要计算字符串的长度,需要明确是“字符”的长度还是“字节”的长度。

例如,是不是中英文数字符号等1个都算1个,还是按实际占用的字节计算。
这个需要看具体的使用场景,需要存储导数据时,需要按字节计算实际的长度,和数据库字段的长度匹配。需要前端显示时,可能需要按字符计算。

第三,实际处理用到的两个函数mb_substr()和mb_strlen()

mb_substr($str,$start,$len,$encoding),用于中文字符串的截取,在相应的编码页面输入相应的$encoding

mb_strlen($str,$encodding),用于获取中文字符串的长度,包含多字节的字符算成一个。

GBK编码截取示例

$str = '我是谁';  //gbk编码的字符串
echo mb_substr($str, 0, 1, 'gbk'); //输出 我

utf-8编码截取示例

$str = '我abc是谁';  //utf-8编码的字符串
echo mb_substr($str, 0, 2, 'utf-8'); //输出 我a

中英混合也完全没有问题。

【但是,一定要住编码需要明确指定,否则可能还是会出现乱码】

第四,关于mb_strcut按字节来切分字符串,截取中文都不会产生半个字符的现象

substr、mb_substr、mb_strcut这三个函数都用来截取字符串,所不同的是:

substr是最简单的截取,无法适应中文;

mb_substr是按字来切分字符串,

而mb_strcut是按字节来切分字符串,截取中文都不会产生半个字符的现象。

这三个函数的前三个参数完全一致,即:

第一个参数是操作对象

第二个参数是截取的起始位置

第三个参数是截取的数量

mb_substr和mb_strcut还有第四个参数:第四个参数可以根据不同的字符集进行设置。

友情提示

使用的时候要注意php文件的编码,和网页显示时的编码。

使用这两个mb_substr 和 mb_strcut方法要事先知道字符串的编码,如果不知道编码,就需要判,mbstring库还提供了mb_check_encoding来检验字符串编码,但还不完善。

mb_check_encoding($str,$encoding);成功是返回true,失败时返回false;

php中文字符串的截取 其中ord($str)>127(因为中文字符的acsii码的范围是128(即0x80-0xfe)-254)

苹果键盘的清洁

发表于 2021-02-18   |   分类于 Mac使用

苹果键盘的清洁

这里说的苹果键盘是:Mac 配件——妙控键盘 - 中文 (拼音)。带数字键和不带数字键的应该是类似的逻辑,本人实际使用的是不带数字键的。

使用时间长了之后,键盘上面有一层脏东西,灰尘或者油污等。不带好清理,之前试过其他的方法,都不是太简单有效。今天突然试了一种新方法,简单直接有效。

那就是,直接使用毛巾蘸清水,拧干水分之后,直接对键盘进行擦拭。

下面这个图片是按这个方法擦拭之后的键盘效果。

PHP fsockopen 异步调用接口在nginx上偶尔实效的情况

发表于 2020-12-26   |   分类于 技术日记

在下面这段代码里面,调用后忽略执行结果直接返回,可用于php异步执行。

private function fsock_asy_do($get){
    $fp = fsockopen("ssl://www.xxx.com", 443, $errno, $errstr, 30);
    if (!$fp) {
        echo "$errstr ($errno)<br />\n";
    } else {
        stream_set_blocking($fp,0);//开启非阻塞模式
        $out = "GET /".$get." HTTP/1.1\r\n";
        $out .= "Host: www.xxxx.com\r\n";
        $out .= "Connection: Close\r\n\r\n";

        fwrite($fp, $out);
        /*忽略执行结果
        while (!feof($fp)) {
            echo fgets($fp, 128);
        }*/
        usleep(1000);
        fclose($fp);
    }
}

在nginx服务器上有一个比较诡异的情况就是有时候无法调用异步的脚本。

查阅相关资料后,是nginx 499 的问题。

其中解决方案有以下,经过对每一个方案的验证最终得出结果:

1、NGINX 499

查看 NGINX access log,发现这样的请求会以 499(Client Closed Request)记录。确定问题是因为:客户端主动端口请求连接时,NGINX 不会将该请求代理给上游服务(FastCGI PHP 进程),这个时候 access log 中会以 499 记录这个请求。

要解决这个问题需要将 NGINX FastCGI 忽略客户端中断配置打开:

fastcgi_ignore_client_abort on;
这样无论客户端是否断开,都会将这个请求代理给上游,并且会记录上游服务处理后的返回状态。

2、NGINX 线程原因

将nginx的worker_processes 由之前的auto修改为2(我的是单核服务器)

3、NGINX 499

nginx对499的定义是”client has closed connection”,并且在这些情况下会返回这个状态码:

upstream 在收到读写事件处理之前时发现连接不可用。
server处理请求未结束,而client提前关闭了连接。
upstream出错,执行next_upstream时发现连接不可用。
一个不安全的做法是在fclose之前,让当前的进程先睡眠一段时间;我这里设置为10毫秒,这10毫秒的延迟对我完成整个请求的影响不大,同时我也认为nginx一定能在10毫米内把请求转到fastcgi去执行。这个时间间隔很难把握,不能保证php一定有执行到。

这种方式并不是真正的异步,只是很取巧的强制关闭连接而不等待服务器端响应。所以在Laruence的那2篇文章中,有2个问题:

①PHP使用fsock不能叫做异步,只是伪异步。

②fwrite之后马上执行fclose,nginx会直接返回499

由于我的代码上面usleep为1000,初步估计是时间不够导致没发出去就close了,所以调整为20000。并进行最后测试。
测试2天结果显示正常,的确是usleep数值过小的问题。

win7下Apache突然启动失败

发表于 2020-12-18   |   分类于 Web构建

win7下Apache突然启动失败

前段时间有一次重启了电脑(win7)之后,发现Apache服务并未随系统自动启动,结果在手动启动的时候也无法启动。

报错为:

Windows 不能在本地计算机启动apache2.4。有关更多信息,查阅系统事件日志。如果这是非Microsoft服务,请与服务厂商联系,并参考特定服务错误代码1。

分析后发现最大可能是80端口被占用,于是win+r 运行cmd

输入netstat -ano

可以看到80端口被PID4占用,于是打开任务管理器-进程-查看,选择列,勾选PID

可以看到pid 4 的被NT kernel & System 占用

该进程是Http.sys。它是http API的驱动组件,Http栈服务器。如果该端口被Http.sys占用,说明一些正在使用http.sys的应用程序在运行。这就是阻止Apache运行的原因,因为Http.sys占用着80端口。我们提供了一种应用程序的机制来帮助控制端口共享,但是我需要调查导致你遇到这种困难的是什么特殊应用程序。如果你能提供给我们“netsh http show servicestate”这条命令的输出结果,我就能找出是哪个应用程序在使用Http.sys。

你可以按照下面步骤禁用http.sys:

第一步: net stop http

第二步:Sc config http start= disabled

【正式操作步骤】

于是运行net stop http

按“Y”确定

再运行 Sc config http start= disabled

好了,现在启动Apache,发现可以正常启动了。

再查看一下netstat -ano

发现pid 4占用了445端口(不再是80端口)。   

123…10
isunman

isunman

love IT, love Movie, love Love

98 日志
12 分类
45 标签
RSS
github

Links

知乎
© 2011 - 2025 isunman
由 Hexo 强力驱动
主题 - NexT.Mist
PV -- UV