分类 程序设计 下的文章

织梦CMS中嵌套查询语句,SetQuery和GetObject传入不同的参数就可以了。

if($keyword != '')
{
	$query2 = "SELECT id,title,typeid FROM `#@__archives` where arcrank>-1 AND ($keyword) ORDER BY id desc limit 0,5";
}
else
{
	$query2 = "SELECT id,title,typeid FROM `#@__archives` where arcrank>-1 ORDER BY id desc limit 0,5";
}
$dsql->SetQuery($query2);
$dsql->Execute(1);
while($row=$dsql->GetObject(1))
{
	$dsql->SetQuery("Select typedir From `#@__arctype` where id='$row->typeid'");
	$dsql->Execute(2);
	$ttrow=$dsql->GetObject(2);
	$tpdir=substr($ttrow->typedir,10);
	$likearticle .= "
  • ".cut_str(ConvertStr($row->title),16)."
  • "; }

    最近用dedecms搭建了一个简单的站,主要用于测试。发现在后台系统-系统基础参数。很多选项没有办法成功设置中文。
    实际上提交已成功,看数据库dede_sysconfig记录已成功插入,应该属于显示问题。看显示代码

    dede/templets/sys_info.htm:
    	echo "{$addstr}";
    

    用于转换html特殊字符,网上查询了一下,是PHP5.4以上版本会有这个问题,必须指定编号类型。需修改为

    	echo "{$addstr}";
    

    修改后,再修改系统基础参数就可以显示了。
    因为代码中太多类似的代码了,最好还是降低一下php的版本。

    使用py2exe生产windows可执行程序时,报错:error: [Errno 2] No such file or directory: 'MSVCP90.dll'
    原脚本:

    #!/usr/bin/env python
    __author__ = 'key1088'
    __date__ = '15-3-7'
    from distutils.core import  setup
    import py2exe
    setup(console=["overtime.py"])
    

    使用生产命令:

    F:workdirpython1>D:Python27python.exe mysetup.py  py2exe
    running py2exe
    creating F:workdirpython1build
    creating F:workdirpython1buildbdist.win32
    creating F:workdirpython1buildbdist.win32winexe
    creating F:workdirpython1buildbdist.win32winexecollect-2.7
    creating F:workdirpython1buildbdist.win32winexebundle-2.7
    creating F:workdirpython1buildbdist.win32winexetemp
    creating F:workdirpython1dist
    *** searching for required modules ***
    *** parsing results ***
    creating python loader for extension 'unicodedata' (D:Python27DLLsunicodedata.pyd -> unicodedata.pyd)
    creating python loader for extension 'wx._misc_' (D:Python27libsite-packageswx-3.0-mswwx_misc_.pyd -> wx._misc_.pyd)
    creating python loader for extension 'select' (D:Python27DLLsselect.pyd -> select.pyd)
    creating python loader for extension 'wx._windows_' (D:Python27libsite-packageswx-3.0-mswwx_windows_.pyd -> wx._windows_.pyd)
    creating python loader for extension '_hashlib' (D:Python27DLLs_hashlib.pyd -> _hashlib.pyd)
    creating python loader for extension 'wx._gdi_' (D:Python27libsite-packageswx-3.0-mswwx_gdi_.pyd -> wx._gdi_.pyd)
    creating python loader for extension 'wx._controls_' (D:Python27libsite-packageswx-3.0-mswwx_controls_.pyd -> wx._controls_.pyd)
    creating python loader for extension '_sqlite3' (D:Python27DLLs_sqlite3.pyd -> _sqlite3.pyd)
    creating python loader for extension 'bz2' (D:Python27DLLsbz2.pyd -> bz2.pyd)
    creating python loader for extension 'wx._core_' (D:Python27libsite-packageswx-3.0-mswwx_core_.pyd -> wx._core_.pyd)
    *** finding dlls needed ***
    error: [Errno 2] No such file or directory: 'MSVCP90.dll'
    

    修改代码最后一行:

    setup(console=["overtime.py"],options = { "py2exe":{"dll_excludes":["MSVCP90.dll"]}})
    

    生成exe文件成功。
    为了使py2exe打出来的可执行文件不出现中文乱码,每次输出要采用以下格式:print unicode("中文","utf-8")

    用C写了一个扫描类的监控程序,为了监控的实时性,所有要发送邮件。
    前提机器中必须有sendmail程序,sendmail的目录自己定义。
    我测试环境的信息

    [root@localhost sendmail]# uname -a
    Linux localhost.localdomain 2.6.32-358.el6.i686 #1 SMP Thu Feb 21 21:50:49 UTC 2013 i686 i686 i386 GNU/Linux
    [root@localhost sendmail]# cat /etc/issue
    CentOS release 6.4 (Final)
    Kernel r on an m
    

    代码如下,很简单只要是思路。

    #include 
    #include 
    #include 
    //借助sendmail命令发送邮件
    //邮件格式如下:
    /*
    *From: John Doe 
    *Sender: Michael Jones 
    *To: Mary Smith 
    *Subject: Saying Hello
    *Date: Fri, 21 Nov 1997 09:55:06 -0600
    *Message-ID: <1234@local.machine.example>
    *
    *This is a message just to say hello.
    *So, "Hello".
    */
    int main(void)
    {
            FILE    *fp;
            char    buffer[512];
            if( (fp=popen("/usr/sbin/sendmail -t","w")) == NULL)
            {
                    perror("open /usr/sbin/sendmail errorn");
                    printf("%sn", strerror(errno));
            }
            fputs("From: John Doe n", fp);
            fputs("Sender: Michael Jones n", fp);
            fputs("To: key1088 n", fp);
            fputs("Subject: Hello,wordn", fp);
            fputs("Date: Fri, 21 Nov 1997 09:55:06 -0600n", fp);
            fputs("Message-ID: <1234@local.machine.example>n", fp);
            fputs("n", fp);
            fputs("This is a message just to say hello.n", fp);
            fputs("So, Hellon", fp);
            if( pclose(fp) != 0) {
                    printf("send mail error.n");
                    exit(1);
            }
            printf("send mail done.n");
    }
    [root@localhost sendmail]# cc sendmail.c
    [root@localhost sendmail]# a.out
    send mail done.
    [root@localhost sendmail]# tail /var/log/maillog
    Mar 16 15:43:45 localhost postfix/sendmail[2124]: fatal: Recipient addresses must be specified on the command line or via the -t option
    Mar 16 15:47:33 localhost postfix/qmgr[1059]: 2B7F53F87B: from=, size=431, nrcpt=1 (queue active)
    Mar 16 15:47:33 localhost postfix/qmgr[1059]: 667E83F89F: from=, size=431, nrcpt=1 (queue active)
    Mar 16 15:47:33 localhost postfix/smtp[2130]: 2B7F53F87B: to=, relay=none, delay=1075, delays=1075/0.08/0/0, dsn=4.4.3, status=deferred (Host or domain name not found. Name service error for name=163.com type=MX: Host not found, try again)
    

    因为测试环境没有联网,所以是发送不成功。

    sscanf() - 从一个字符串中读进与指定格式相符的数据.
    函数原型:
    int sscanf( string str, string fmt, mixed var1, mixed var2 ... );
    int scanf( const char *format [,argument]... );
    说明:
    sscanf与scanf类似,都是用于输入的,只是后者以屏幕(stdin)为输入源,前者以固定字符串为输入源。
    其中的format可以是一个或多个 {%[*] [width] [{h | l | I64 | L}]type | ' ' | '/t' | '/n' | 非%符号}
    注:
    1、 * 亦可用于格式中, (即 %*d 和 %*s) 加了星号 (*) 表示跳过此数据不读入. (也就是不把此数据读入参数中)
    2、{a|b|c}表示a,b,c中选一,[d],表示可以有d也可以没有d。
    3、width表示读取宽度。
    4、{h | l | I64 | L}:参数的size,通常h表示单字节size,I表示2字节 size,L表示4字节size(double例外),l64表示8字节size。
    5、type :这就很多了,就是%s,%d之类。
    6、特别的:%*[width] [{h | l | I64 | L}]type 表示满足该条件的被过滤掉,不会向目标参数中写入值
    支持集合操作:
    %[a-z] 表示匹配a到z中任意字符,贪婪性(尽可能多的匹配)
    %[aB'] 匹配a、B、'中一员,贪婪性
    %[^a] 匹配非a的任意字符,贪婪性
    例子:
    1. 常见用法。
    char buf[512] ={0} ;
    sscanf("123456 ", "%s", buf);
    printf("%s/n", buf);
    结果为:123456
    2. 取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。
    sscanf("123456 ", "%4s", buf);
    printf("%s/n", buf);
    结果为:1234
    3. 取到指定字符为止的字符串。如在下例中,取遇到空格为止字符串。
    sscanf("123456 abcdedf", "%[^ ]", buf);
    printf("%s/n", buf);
    结果为:123456
    4. 取仅包含指定字符集的字符串。如在下例中,取仅包含1到9和小写字母的字符串。
    sscanf("123456abcdedfBCDEF", "%[1-9a-z]", buf);
    printf("%s/n", buf);
    结果为:123456abcdedf
    5. 取到指定字符集为止的字符串。如在下例中,取遇到大写字母为止的字符串。
    sscanf("123456abcdedfBCDEF", "%[^A-Z]", buf);
    printf("%s/n", buf);
    结果为:123456abcdedf
    6、给定一个字符串iios/12DDWDFF@122,获取 / 和 @ 之间的字符串,先将 "iios/"过滤掉,再将非'@'的一串内容送到buf中
    sscanf("iios/12DDWDFF@122", "%*[^/]/%[^@]", buf);
    printf("%s/n", buf);
    结果为:12DDWDFF
    7、分解key1088@163.com
    sscanf("key1088@163.com","%[^@]%*c%s", user, host);
    结果为:user=key1088,host=163.com