nginx重启报pid错误和配置静态文件浏览功能

重启报pid错误

  • 重启检测nginx -t 显示正常, 但是 ngix -s reload报错
  • 解决方法
  1. 如果nginx服务已经启动, 先使用kill -9 停止
  2. 随后:
sudo nginx -c /usr/local/nginx/conf/nginx.conf
  1. 重启:
nginx -s reload

静态文件浏览功能

  • nginx.conf
root /home/user1/nginx # 路径
autoindex on; # 开启文件浏览
autoindex_exact_size off; # 文件大小显示优化
autoindex_localtime on; # 时间显示优化
charset utf-8,gbk; # 中文显示优化
  • 设置可读

php两种简单的设计模式:工厂模式和单例模式

什么是设计模式:

简单的说,设计模式就是解决某个问题的一般性代码的经验性总结。

类比的说,它类似之前所学的算法:针对某种问题,使用特定的语法逻辑就可以完成该任务。(注意此处为类比)。

工厂模式:

所谓工厂模式,就是一个特定的类,它可以根据传递给她的类,二区生产出对应类的对象。

代码:


//设计一个工厂类: 这个工厂类有一个静态方法 // 通过该方法可以获得指定的类的对象 class A{}; class B{}; class GongChang{ static function GetObject($className){//静态方法 $obj=new $className();//这是可变类 return $obj; } } $o1=GongChang::GetObject(“A”); $o2=GongChang::GetObject(“B”); $o3=GongChang::GetObject(“A”); var_dump($o1);echo “<br/>”; var_dump($o2);echo “<br/>”; var_dump($o3);echo “<br/>”;

单例模式:

就是设计一个类,只可以创造出它的一个对象。

代码:

class Single{
//第一步:
private function __construct(){}//这个作用是限制不可以在class外不可以new出来一个对象
//第二步:
static private $instance = null;//private为防止外部恶意修改
//第三步:
static function GetObject(){
if(!isset(self::$instance)){//如果未创建过 则new一个。是null则为false
$obj=new self();//这里的self就是Sigle
self::$instance=$obj;
return self::$instance;
}else{//如果已经创建过,则就返回以前的对象
return self::$instance;
}

}
}
$ob1=Single::GetObject();
$ob2=Single::GetObject();
var_dump($ob1);echo “<br/>”;
var_dump($ob2);echo “<br/>”;

一键启动工具的生成

需要打开的软件





一键启动?

cmd?

1


hack


路径与环境变量

d

语法

  1. 判断是否启动
tasklist|find /i "WeChat.exe"
  1. 启动
start C:\"Program Files (x86)"\Tencent\WeChat\WeChat.exe
比如:

  1. 整合:
tasklist|find /i"WeChat.exe"&& echo "WeChat.exe is exists!!" || start C:\"Program Files (x86)"\Tencent\WeChat\WeChat.exe
  1. 写到批处理文件里:
@echo off
echo "start Now"
tasklist|find /i"WeChat.exe"&& echo "WeChat.exe is exists!!" || start C:\"Program Files (x86)"\Tencent\WeChat\WeChat.exe
tasklist|find /i"MarkdownPad2.exe"&& echo "MarkdownPad2.exe is exists!!" || start D:\markdown\markdownpad2-portable\MarkdownPad2.exe
tasklist|find /i"DeskTopShare.exe"&& echo "DeskTopShare.exe is exists!!" || start D:\DeskTopShare\DeskTopShare.exe
tasklist|find /i"vmware.exe"&& echo "vmware.exe is exists!!" || start D:\VMware\vmware.exe

exit

最终

start1.gif

一键生成工具代码:

html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>快捷启动生成工具</title> 
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <div class="container">
        <form action="?" method="get">
            <textarea name="paths" id="" cols="30" rows="10" placeholder="输入的完整路径(支持快捷方式,文件夹,或其他文件, 不支持中文), 多个路径需换行, 格式形如:
D:\VMware\vmware.exe
C:\Program Files (x86)\Tencent\QQ\Bin\QQScLauncher.exe
E:\aaaaa\ide\" ></textarea>
            <br>
            <input class="first" type="submit" name='submit' value="点击生成">
        </form>
    </div>

</body>
</html>
<script src="js.js"></script>
<script>
    var oForm = document.forms[0];
    var oPaths = oForm.paths;
    var oSubmit = oForm.submit;
    var oContainer = document.getElementsByClassName('container')[0];
    oSubmit.onclick = function (e) {
        var e = e || event;
        e.preventDefault();
        var pathsLineFinal = getUserText();
        if(!pathsLineFinal) return;
        var isch = isChina(pathsLine)
        if(isch){
            alert("不可以为中文路径!");
            return;
        }
        var content = transTotext(pathsLineFinal);
        transTobat(content, 'start.bat');
    }
</script>

js代码(文件js.js):

function getUserText() {
    // 文本框文字
    pathsLine = oPaths.value;    
    return pathsLine;
}
// 转为有效的文本:
function transTotext(pathsLineFinal) {
    // 有效的文本形如:
    // tasklist|find /i "DeskTopShare.exe" && echo DeskTopShare.exe is exists || start D:\DeskTopShare\DeskTopShare.exe
    var fileNameList = pathsLineFinal.split('\n');
    var content = '@echo off \necho \"start Now\"\n';
    for (var i = 0; i < fileNameList.length; i++) {
        thisLine = fileNameList[i];
        var name = exeName(thisLine);
        // 用引号处理带有空格的目录
        pattern1 = /\\([\w\s]*\s+[\s\(\)\w]*)\\/g;
        thisLine = thisLine.replace(pattern1, '\\"$1"\\');
        // 带有字符的文件
        pattern2 = /\\([\w\s\.]*\s+[\s\w\.]*\.\w+)$/g;
        thisLine = thisLine.replace(pattern2, '\\"$1"');
        content1 = 'tasklist|find /i' + '\"' + name + '\"'
        content += content1 + '&& echo \"' + name + " is exists!!\" || start " + thisLine + "\n" ;
    }
    content += "\nexit";
    return content
}
// 传入完整文字信息和下载文件名字
function transTobat(batText, filename) {
    var blob = new Blob([batText]);
    var a = document.createElement('a');
    a.href = URL.createObjectURL(blob);
    a.innerHTML = "下载"
    a.download = filename;
    oContainer.appendChild(a);
    a.style.display = 'none';
    document.body.appendChild(a)
    a.click();
    document.body.removeChild(a);
}
function exeName(siglePath) {
    var index = siglePath.lastIndexOf('\\');
    var name = siglePath.slice(index + 1)
    return name
}
//检测是否含有中文:
function isChina(s) {
    var patrn = /[\u4E00-\u9FA5]|[\uFE30-\uFFA0]/gi;
    if (!patrn.exec(s)) {
        return false;
    }
    else {
        return true;
    }
}

css代码(style.css):

.container{
    width: 500px;
    height: 400px;
    margin: 0 auto;
}
form{
    margin-top: 20px;
    text-align: center;
}
textarea{
    resize: none;
    width: 500px;
    height: 300px;
}
.first{
    margin-top: 20px;
    height: 40px;
    width: 100px;
}

项目地址: 项目地址

制作一键启动批处理.bat