执行&在C中存储命令的结果

时间:2011-02-23 15:55:21

标签: php c

我正在尝试从C程序(...)

测试一个php文件

基本上我有一个文件名,我想检查php -l并存储输出以供进一步处理。

3 个答案:

答案 0 :(得分:2)

在这种情况下,一个简单的解决方案是将输出重定向到文件。然后将文件读入数组。然后,您可以使用阵列进行进一步处理。

像这样(在C中):

system("php -l yourfile.php > myfile");
FILE *f = fopen("myfile", "rb");
fseek(f, 0, SEEK_END);
long pos = ftell(f);
fseek(f, 0, SEEK_SET);
char *array = malloc(pos);
fread(array, pos, 1, f);
fclose(f);

//your processing part here..

free(array); // free allocated memory

解决方案#2 :调用PHP解释器,并将输出传递给您的程序。 类似于控制台中的以下内容:

php -l yourfile.php | pathToYourCProgram

在上面的例子中,您将从stdin读取PHP的输出。您可以读取整个输入,并直接将其存储到数组中。

答案 1 :(得分:1)

你可以使用“popen”功能。做男人popen了解popen的用法。 popen的第一个参数是你想要执行的二进制文件(即你的情况下是“php -l”),第二个参数是模式(读/写)。在您的情况下将读取文件模式。请参阅以下代码以了解popen的工作原理,相当简单。

http://www.google.com/notebook/public/17135812868734162318/BDSUiDQoQ-ojrzeck

希望有所帮助。

答案 2 :(得分:0)

如果从C程序执行php处理器不是强制性的,您可能需要考虑以下完全不同的方法:

  1. 创建一个小程序,解析stdin错误消息并进行一些后期处理。我们称这个程序为check_errors

  2. 在命令行上:

    php -l thefile.php | check_errors

    这会捕获php的输出并将其指向check_errors

  3. 构建一些只做一件事的小工具就像Unix一样,只做一件事,但做得很好。使用管道和重定向可以对这些程序进行排序,进行惊人的复杂操作。