【问题标题】:Can I run a PHP script that runs a C script which then creates a file?我可以运行一个 PHP 脚本来运行一个 C 脚本然后创建一个文件吗?
【发布时间】:2023-03-10 05:12:01
【问题描述】:

因此,当在网站上加载页面时,我会运行一个创建一些文件的 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 脚本确实运行了,所以我在浏览器上得到了一些响应,它只是创建文件的部分不起作用。

可能是某种我不知道的许可吗?还是路径相关的问题?

【问题讨论】:

  • 运行 Web 服务器的用户是否对该目录具有读/写权限?尝试以该用户身份登录,然后运行您的脚本!
  • 嗯 php 当前以 root 身份运行
  • 可能是权限错误。您应该始终检查涉及外部资源的调用的返回值,例如打开一个文件。永远不要假设成功。您的 C 代码假定任何事情都不会出错,这是非常糟糕的编码习惯。不,php不会以root身份运行,除非您以root身份运行您的网络服务器(非常非常非常糟糕的做法)。您的网络服务器以 root 身份启动,但应该删除 root 权限并以不同的用户身份运行,例如www-数据。
  • 'c 程序'我的主@iharob

标签: php c system


【解决方案1】:

所以是的,这是一个权限问题,PHP 作为 www-data 运行并且它没有写权限,所以它抛出了一个我没有用 let-keep-it-extremelly-simple- 捕获的错误从代码开始。

可以通过授予 www-data 权限来修复:

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

虽然这不是很安全,而且是不好的做法,所以最好不要这样做。 但是,如果您必须这样做,不妨创建一些专门用于在层次结构中存储这些文件的目录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    • 2021-07-02
    • 1970-01-01
    • 1970-01-01
    • 2014-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多