2013年3月

开发背景:

公司有台嵌入式拨号上网设备,内置busybox和完整wget命令(支持https协议),但没有curl、python、ruby、php等扩展工具可用。网上现有基于DNSPod实现的Linux脚本无法在该设备上运行,于是写了个Shell版动态域名客户端(ddnspod),现在发布出来希望能给需要的朋友带来一些方便。

项目源码:

https://github.com/anrip/ArDNSPod

DnsPod官方文档

https://support.dnspod.cn/Support/api

功能介绍:

  • 优雅的函数封装,灵活的更新策略
  • 基于DNSPod最新用户API实现动态域名客户端
  • 支持基于系统计划任务实现更新,防止脚本意外终止
  • 可运行于多数类unix系统中,包括部分嵌入式小型系统
  • 依赖sed/wget/nslookup命令,wget也可使用curl替代

更新说明:

2015年7月7日

  • 使用D+服务获取域名解析

2013年8月9日

  • 修正一处笔误

2013年8月8日

  • 默认DNS查询服务器更换为114.114.114.114

2013年5月23日

  • [[]]替换为[],防止一些嵌入设备无此命令

2013年4月1日

  • 完善说明文档
  • 优化全局变量定义
  • 刚发现DnsPod官方API示例已收录本文

2013年3月29日

  • 从dns服务器获取子域名IP
  • 实现仅IP变更后才提交更新

2013年3月28日

  • 现在是13年3月,故而第一个版本就定为v3.3吧
  • 使用APIv4.6实现简单的动态更新功能

常见问题:

record line invailid 将脚本保存为utf-8格式即可
Record id invalid 检查账号权限、是否冲突等

Windows下使用php sendmail配置方法是否不太可能,但也不是绝路,现在告诉大家如何在WINDOWS平台下解决php sendmail配置问题.

大家非常好奇为什么别人大型公司的论坛注册后会系统自动发送一封注册信息的电子邮件到注册人的信箱里,而同样用的是一种内核的论坛程序,为什么自己架设的却没有这个功能,今天我来为大家解密这个原因。我们拿PHPBB来举例,这个论坛内核早已经写好了论坛邮件发送功能,只需要你本地有个SMTP转发的服务在就可以,由于大公司服务器大多数用的是UNIX或者是LIUNX,因为这些服务器本身具有本地SMTP服务的作用,所以可以直接发注册信息到注册人的邮箱里,而我们个人架设网站大部分都是WINDOWS的平台,由于ASP论坛非常不安全,而ASPX论坛又不好进行开源。

虽然这两种论坛架构非常容易运用些IIS的相关的SMTP服务器来解决问题,但都先天不足,很多网友都非常喜欢用PHP内核的论坛来架设,比如PHPBB、PHPWIND、等这些都是具备论坛发信功能,但由于PHP先天就是LIUNX的宠爱,所以WINDOWS下支持SMTP的东西不是很多.Windows下使用php sendmail配置方法是否不太可能,但也不是绝路,现在告诉大家如何在WINDOWS平台下解决php sendmail配置问题.

1.修改 sendmail.ini 文件,修改以下信息:

smtp_server = mail.anrip.com
auth_username = user@anrip.com
auth_password = passwd

2.修改 php.ini 文件,修改以下信息:

[mail function]
;smtp_port = 25
;sendmail_from =
sendmail_path = "E:\sendmail\sendmail.exe -t"
  1. 重新启动php进程,测试mail()功能:
<?php
    $now = date("Y-m-d h:i:s");
    $from_name = '寄件人';
    $from_email =
    $headers = 'From: $from_name <$from_email>';
    $body = '嗨, \n 這是一封测试信件来自 $from_name <$from_email>.';
    $subject = '[$now] 测试邮件发送';
    if (mail($to, $subject, $body, $headers)) {
        echo "success!";
    } else {
        echo "fail…";
    }
?>

这样,Windows下使用php-sendmail配置就顺利完成了!

本文主要是说明linux下svn命令的使用方法,同时记录自己在使用中遇到的一些疑惑。

1、将文件checkout到本地目录

svn checkout url(url是服务器上的目录)

简写:svn co

例如:

svn checkout svn://192.168.1.1/pro/domain

注意:这里一般是下载自己需要的,或者有权限的所有目录,以便以后自己在相应目录下做修改,以及内容的提交

2、往版本库中添加新的文件

svn add file

例如:

#添加test.php
svn add test.php
#添加当前目录下所有的php文件
svn add *.php

注意:这里可以直接在相应文档的工作目录,运行此命令,然后,相应的文件就进入了入库排行中

