【发布时间】:2014-05-24 14:34:30
【问题描述】:
如果可能的话,我不想使用字符串检测方法,您可以使用字符串函数来检测给定字符串输出中的版本。如果不可能,请忽略我刚刚输入的内容。
是否有类似 uname() 的函数,还是我必须编写自己的函数?如果是这样,请给我一个先机,或者您可以通过教我如何做来让我的生活更轻松。谢谢!
顺便说一句,如果这可能有帮助,我正在使用 Dreamhost 共享服务器,是的,它安装了 gcc、php5.3 和 pear 1.9.4。
【问题讨论】:
如果可能的话,我不想使用字符串检测方法,您可以使用字符串函数来检测给定字符串输出中的版本。如果不可能,请忽略我刚刚输入的内容。
是否有类似 uname() 的函数,还是我必须编写自己的函数?如果是这样,请给我一个先机,或者您可以通过教我如何做来让我的生活更轻松。谢谢!
顺便说一句,如果这可能有帮助,我正在使用 Dreamhost 共享服务器,是的,它安装了 gcc、php5.3 和 pear 1.9.4。
【问题讨论】:
很抱歉让您失望了,但这就是您需要做的。 popen 函数是你的朋友。只需在读取模式下使用popen 调用“pear -V”,并将信息存储在一个缓冲区中,您可以轻松解析该缓冲区以隔离 pear 和 PHP 的版本号。它可以做得更干净,但它的要点是:
FILE *pfd;
char buffer[1024];
char *bp = buffer;
char tmp[100];
size_t len;
size_t line = 0;
if ((pfd = popen ("pear -V", "r")) == NULL) {
fprintf (stderr, "error: failed to open pipe.");
return 1;
}
while (fgets (tmp, 1023, pfd) != NULL && line < 2)
{
len = strlen (tmp);
strncpy (bp, tmp, len);
bp += len;
line++;
}
pclose (pfd);
printf ("\nbuffer:\n\n%s\n\n", buffer);
输出:
buffer:
PEAR Version: 1.9.4
PHP Version: 5.3.8
版本号的解析留给你。
【讨论】:
char *pear = fgets (tmp, 1023, pfd); char *php = fgets (tmp, 1023, pfd); char *pearver = strrch (pear, ' '); char *phpver = strrchr (php, ' ');替换while循环,至少你会有pearver和phpver的版本:)