浏览 2566 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-04-23
openlog — Open connection to system logger Description bool openlog ( string $ident, int $option, int $facility ) openlog() opens a connection to the system logger for a program. ...... Return Values Returns TRUE on success or FALSE on failure. 手册里面对openlog这样介绍,让人误认为如果"system logger"没有正常工作或者 停止,则openlog会打开失败,但是实际测试情况是openlog永远返回true! 因为,openlog对C的包装是这样的: PHP_FUNCTION(openlog) { char *ident; long option, facility; int ident_len; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sll", &ident, &ident_len, &option, &facility) == FAILURE) { return; } if (BG(syslog_device)) { efree(BG(syslog_device)); } BG(syslog_device) = estrndup(ident, ident_len); openlog(BG(syslog_device), option, facility); RETURN_TRUE; } 该函数永远RETURN_TRUE!不知道php手册中还有那些函数存在这种情况?如果只根 据手册来决定处理策略,没有对程序各分支流程进行测试,则可能想当然的情况与 真实情况有较大出入。 该函数出现这种情况,可能和C的标准函数: man openlog.. SYNOPSIS #include <syslog.h> void openlog(const char *ident, int option, int facility); void syslog(int priority, const char *format, ...); void closelog(void); openlog也没有返回值相关 继续看openlog的一个实现版本: void openlog(char *ident, int option, int facility) { struct job *job = gettib()->job; if (ident && strlen(ident) < 64) { if (job->ident) { char *oldident = job->ident; job->ident = strdup(ident); free(oldident); } else job->ident = strdup(ident); } job->facility = facility; } 该函数只做设置,不会返回成功与否。 linux的glibc的openlog实现也类似,没有相应的返回值。 故php的openlog永远返回true,是符合逻辑但是手册会令人误解的! 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |