php管理nginx虚拟主机shell脚本

 更新时间:2016年11月25日 15:38  点击:1450
下文整理了一段php管理nginx虚拟主机shell脚本,希望这段脚本能帮助到各位同学哦。

使用php作为shell脚本是一件很方便的事情。理所当然,我们可以使用php脚本来管理 nginx虚拟主机,下面是笔者的 脚本 文件供各位参考

 代码如下 复制代码

#!/usr/bin/php -q
<?php
 
start: fwrite(STDOUT,"===========Vhost Script===========\n");
fwrite(STDOUT,"= Choose an operation \n");
fwrite(STDOUT,"= 1.Create 2.Delete 3.Exit\n");
fwrite(STDOUT,"==================================\n");
$operate = trim(fgets(STDIN));
if ( $operate == 1  ){
fwrite(STDOUT,"Please Enter a  Domain Name:");
$domain = trim(fgets(STDIN));
$path = "/home/sites/{$domain}";
$nginx_conf = "/etc/nginx/sites/{$domain}";
$nginx_template = "/etc/nginx/template/site_conf";
$apache_conf = "/etc/httpd/conf/httpd.conf";
$conf_str = "";
 
//变量初始化
 
if( file_exists($path ) ) exit ("Domain Existed!\n");
else mkdir($path,0700);
if(file_exists($nginx_conf)) exit ("Nginx Config file existed!\n");
else {
    $conf_str = file_get_contents( $nginx_template );
}
 
//目录检测及配置文件拷贝
 
eval ( "\$conf_str = \"$conf_str\";" );
 
$succes = file_put_contents($nginx_conf,$conf_str);
if( !$succes ) exit ("Write Config File Fauile!");
else echo "Create Vhost success!\n";
goto start;
//写入配置文件
}
else if ($operate == 2){
    $confs_dir = dir("/etc/nginx/sites");
    $confs_list = array();
    $count = 0;
    while ( false !== ( $conf_file = $confs_dir->read() ) ){
        if( $conf_file == "." ) continue;
        if( $conf_file == ".." ) continue;
        if ( is_file( $confs_dir->path ."/". $conf_file) ) {
            $confs_list[$count++] =  $conf_file;
        }
    }
    echo "Select a site by number which to delete:\n";
    if( count( $confs_list ) >0 )
        foreach ( $confs_list as $k=>$v ){
            echo "{$k}. $v\n";
        }
    $index = trim(fgets(STDIN));
    if( in_array ( $index,array_keys( $confs_list ) ) ){
        copy(  $confs_dir->path ."/". $confs_list[$index],"/etc/nginx/backup/{$confs_list[$index]}" );
        unlink ( $confs_dir->path ."/". $confs_list[$index] );
        exec("tar -zcf  /home/sites/{$confs_list[$index]}.tar.gz /home/sites/".$confs_list[$index] );
        exec("rm -Rf /home/sites/".$confs_list[$index]);
    }
    //删除指定配置,并保存备份
}
else if( $operate == 3 ) {
    exit;
}
else {
 exit ("No Operation Selected!");
}?>

下面是nginx的配置模版

 代码如下 复制代码

server {
listen 80;
server_name {$domain};
access_log /var/log/nginx/{$domain}_access_log;
error_log /var/log/nginx/{$domain}_error_log;

root {$path};

#不记录对站点图标访问
location = /favicon.ico {
log_not_found off;
access_log off;
}

#不记录对robots.txt的访问
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}

location = / {
try_files @proxy;
}

location / {
index index.htm index.html index.php;
try_files \$uri @proxy;
}

#匹配html
location ~* \.(html|htm)$ {
expires 30s;
gzip off;
add_header Content-Encoding gzip;
try_files \$uri \$uri/ /wp-content/cache/supercache/\$http_host/\$request_uri/index.html.gz @proxy;
}

#匹配图片、脚本文件等
location ~* \.(jpe?g|gif|png|ico|css|js|flv|swf|avi|zip|rar|svg|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mp3)$ {
expires 30d;
}

#传递给apache
location @proxy {
index index.htm index.html index.php;
proxy_pass   http://127.0.0.1:81;
include /etc/nginx/proxy.conf;
}
}

