我可以运行一个PHP脚本来运行一个C脚本,然后创建一个文件?
问题描述:
因此,当在网站上加载页面时,我运行一个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 -a
和system('./cScript /var/www/html/someFile.txt', $returnValue);
但是,如果我通过浏览器运行它不起作用。 C脚本确实运行,所以我在浏览器上得到了一些响应,这只是创建文件不起作用的部分。
难道这是我不知道的某种权限吗?或者路径相关的问题?
答
所以是的,这是一个权限问题,PHP运行的是www-data,它没有写权限,所以它抛出了一个错误,我没有捕捉到我的让 - 保持 - 极端 - 简单开始使用代码。
可通过固定授权允许www数据:
sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 770 /var/www/html
,虽然不是很安全,坏的做法,让最好不要这样做。 但是,如果你不得不创建一些专门设计的目录来存储这些高层次的文件。
运行Web服务器的用户是否具有对目录的读/写权限?尝试以该用户身份登录,然后运行脚本! – 2015-03-31 14:16:34
那么php目前以root身份运行 – matt 2015-03-31 14:17:55
可能是一个权限错误。您应始终检查涉及外部资源的呼叫的返回值,例如打开一个文件。永远不会取得成功。你的C代码假设什么都不会出错,这是非常糟糕的编码习惯。不,php不会以root身份运行,除非你以root身份运行你的web服务器(非常非常糟糕的做法)。您的web服务器以root身份启动,但应该删除root priv并以不同的用户身份运行,例如www数据。 – 2015-03-31 14:18:26