TCP怎么建立的 TCP关闭方法是什么

 更新时间:2017年7月6日 23:33  点击:2023
TCP是很多用户都不陌生的,很受一些用户的重视。下面文章就给大家介绍下TCP怎么建立的,TCP的关闭方法又是什么。还不清楚的下面一起来看看。

摘要: 三次握手,四次挥手

意思是tcp建立连接时需要三次交互来完成,A发起连接

A ---  SYN  --> B

A <-- SYN + ACK --- B (1)

A ---  ACK  --> B

而关闭tcp连接需要四次交互,A发起关闭

A --- FIN --> B

A <-- ACK --- B (1)

A <-- FIN --- B

A --- ACK --> B (2)

这里在(1)时B开始处于CLOSE_WAIT状态,一直到收到ACK后B才转为CLOSED ,而A就处于TIME_WAIT状态,一直到2MSL(Max Segament Lifetime)才转为CLOSED

为什么需要2MSL才真正转为CLOSED?是因为需要缓冲时间万一B丢失ACK重发FIN的话还可以回复ACK,还有就是2MSL后“迷失”在网络上的包全部失效

大量的 TIME_WAIT 和 CLOSE_WAIT 会造成服务器的连接资源被浪费甚至占满后导致服务器服务拒绝,怎么解决?

解决TIME_WAIT

net.ipv4.tcp_tw_recycle = 1 #开启快速回收,默认0

  

net.ipv4.tcp_tw_reuse = 1 #开启重用,默认0

  

net.ipv4.tcp_fin_timeout = 30 # 减小fin_timeout,默认60,单位s

系统参数的配置可以解决time_wait,但是close_wait就没那么简单了

解决CLOSE_WAIT

一般都是服务端的代码问题。

绝大多数都是客户端发起关闭,这样可知HTTP服务器应该会有很多TIME_WAIT,不过当http使用keep-alive后服务端会主动断连。

Gif也是现在很受许多用户关注的,今天文章就就给大家介绍Gif怎么管理,有哪些管理知识。感兴趣的下面一起来看看。

前面的话

发布一个版本时,我们通常先在版本库中打一个标签(tag)。这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照,实质上它就是指向某个commit的指针。所以,创建和删除标签都是瞬间完成的。简而言之,标签tag就是一个让人容易记住的有意义的名字,它跟某个commit绑在一起。本文将详细介绍Git标签管理

创建标签

在Git中打标签非常简单,首先,切换到需要打标签的分支上

然后,敲命令git tag就可以打一个新标签

可以用命令git tag查看所有标签

默认标签是打在最新提交的commit上的。有时候,如果忘了打标签怎么办呢?方法是找到历史提交的commit id,然后打上就可以了

比方说要对create b.txt这次提交打标签,它对应的commit id是7ec9296,敲入命令:

再用命令git tag查看标签,注意,标签不是按时间顺序列出,而是按字母排序的

可以用git show查看标签信息

附注标签

实际上,Git使用的标签有两种类型:轻量级的(lightweight)和含附注的(annotated)。上面介绍的就是轻量级标签,轻量级标签就像是个不会变化的分支,实际上它就是个指向特定提交对象的引用。而含附注标签,实际上是存储在仓库中的一个独立对象,它有自身的校验和信息,包含着标签的名字,电子邮件地址和日期,以及标签说明,标签本身也允许使用GNU Privacy Guard(GPG)来签署或验证。一般我们都建议使用含附注型的标签,以便保留相关信息;当然,如果只是临时性加注标签,或者不需要旁注额外信息,用轻量级标签也没问题

创建一个含附注类型的标签非常简单,用-a(取annotated的首字母,中文意思为注释)指定标签名字即可,而-m选项则指定了对应的标签说明,Git会将此说明一同保存在标签对象中。如果没有给出该选项,Git会启动文本编辑软件供你输入标签说明

$ git tag -a v1.4 -m 'my version 1.4'

我们可以看到在提交对象信息上面,列出了此标签的提交者和提交时间,以及相应的标签说明

签署标签

如果有自己的私钥,还可以用GPG来签署标签,只需要把之前的-a改为-s(取signed的首字母,中文意思为有符号的)即可