下面来看一个关于顺丰BSP订单号查询接口SOAP的请求示例,这个例子能帮助到各位同学哦。

在一些接口的设计中有时用到了SOAP方式的请求,比如顺丰BSP的接口。
我尝试不同方式的POST方式请求,要么完全请求不到东西,要么接收到乱码,均以失败告终。

针对顺丰接口的SOAP请求的核心代码分享如下:

 代码如下复制代码

/**
* 发送soap请求
*/
private function _soap()
{
$client = new SoapClient($this->serviceUrl);
$info = new stdClass();
$info->arg0 = $this->xml;
$param = array($info);
$response = $client->__call(“sfexpressService”,$param);
return $response->return ;
}

/**
* 拼接出请求的xml
*/
public function createXml()
{
$xml = ‘
’.$this->user.’,’.$this->passWord.’

invoice_no.’” />

’;
$this->xml = $xml;
}

提示:
1.$this->serviceUrl 顺丰分配的BSP请求地址,注意是?wsdl的地址
2.$this->user,$this->passWord 即是顺丰分配的ID和校验码
3.返回的return是一个XML的String,你可能需要simplexml_load_string来解析。

 

原文来自:http://www.jxm.cc/blogs/498.html

清除缓存我们只需要设置页面为no-cache就可以了,当然像asp,php这种只需要设置Expires操作即可,具体如下。
 代码如下 复制代码


HTML网页
<META HTTP-EQUIV="pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
<META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT">
或者<META HTTP-EQUIV="expires" CONTENT="0">

ASP网页
Response.Expires = -1
Response.ExpiresAbsolute = Now() - 1
Response.cachecontrol = "no-cache"

PHP网页
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");

JSP网页
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 1);

树形菜单是很多应用中会碰到的一个算法,下文小编就为大家介绍php树形菜单实现方法。

数据库结果

 

php多级树形菜单代码


打印如下:

 代码如下 复制代码
array(7) {
  [0] => array(5) {
    ["id"] => string(1) "4"
    ["fzname"] => string(12) "山猫小号"
    ["userid"] => string(2) "12"
    ["pid"] => string(1) "0"
    ["time"] => string(10) "1413359977"
  }
  [1] => array(5) {
    ["id"] => string(1) "5"
    ["fzname"] => string(12) "山猫一组"
    ["userid"] => string(2) "12"
    ["pid"] => string(1) "4"
    ["time"] => string(10) "1413361206"
  }
  [2] => array(5) {
    ["id"] => string(1) "6"
    ["fzname"] => string(12) "山猫二组"
    ["userid"] => string(2) "12"
    ["pid"] => string(1) "4"
    ["time"] => string(10) "1413361225"
  }
  [3] => array(5) {
    ["id"] => string(1) "7"
    ["fzname"] => string(15) "山猫一组子"
    ["userid"] => string(2) "12"
    ["pid"] => string(1) "5"
    ["time"] => string(10) "1413361388"
  }
  [4] => array(5) {
    ["id"] => string(1) "8"
    ["fzname"] => string(15) "山猫一组子"
    ["userid"] => string(2) "12"
    ["pid"] => string(1) "5"
    ["time"] => string(10) "1413361409"
  }
  [5] => array(5) {
    ["id"] => string(1) "9"
    ["fzname"] => string(16) "山猫一组子3"
    ["userid"] => string(2) "12"
    ["pid"] => string(1) "5"
    ["time"] => string(10) "1413361460"
  }
  [6] => array(5) {
    ["id"] => string(2) "10"
    ["fzname"] => string(15) "山猫二组子"
    ["userid"] => string(2) "12"
    ["pid"] => string(1) "6"
    ["time"] => string(10) "1413361506"
  }
}

结果:

 

php多级树形菜单代码


 打印如下:

 代码如下 复制代码
