我正在尝试使用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);
}
运行该程序的php就像这样
<?php
$out = array();
exec('/home/gianpaolo/workspace/test/test 2>&1', $out);
print_r($out);
?>
我正在使用引用此代码的网页触发此代码。你可以看到我打印变量$ out来看看发生了什么,这就是我得到的
Array ( [0] => Segmentation fault )
如果我运行任何命令行它运行良好,但如果我运行它,它不会有任何想法吗?
--- --- UPDATE 我检查了建议,如果fp是NULL,实际上它是。那么,我如何授予权限以便它可以打开以写入或创建以写入文件?
答案 0 :(得分:1)
这几乎可以肯定是因为有两件事
fp
为空)合并这两个,你试图写一个文件你(在这种情况下是www-数据)没有权限,因此在NULL
调用中使用fwrite
指针C程序在NULL
调用中取消引用fwrite
指针会导致段错误
简而言之,请记住您的网络服务器不是以同一个用户身份运行,具有与您相同的权限。
编辑:您需要使用chmod
shell命令授予read&amp; amp;将目录的权限写入“其他”(除非你不想让任何人写在那里,只是www-data,在这种情况下你也需要使用chown
。严格说来这部分问题存在于http://serverfault.com或http://unix.stackexchange.com
答案 1 :(得分:1)
检查fopen
来电的返回值。
我猜运行Web服务器的用户没有足够的权限来编写(甚至读取)该文件。如果是这种情况,fopen
将返回NULL
指针。
答案 2 :(得分:0)
从fopen返回时,你检查fp是否为NULL吗?如上所述here:
如果文件已成功完成 打开函数会返回一个 指向所使用的FILE对象的指针 进一步识别流 涉及它的操作。 否则,a 返回空指针。