2015-03-31 89 views
0

因此,当在网站上加载页面时,我运行一个C脚本来创建一些文件。我可以运行一个PHP脚本来运行一个C脚本,然后创建一个文件?

一切都完美地自行完成,但放在一起我得到了一个分段错误。

system('./cScript /var/www/html/someFile.txt', $returnValue); 

C脚本采用该参数并创建一个基于它的另一个文件:

FILE *f; 
f = fopen ('/var/www/html/someFile.bak', "w"); 
fprintf (f, "%s", "some content goes here"); 
fclose (f); 

它的工作原理,如果我在它上面运行自己的 C脚本它的工作原理,如果我跑PHP -asystem('./cScript /var/www/html/someFile.txt', $returnValue);

但是,如果我通过浏览器运行它不起作用。 C脚本确实运行,所以我在浏览器上得到了一些响应,这只是创建文件不起作用的部分。

难道这是我不知道的某种权限吗?或者路径相关的问题?

+0

运行Web服务器的用户是否具有对目录的读/写权限?尝试以该用户身份登录,然后运行脚本! – 2015-03-31 14:16:34

+0

那么php目前以root身份运行 – matt 2015-03-31 14:17:55

+0

可能是一个权限错误。您应始终检查涉及外部资源的呼叫的返回值,例如打开一个文件。永远不会取得成功。你的C代码假设什么都不会出错,这是非常糟糕的编码习惯。不,php不会以root身份运行,除非你以root身份运行你的web服务器(非常非常糟糕的做法)。您的web服务器以root身份启动,但应该删除root priv并以不同的用户身份运行,例如www数据。 – 2015-03-31 14:18:26

回答

1

所以是的,这是一个权限问题,PHP运行的是www-data,它没有写权限,所以它抛出了一个错误,我没有捕捉到我的让 - 保持 - 极端 - 简单开始使用代码。

可通过固定授权允许www数据:

sudo chown -R www-data:www-data /var/www/html 
sudo chmod -R 770 /var/www/html 

,虽然不是很安全,坏的做法,让最好不要这样做。 但是,如果你不得不创建一些专门设计的目录来存储这些高层次的文件。

相关问题