array(1) {
  [0] => array(5) {
    ["id"] => string(1) "4"
    ["fzname"] => string(12) "山猫小号"
    ["userid"] => string(2) "12"
    ["pid"] => array(2) {
      [0] => array(5) {
        ["id"] => string(1) "5"
        ["fzname"] => string(12) "山猫一组"
        ["userid"] => string(2) "12"
        ["pid"] => array(3) {
          [0] => array(5) {
            ["id"] => string(1) "7"
            ["fzname"] => string(15) "山猫一组子"
            ["userid"] => string(2) "12"
            ["pid"] => string(0) ""
            ["time"] => string(10) "1413361388"
          }
          [1] => array(5) {
            ["id"] => string(1) "8"
            ["fzname"] => string(15) "山猫一组子"
            ["userid"] => string(2) "12"
            ["pid"] => string(0) ""
            ["time"] => string(10) "1413361409"
          }
          [2] => array(5) {
            ["id"] => string(1) "9"
            ["fzname"] => string(16) "山猫一组子3"
            ["userid"] => string(2) "12"
            ["pid"] => string(0) ""
            ["time"] => string(10) "1413361460"
          }
        }
        ["time"] => string(10) "1413361206"
      }
      [1] => array(5) {
        ["id"] => string(1) "6"
        ["fzname"] => string(12) "山猫二组"
        ["userid"] => string(2) "12"
        ["pid"] => array(1) {
          [0] => array(5) {
            ["id"] => string(2) "10"
            ["fzname"] => string(15) "山猫二组子"
            ["userid"] => string(2) "12"
            ["pid"] => string(0) ""
            ["time"] => string(10) "1413361506"
          }
        }
        ["time"] => string(10) "1413361225"
      }
    }
    ["time"] => string(10) "1413359977"
  }
}

工用到两个函数1生成树形代码:

 代码如下 复制代码
function getTree($data, $pId)
{
$tree = '';
foreach($data as $k => $v)
{
   if($v['pid'] == $pId)
   {
    $v['pid'] = $this->getTree($data, $v['id']);
    $tree[] = $v;
    //unset($data[$k]);
   }
}
return $tree;
}

函数2转化为html代码:

 代码如下 复制代码
function procHtml($tree)
{
$html = '';
foreach($tree as $t)
{
   if($t['pid'] == '')
   {
    $html .= "<li>{$t['fzname']}</li>";
   }
   else
   {
    $html .= "<li>".$t['fzname'];
    $html .= $this->procHtml($t['pid']);
    $html = $html."</li>";
   }
}
return $html ? '<ul>'.$html.'</ul>' : $html ;
}
在php中删除文件最简单的办法直接使用unlink命令,但本文章介绍的是需要删除指定目录下的指定文件,所以我需要遍历删除了,具体看这个例子。
 代码如下 复制代码


<?php

 //删除指定文件夹下的非法文件

 function my_del($dir)
 {
    if(is_dir($dir)){
        //打开指定文件夹
        if($handle = opendir($dir))
        {
            while(false !== ($file = readdir($handle)))
            {
                if($file !== '.' && $file !== '..')
                 {
                        my_del($dir.'/'.$file);
                 }
            }
            $res = closedir($handle);
        }
    }else{
        //删掉除图片意外的所有文件
        $avatararr = array('180x180.jpg', '30x30.jpg', '45x45.jpg', '90x90.jpg');
        $ex = explode('/', $dir);
        $endex = end($ex);
        if((strripos($endex,'.jpg') === false) || (substr($endex, -4) != '.jpg')){
                    //按名称过滤
                @unlink($dir);
        } else {
                    //按文件实质内容过滤
                $info = @getimagesize($dir);
                if(!$info || $info[2] !=2) {
                        @unlink($dir);
                }
        }
    }
 }

 $dir='D:/xampp/htdocs/www/avatar001/12/47/';
 my_del($dir);

[!--infotagslink--]