$ git tag -s v0.2 -m 'signed version 0.2 released'

签名采用PGP签名,因此,必须首先安装gpg(GnuPG),如果没有找到gpg,或者没有gpg密钥对,就会报错

现在再运行 git show 会看到对应的 GPG 签名也附在其内

$ git show v0.2

tag v0.2

Tagger: Michael Liao

Date: Mon Aug 26 07:28:33 2013 +0800

  

signed version 0.2 released

-----BEGIN PGP SIGNATURE-----

Version: GnuPG v1.4.12 (Darwin)

  

iQEcBAABAgAGBQJSGpMhAAoJEPUxHyDAhBpT4QQIAKeHfR3bo...

-----END PGP SIGNATURE-----

  

commit fec145accd63cdc9ed95a2f557ea0658a2a6537f

Author: Michael Liao

Date: Thu Aug 22 10:37:30 2013 +0800

  

branchtest

用PGP签名的标签是不可伪造的,因为可以验证PGP签名

可以使用git tag -v [tagname] (取verify的首字母,中文意思为核实)的方式验证已经签署的标签。此命令会调用GPG来验证签名,所以你需要有签署者的公钥,存放在keyring中,才能验证

$ git tag -vv1.4.2.1

object 883653babd8ee7ea23e6a5c392bb739348b1eb61

typecommit

tag v1.4.2.1

tagger Junio C Hamano1158138501 -0700

  

GIT 1.4.2.1

  

Minor fixes since 1.4.2, including git-mvand git-http with alternates.

gpg: Signature made Wed Sep 13 02:08:25 2006 PDT using DSA key ID F3119B9A

gpg: Good signature from"Junio C Hamano"

gpg:     aka"[jpeg image of size 1513]"

Primary key fingerprint: 3565 2A26 2040 E066 C9A7 4A7D C0C6 D9A4 F311 9B9A

若是没有签署者的公钥,会报告类似下面这样的错误:

gpg: Signature made Wed Sep 13 02:08:25 2006 PDT using DSA key ID F3119B9A

gpg: Can't check signature: public key not found

error: could not verify the tag'v1.4.2.1'

操作标签

如果标签打错了,也可以删除

$ git tag -d

因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。

默认情况下,git push并不会把标签传送到远端服务器上,只有通过显式命令才能推送标签到远端仓库

$ git push origin

或者,一次性推送全部尚未推送到远程的本地标签

$ git push origin --tags

如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除

然后,从远程删除。删除命令也是push,但是格式如下

最后一个问题,如何查看发送到远程的标签呢?

点击Github项目中的release

即可看到远程标签的信息

本文介绍了php怎么打开html页面的代码,不会的同学快来看看吧!