3、将改动的文件提交到版本库

svn commit -m “LogMessage“ [-N] [--no-unlock] PATH(如果选择了保持锁,就使用–no-unlock开关)

简写:svn ci

例如:

svn commit -m “add test file for my test“ test.php

4、加锁/解锁

svn lock -m “LockMessage“ [--force] PATH

例如:

svn lock -m “lock test file“ test.php

svn unlock PATH

5、更新到某个版本

svn update -r m path

简写:svn up

例如:

#如果后面没有目录,默认将当前目录以及子目录下的所有文件都更新到最新版本。
svn update
#将版本库中的文件test.php还原到版本200
svn update -r 200 test.php
#更新,于版本库同步。如果在提交的时候提示过期的话,是因为冲突,需要先update,修改文件,然后清除svn resolved,最后再提交commit
svn update test.php

6、查看文件或者目录状态

1)svn status path(目录下的文件和子目录的状态,正常状态不显示)

【?:不在svn的控制中;M:内容被修改;C:发生冲突;A:预定加入到版本库;K:被锁定】

注意:这里的path是当前,本地服务器的工作目录即可

2)svn status -v path(显示文件和子目录状态)

简写:svn st

第一列保持相同,第二列显示工作版本号,第三和第四列显示最后一次修改的版本号和修改人。

注:svn statussvn diffsvn revert 这三条命令在没有网络的情况下也可以执行的,原因是svn在本地的.svn中保留了本地版本的原始拷贝。

7、删除文件

svn delete url -m “delete test fle“

简写:svn (del, remove, rm)

例如:

svn delete svn://192.168.1.1/pro/domain/test.php -m “delete test file”

或者直接 svn delete test.php 然后再 svn ci -m ‘delete test file‘ ,推荐使用这种

8、查看日志

svn log path

例如:

svn log test.php 显示这个文件的所有修改记录,及其版本号的变化

注意:这里的path是指当前工作目录,本地的工作文件

9、查看文件详细信息

svn info path

例如:

svn info test.php

10、比较差异

svn diff path(将修改的文件与基础版本比较)

例如:

svn diff test.php

svn diff -r m:n path(对版本m和版本n比较差异)

例如:

svn diff -r 200:201 test.php

简写:svn di

11、将两个版本之间的差异合并到当前文件

svn merge -r m:n path

例如:

#将版本200与205之间的差异合并到当前文件,但是一般都会产生冲突,需要处理一下
svn merge -r 200:205 test.php

12、SVN 帮助

svn help

`svn help ci

13、版本库下的文件和目录列表

svn list path

显示path目录下的所有属于版本库的文件和目录

简写:svn ls

14、创建纳入版本控制下的新目录

svn mkdir: 创建纳入版本控制下的新目录。

用法:

1、mkdir PATH…
2、mkdir URL…

创建版本控制的目录。

1、每一个以工作副本 PATH 指定的目录,都会创建在本地端,并且加入新增调度,以待下一次的提交。
2、每个以URL指定的目录,都会透过立即提交于仓库中创建.在这两个情况下,所有的中间目录都必须事先存在。

15、恢复本地修改

svn revert: 恢复原始未改变的工作副本文件 (恢复大部份的本地修改)。revert:

用法: revert PATH…

注意: 本子命令不会存取网络,并且会解除冲突的状况。但是它不会恢复被删除的目录

16、代码库URL变更

svn switch (sw): 更新工作副本至不同的URL。

用法:

1、switch URL [PATH]

2、switch –relocate FROM TO [PATH...]

1、更新你的工作副本,映射到一个新的URL,其行为跟 svn update 很像,也会将服务器上文件与本地文件合并。这是将工作副本对应到同一仓库中某个分支或者标记的方法。

2、改写工作副本的URL元数据,以反映单纯的URL上的改变。当仓库的根URL变动(比如方案名或是主机名称变动),但是工作副本仍旧对映到同一仓库的同一目录时使用这个命令更新工作副本与仓库的对应关系。

17、解决冲突

svn resolved: 移除工作副本的目录或文件的“冲突”状态。

用法: resolved PATH…

注意: 本子命令不会依语法来解决冲突或是移除冲突标记;它只是移除冲突的相关文件,然后让 PATH 可以再次提交。

18、输出指定文件或URL的内容。

svn cat 目标[@版本]…如果指定了版本,将从指定的版本开始查找。

svn cat -r PREV filename > filename (PREV 是上一版本,也可以写具体版本号,这样输出结果是可以提交的)

注:在没有用“url”等特别说明的情况下,都可以在本地工作目录下进行操作。

以上是常用svn命令的使用方法。