相关文章

  • Powershell实现编写和运行脚本

    本文为那些对学习 Windows PowerShell 命令行和脚本编写环境感兴趣的系统管理员提供了资源。也请告诉我们本网站如何才能对您更有用处。...2020-06-30
  • Shell脚本中让进程休眠的方法(sleep用法)

    这篇文章主要介绍了Shell脚本中让进程休眠的方法,本文讲解的就是sleep的用法,可以实现睡觉若干秒、若干分钟、若干小时,需要的朋友可以参考下...2020-07-11
  • JavaScript 实现自己的安卓手机自动化工具脚本(推荐)

    这篇文章主要介绍了 JavaScript 实现自己的安卓手机自动化工具脚本,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-05-14
  • 自动设置安卓手机wifi代理的PowerShell脚本

    这篇文章主要介绍了自动设置安卓手机wifi代理的PowerShell脚本,帮助大家进行抓包测试,感兴趣的朋友可以了解下...2020-10-17
  • 护卫神 主机管理系统使用说明(MSSQL管理)

    护卫神·主机管理系统该版本支持在Windows Server 200320082012,含32位和64位,直接开设配置WEB站、FTP站,以及SQL Server和MySQL,是您开设和管理虚拟主机的绝好帮手。但是对于新用户可能在使用上有一些困难,因此请仔细阅读如下说明文档...2016-01-27
  • 使用xampp搭建运行php虚拟主机的详细步骤

    最近,新装了xampp这么一个软件搭建自己的web开发环境,安装完毕自然要虚拟几个目录放自己的项目了,现将如何在xampp搭建的web服务器环境下新建虚拟主机的过程总结分享一下,大致过程分为三步,如下: 第一步: 用记事本打开C:/WIN...2015-10-23
  • 深入C# 内存管理以及优化的方法详解

    本篇文章是对C#中内存管理以及优化的方法进行了详细的分析介绍,需要的朋友参考下...2020-06-25
  • 详解swift中xcworkspace多项目管理

    给大家详细讲解了IOS开发中swift语言xcworkspace多项目管理的方法和介绍,一起参考一下。...2020-06-30
  • js实现车辆管理系统

    这篇文章主要为大家详细介绍了js实现车辆管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-08-26
  • PowerShell因为在此系统中禁止执行脚本的解决方法

    今天看到国外的一篇文章可以在cmd中运行95版本的ps1格式的批处理,但经过测试默认情况下powershell支不支持执行脚本需要执行如下操作...2020-06-30
  • thinkphp自定义权限管理之名称判断方法

    下面小编就为大家带来一篇thinkphp自定义权限管理之名称判断方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2017-04-03
  • C++学生信息管理系统

    这篇文章主要为大家想详细介绍了C++学生信息管理系统的实现代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-04-25
  • Jmeter如何基于命令行运行jmx脚本

    这篇文章主要介绍了Jmeter如何基于命令行运行jmx脚本,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-07-22
  • 入门shell脚本基础及原理

    弄懂shell程序,源代码,以及python脚本能够向运维开发方向走,shell程序能够管理集群,提高开发的效率,shell是命令解释器,调用系统内核,帮助你对内核的刷新认识...2021-09-06
  • jQuery技巧之让任何组件都支持类似DOM的事件管理

    这篇文章主要介绍了jQuery技巧之让任何组件都支持类似DOM的事件管理 的相关资料,需要的朋友可以参考下...2016-04-06
  • shell脚本中用正则表达式匹配IP及Email

    本文我们将会学习一下在shell脚本中如何使用正则表达式,常用的shell正则表达式,当然重点还是如何在shell脚本中用正则表达式匹配IP及Email。 shell也可以使用正则分...2016-11-25
  • vue前端开发辅助函数状态管理详解示例

    vue的应用状态管理提供了mapState、mapGetters、mapMutations、mapActions四个辅助函数,所谓的辅助函数分别对State、Getters、Mutations、Actions在完成状态的使用进行简化...2021-10-10
  • 如何管理Vue中的缓存页面

    这篇文章主要介绍了如何管理Vue中的缓存页面,帮助大家更好的理解和学习使用vue框架,感兴趣的朋友可以了解下...2021-02-06
  • 什么是Shell?Shell脚本基础知识详细介绍

    这篇文章主要介绍了什么是Shell?Shell脚本基础知识介绍,本文是一篇Shell脚本入门文章,在本文你可学到什么是Shell、有多少种Shell、一个Shell脚本代码实例,需要的朋友可以参考下...2020-07-11
  • C#实现微信公众号会员卡管理的示例代码

    这篇文章主要介绍了C#实现微信公众号会员卡管理的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25