9

如何使用 php 运行 c 程序exec() 我已经从谷歌搜索中看到了很多结果 可以通过 exec() 函数但我无法使用它 我尝试过这种方式 我用 c 编写了一个程序

**myc.c**
#include <stdio.h>

int main(int argc, char *argv[])
{
    printf("Hello, world\n");

    return 0;
}

**test.php**
<?php
exec('myc.c');
?>

任何人都可以在这方面帮助我吗?我通过 wamp 服务器通过放置 www 文件夹执行此操作

4

4 回答 4

8

C程序

#include <stdio.h>

int main(int argc, char **argv)
{
    if(argv[1])
    printf("First arg %d\n", argv[1]);
    if(argv[2])
    printf("Second arg %d", argv[2]);
    return 0;
}

PHP 代码

<?php
exec("testone.exe 125 70", $out);
print_r($out);
?>

组合输出:

<!-- Array ( [0] => First arg 27 [1] => Second arg 27 ) -->
于 2013-02-02T09:55:16.130 回答
7

如果要运行用 C 编写的程序,则必须运行程序而不是源代码。

将您的 C 编译成可执行文件,然后从exec.

于 2012-08-04T12:31:20.817 回答
7

您应该编译您的 C 程序,然后用 PHP 执行它。PHP 不会运行您的 C 代码,即使它们具有相似的语法。

PHPexec函数将执行类似于在 shell 或命令提示符下执行的命令。

于 2012-08-04T12:32:08.047 回答
3

今天的 PHP 生态系统现在为此提供了几个更好的解决方案。

1.写一个PHP扩展

您可以使用Zephir以类似 PHP 的语言轻松构建 PHP 扩展。它们提供了一种称为自定义优化器的机制,可以将任意 C 库或自定义 C 代码干净地绑定到您的扩展。

虽然它需要更多的工作,但它可以(YMMV)通过原生 PHP 调用产生接近 C 的性能,并升级你的 PHP-fu。你也可能不小心爱上了 Phalcon。

以我个人的经验,纯 Zephir 实际上损害了纯 PHP 在我的任务中的性能,所以只有当你想利用现有 C 库的强大功能,或者你有繁重的工作负载时,我才会推荐它。

这个 Github 评论简要概述了为什么应该使用 Zephir 优化器而不是内联CBLOCK以及如何构建目录/文件。

2. 使用 FFI

从 PHP 7.4 开始,内置了外部函数接口。您也可以将其安装为旧版本 PHP 的扩展。

好处?您不必编写自己的 PHP 扩展来使用 C 代码。不足之处?现在,FFI 性能并不能真正与实际的 C 代码相比。你可以把它想象成一个拐杖而不是一个蝙蝠车。

如果您关心高性能,请尝试选项 1。

于 2019-06-27T17:08:20.630 回答