php exec c程序在后台出错

php exec c程序在后台出错,php,c,command-line,background,exec,Php,C,Command Line,Background,Exec,我正在尝试使用php在后台执行一个程序。c程序就是这样 #include <stdio.h> #include <stdlib.h> int main(int argc, char **argv) { printf("hello\n"); int i =0; printf("hello world\n"); FILE *fp; fp = fopen("/home/gianpaolo/workspace/test/outputfil

我正在尝试使用php在后台执行一个程序。c程序就是这样

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv) {
    printf("hello\n");
    int i =0;
    printf("hello world\n");
    FILE *fp;
    fp = fopen("/home/gianpaolo/workspace/test/outputfile", "w+");

    while(i < 60000000) {
        fprintf(fp, "hello world\n");
        i++;
    }
    fclose(fp);
}
如果我运行任何命令行,它工作得很好,但如果我运行它,它不会有任何想法

---更新---
我按照建议检查fp是否为空,事实上它是空的。那么,我如何授予权限,使其可以打开以写入或创建以写入文件?

当fp从fopen返回时,您是否检查了fp是否为空?如上所述:

如果文件已成功删除 打开该函数将返回一个 指向所使用的文件对象的指针 要进一步识别所有数据流,请执行以下操作: 涉及it的业务否则,一个 返回空指针。


这几乎可以肯定是因为两件事

  • 您不检查是否无法打开文件(即
    fp
    为空)
  • 您的web服务器用户(通常为www数据或类似数据)没有打开该文件的权限
  • 将这两者结合起来,您试图写入一个您(在本例中为www数据)没有权限的文件,因此在C程序的
    fwrite
    调用中使用
    NULL
    指针,在
    fwrite
    调用中取消引用
    NULL
    指针会导致segfault

    简而言之,请记住,您的web服务器不是以与您具有相同权限的同一用户的身份运行的


    编辑:您需要使用
    chmod
    shell命令将目录的读写权限授予“其他”(除非你不想让任何人在那里写,只要www数据,在这种情况下你还需要使用
    chown
    。严格地说,问题的这一部分将继续存在,或者检查
    fopen
    调用的返回值


    我猜运行Web服务器的用户没有足够的权限进行写入(甚至读取)文件。如果是这种情况,
    fopen
    将返回一个
    NULL
    指针。

    我想到了它,但正如你在c代码中看到的,在fopen之前有一个printf没有输出。我检查了fp是否为NULL,事实上是。现在有没有办法授予打开/创建文件的权限你是对的,有没有办法授予权限是否可以打开/创建文件?
    man chmod
    应该足以让您获得所需的权限。查看chmod或chown以获得权限。
    <?php
    $out = array();
    exec('/home/gianpaolo/workspace/test/test 2>&1', $out);
    print_r($out);
    ?>
    
     Array ( [0] => Segmentation fault )