直接打开就行 如: $temp=file_get_contents(Ƈ.htm '); echo $temp;

本文我们来分享一下自动化配置和管理工具saltstack mine如何通过自定义收集minion的状态及应用场景的,对minion开发感兴趣的朋友可以看一下。

mine是做什么?   就是你在mine定义了收集模块,他自己会把数据收集的,存到了哪里,不知道,但是肯定是客户端minino本地。有兴趣的朋友可以check saltstack的代码。


这里先粘贴下,官方的doc用法:

 代码如下 复制代码
mine.delete:                                                                          
                                                                                       
    Remove specific function contents of minion. Returns True on success.             
                                                                                       
    CLI Example:                                                                      
                                                                                       
        salt '*' mine.delete 'network.interfaces'                                     
                                                                                       
                                                                                       
mine.flush:                                                                           
                                                                                       
    Remove all mine contents of minion. Returns True on success.                      
                                                                                       
    CLI Example:                                                                      
                                                                                       
        salt '*' mine.flush                                                           
                                                                                       
                                                                                       
mine.get:                                                                             
                                                                                       
    Get data from the mine based on the target, function and expr_form                
                                                                                       
    Targets can be matched based on any standard matching system that can be          
    matched on the master via these keywords::                                        
                                                                                       
        glob                                                                          
        pcre                                                                          
        grain                                                                         
        grain_pcre                                                                    
                                                                                       
    CLI Example:                                                                      
                                                                                       
        salt '*' mine.get '*' network.interfaces                                      
        salt '*' mine.get 'os:Fedora' network.interfaces grain                        
                                                                                       
                                                                                       
mine.send:                                                                            
                                                                                       
    Send a specific function to the mine.                                             
                                                                                       
    CLI Example:                                                                      
                                                                                       
        salt '*' mine.send network.interfaces eth0                                    
                                                                                       
                                                                                       
mine.update:    
                                                                                       
    Execute the configured functions and send the data back up to the master          
    The functions to be executed are merged from the master config, pillar and        
    minion config under the option "function_cache":                                  
                                                                                       
        mine_functions:                                                               
          network.ip_addrs:




配置起来很简单,跑到minion端,配置下文件,开启几个模块的检测。

 代码如下 复制代码
[root@vm-10-154-252-46 utils]# tail /etc/salt/minion

mine_functions:

  test.ping: []

  network.dig:

   - www.naver.com

  network.usage: []


mine_interval: 1


然后咱们跑到master端去抓数据。


[root@vm-10-154-252-82 ~/clusterops/templates]$salt '10.154.252.46' mine.get '*' network.dig          

10.154.252.46:                                                                                        

    ----------                                                                                        

    10.154.252.46:                                                                                    

                                                                                                      

        ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6 <<>> www.baidu.com                              

        ;; global options: +cmd                                                                       

        ;; Got answer:                                                                                

        ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5279                                      

        ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 5, ADDITIONAL: 2                          

        ;; QUESTION SECTION:                                                                          

        ;www.baidu.com.                 IN      A                                                     
                                                                                           

        ;; ANSWER SECTION:                                                                            

        www.baidu.com.          186     IN      CNAME   www.a.shifen.com.                             

        www.a.shifen.com.       149     IN      A       220.181.111.188                               

        www.a.shifen.com.       149     IN      A       220.181.112.244                               

        ;; AUTHORITY SECTION:                                                                         

        a.shifen.com.           186     IN      NS      ns3.a.shifen.com.                             

        a.shifen.com.           186     IN      NS      ns1.a.shifen.com.                             

        a.shifen.com.           186     IN      NS      ns5.a.shifen.com.                             

        a.shifen.com.           186     IN      NS      ns2.a.shifen.com.                             

        a.shifen.com.           186     IN      NS      ns4.a.shifen.com.                             

        ;; ADDITIONAL SECTION:                                                                        

        ns5.a.shifen.com.       70      IN      A       119.75.219.43                                 

        ns2.a.shifen.com.       186     IN      A       180.149.133.241                               

                                                                                                      

        ;; Query time: 1 msec                                                                         

        ;; SERVER: 10.150.0.253#53(10.150.0.253)                                                      

        ;; WHEN: Wed Jul  2 14:42:55 2014                                                             

        ;; MSG SIZE  rcvd: 212                                                                        


[root@vm-10-154-252-82 ~/clusterops/templates]$         

                                              


我先前定义的是一分钟来生成一次数据。在minon的日志端是可以体现出来的。

 代码如下 复制代码
2014-07-03 09:15:05,054 [salt.loaded.int.module.mine
2014-07-03 09:15:05,186 [salt.loaded.int.module.mine
2014-07-03 09:16:05,149 [salt.loaded.int.module.mine
2014-07-03 09:16:05,274 [salt.loaded.int.module.mine
2014-07-03 09:17:05,242 [salt.loaded.int.module.mine
2014-07-03 09:17:05,366 [salt.loaded.int.module.mine
2014-07-03 09:18:05,336 [salt.loaded.int.module.mine
2014-07-03 09:18:05,463 [salt.loaded.int.module.mine
2014-07-03 09:19:05,430 [salt.loaded.int.module.mine
2014-07-03 09:19:05,554 [salt.loaded.int.module.mine
2014-07-03 09:20:05,523 [salt.loaded.int.module.mine
2014-07-03 09:20:05,648 [salt.loaded.int.module.mine
2014-07-03 09:21:05,619 [salt.loaded.int.module.mine
2014-07-03 09:21:05,748 [salt.loaded.int.module.mine
2014-07-03 09:22:05,713 [salt.loaded.int.module.mine
2014-07-03 09:22:05,843 [salt.loaded.int.module.mine
2014-07-03 09:23:05,808 [salt.loaded.int.module.mine
2014-07-03 09:23:05,938 [salt.loaded.int.module.mine
2014-07-03 09:24:05,901 [salt.loaded.int.module.mine
2014-07-03 09:24:06,026 [salt.loaded.int.module.mine
2014-07-03 09:25:05,995 [salt.loaded.int.module.mine
2014-07-03 09:25:06,120 [salt.loaded.int.module.mine
2014-07-03 09:26:05,088 [salt.loaded.int.module.mine
2014-07-03 09:26:05,214 [salt.loaded.int.module.mine
2014-07-03 09:27:05,183 [salt.loaded.int.module.mine
2014-07-03 09:27:05,319 [salt.loaded.int.module.mine
2014-07-03 09:28:05,287 [salt.loaded.int.module.mine
2014-07-03 09:28:05,418 [salt.loaded.int.module.mine
2014-07-03 09:29:05,373 [salt.loaded.int.module.mine
2014-07-03 09:29:05,502 [salt.loaded.int.module.mine
2014-07-03 09:30:05,466 [salt.loaded.int.module.mine
2014-07-03 09:30:05,591 [salt.loaded.int.module.mine
2014-07-03 09:31:05,560 [salt.loaded.int.module.mine
2014-07-03 09:31:05,689 [salt.loaded.int.module.mine
2014-07-03 09:32:05,655 [salt.loaded.int.module.mine
2014-07-03 09:32:05,785 [salt.loaded.int.module.mine
2014-07-03 09:33:05,749 [salt.loaded.int.module.mine
2014-07-03 09:33:05,874 [salt.loaded.int.module.mine
2014-07-03 09:34:05,845 [salt.loaded.int.module.mine
2014-07-03 09:34:05,969 [salt.loaded.int.module.mine
2014-07-03 09:35:05,937 [salt.loaded.int.module.mine
2014-07-03 09:35:06,068 [salt.loaded.int.module.mine
2014-07-03 09:36:05,017 [salt.loaded.int.module.mine
2014-07-03 09:36:05,141 [salt.loaded.int.module.mine
2014-07-03 09:37:05,113 [salt.loaded.int.module.mine
2014-07-03 09:37:05,238 [salt.loaded.int.module.mine
2014-07-03 09:38:05,208 [salt.loaded.int.module.mine
2014-07-03 09:38:05,336 [salt.loaded.int.module.mine
2014-07-03 09:39:05,304 [salt.loaded.int.module.mine
2014-07-03 09:39:05,428 [salt.loaded.int.module.mine
2014-07-03 09:40:05,687 [salt.loaded.int.module.mine
2014-07-03 09:40:05,810 [salt.loaded.int.module.mine
2014-07-03 09:41:05,781 [salt.loaded.int.module.mine
2014-07-03 09:41:05,908 [salt.loaded.int.module.mine


咱们也可以利用mine.send来发送数据。

 代码如下 复制代码
[root@vm-10-154-252-82 ~/clusterops/templates]$salt '10.154.252.46' mine.send network.dig youku.com      

10.154.252.46:                                                                                           

    True                                                                                                 

[root@vm-10-154-252-82 ~/clusterops/templates]$            

                                              


我们又重新定义了mine的规则。

 代码如下 复制代码

mine_functions:
  test.ping: []
  cmd.run:
   - date;df



咱们定义了有时间特征的收集,用来判断下,他获取的数据是不是一分钟间隔,你就算mine.get也只是获取到他先前生成的数据,而不是实时的。

wKioL1O0uCnAVsd2AAaAeLOLDHM598.jpg


wKioL1O0uKrTwCaUAALHxCHZpTM407.jpg


有些朋友还是再疑惑这些东西也可以用直接推送模块来实现,但是你看下面,我定义了sleep 10s,如果用模块去取值的话,一定要sleep 10秒之后,才能获取到数据。但这里master去get数据的时候,还是很即时的回来。当然取得数据是一分钟之前的。对一些场合这已经足够了。

wKiom1O0vU-y66T8AAQGxHTqjiE955.jpg

上面说了,是什么场合?   来个简单渲染haproxy配置。

 代码如下 复制代码
/srv/pillar/top.sls:

base:

  'G@roles:web':

    - web

/srv/pillar/web.sls:

mine_functions:

  network.ip_addrs: [eth0]


/etc/salt/minion.d/mine.conf:

mine_interval: 5


/srv/salt/haproxy.sls:

haproxy_config:

  file:

    - managed

    - name: /etc/haproxy/config

    - source: salt://haproxy_config

    - template: jinja


/srv/salt/haproxy_config:

<...file contents snipped...>


{% for server, addrs in salt['mine.get']('roles:web', 'network.ip_addrs', expr_form='grain').items() %}

server {{ server }} {{ addrs[0] }}:80 check

{% endfor %}


<...file contents snipped...>



根据monin客户端的一些特征来渲染配置,估计大家已经学会了用根据grains取渲染配置,但是grains的数据有些不及时,虽然也有办法让他及时。 

我这里也只是阐述下mine和grains在通过jinja2渲染配置的场景。  我自己看来,grains更适合很久很久才变化的。 mine适合变化比较大的。

大家show下saltstack grains的数据,几乎都是系统和硬件的信息。

 代码如下 复制代码
[root@vm-10-154-252-82 ~/clusterops]$salt '10.154.252.46' grains.item productname
10.154.252.46:
  productname: OpenStack Nova
[root@vm-10-154-252-82 ~/clusterops]$salt '10.154.252.46' grains.item lang
10.154.252.46:
  lang: python erlang
[root@vm-10-154-252-82 ~/clusterops]$
[root@vm-10-154-252-82 ~/clusterops]$
[root@vm-10-154-252-82 ~/clusterops]$
[root@vm-10-154-252-82 ~/clusterops]$salt '10.154.252.46' sys.reload_modules
10.154.252.46:
    True
[root@vm-10-154-252-82 ~/clusterops]$




用mine的话,咱们可以定义自己感兴趣的。 可以根据现在minon使用的负载和内存情况,来分配不同的配置选项。。。。 pillar 和 mine我想大家应该能区分开来 。

 代码如下 复制代码
[root@vm-10-154-252-82 ~/clusterops]$time salt '10.154.252.46' mine.get '*' status.meminfo|more
10.154.252.46:
    ----------
    10.154.252.46:
        ----------
        Active:
            ----------
            unit:
                kB
            value:
                506876
        Active(anon):
            ----------
            unit:
                kB
            value:
                94456
        Active(file):
            ----------
            unit:
                kB
            value:
                412420
        AnonHugePages:
            ----------
            unit:
                kB
            value:
                20480
        AnonPages:
            ----------
            unit:
                kB
            value:
                94232
        Bounce:
            ----------



总结,一定要区分直接推送模块和mine的区别,还有grains和mine的区别。 仁者见仁,智者见智。 想怎么用,还是需要你自己掌控的。

[!--infotagslink--]

相关文章

  • php 中file_get_contents超时问题的解决方法

    file_get_contents超时我知道最多的原因就是你机器访问远程机器过慢,导致php脚本超时了,但也有其它很多原因,下面我来总结file_get_contents超时问题的解决方法总结。...2016-11-25
  • HTTP 408错误是什么 HTTP 408错误解决方法

    相信很多站长都遇到过这样一个问题,访问页面时出现408错误,下面一聚教程网将为大家介绍408错误出现的原因以及408错误的解决办法。 HTTP 408错误出现原因: HTT...2017-01-22
  • Android子控件超出父控件的范围显示出来方法

    下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
  • ps把文字背景变透明的操作方法

    ps软件是现在非常受大家喜欢的一款软件,有着非常不错的使用功能。这次文章就给大家介绍下ps把文字背景变透明的操作方法,喜欢的一起来看看。 1、使用Photoshop软件...2017-07-06
  • php抓取网站图片并保存的实现方法

    php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享...2015-10-30
  • intellij idea快速查看当前类中的所有方法(推荐)

    这篇文章主要介绍了intellij idea快速查看当前类中的所有方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-09-02
  • Mysql select语句设置默认值的方法

    1.在没有设置默认值的情况下: 复制代码 代码如下:SELECT userinfo.id, user_name, role, adm_regionid, region_name , create_timeFROM userinfoLEFT JOIN region ON userinfo.adm_regionid = region.id 结果:...2014-05-31
  • js导出table数据到excel即导出为EXCEL文档的方法

    复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta ht...2013-10-13
  • js基础知识(公有方法、私有方法、特权方法)

    本文涉及的主题虽然很基础,在许多人看来属于小伎俩,但在JavaScript基础知识中属于一个综合性的话题。这里会涉及到对象属性的封装、原型、构造函数、闭包以及立即执行表达式等知识。公有方法 公有方法就是能被外部访问...2015-11-08
  • mysql 批量更新与批量更新多条记录的不同值实现方法

    批量更新mysql更新语句很简单,更新一条数据的某个字段,一般这样写:复制代码 代码如下:UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value';如果更新同一字段为同一个值,mysql也很简单,修改下where即...2013-10-04
  • Postgresql 如何选择正确的关闭模式

    这篇文章主要介绍了Postgresl 如何选择正确的关闭模式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-18
  • c#中分割字符串的几种方法

    单个字符分割 string s="abcdeabcdeabcde"; string[] sArray=s.Split('c'); foreach(string i in sArray) Console.WriteLine(i.ToString()); 输出下面的结果: ab de...2020-06-25
  • PHP 验证码不显示只有一个小红叉的解决方法

    最近想自学PHP ,做了个验证码,但不知道怎么搞的,总出现一个如下图的小红叉,但验证码就是显示不出来,原因如下 未修改之前,出现如下错误; (1)修改步骤如下,原因如下,原因是apache权限没开, (2)点击打开php.int., 搜索extension=ph...2013-10-04
  • 安卓手机wifi打不开修复教程,安卓手机wifi打不开解决方法

    手机wifi打不开?让小编来告诉你如何解决。还不知道的朋友快来看看。 手机wifi是现在生活中最常用的手机功能,但是遇到手机wifi打不开的情况该怎么办呢?如果手机wifi...2016-12-21
  • ps怎么制作倒影 ps设计倒影的方法

    ps软件是一款非常不错的图片处理软件,有着非常不错的使用效果。这次文章要给大家介绍的是ps怎么制作倒影,一起来看看设计倒影的方法。 用ps怎么做倒影最终效果&#819...2017-07-06
  • 连接MySql速度慢的解决方法(skip-name-resolve)

    最近在Linux服务器上安装MySql5后,本地使用客户端连MySql速度超慢,本地程序连接也超慢。 解决方法:在配置文件my.cnf的[mysqld]下加入skip-name-resolve。原因是默认安装的MySql开启了DNS的反向解析。如果禁用的话就不能...2015-10-21
  • js控制页面控件隐藏显示的两种方法介绍

    javascript控制页面控件隐藏显示的两种方法,方法的不同之处在于控件隐藏后是否还在页面上占位 方法一: 复制代码 代码如下: document.all["panelsms"].style.visibility="hidden"; document.all["panelsms"].style.visi...2013-10-13
  • C#方法的总结详解

    本篇文章是对C#方法进行了详细的总结与介绍,需要的朋友参考下...2020-06-25
  • Zend studio文件注释模板设置方法

    步骤:Window -> PHP -> Editor -> Templates,这里可以设置(增、删、改、导入等)管理你的模板。新建文件注释、函数注释、代码块等模板的实例新建模板,分别输入Name、Description、Patterna)文件注释Name: 3cfileDescriptio...2013-10-04
  • EXCEL数据上传到SQL SERVER中的简单实现方法

    EXCEL数据上传到SQL SERVER中的方法需要注意到三点!注意点一:要把EXCEL数据上传到SQL SERVER中必须提前把EXCEL传到服务器上.做法: 在ASP.NET环境中,添加一个FileUpload上传控件后台代码的E.X: 复制代码 代码如下: if...2013-09-23