【问题标题】:shell_exec chmod on directories目录上的 shell_exec chmod
【发布时间】:2014-08-19 13:57:03
【问题描述】:

我正在从浏览器调用一个 PHP 文件,该文件正在搜索一些子目录并使用 chmod 将它们的权限更改为 777。该过程在用户“www-data”下运行 我已经(暂时!!)允许“www-data”在 /etc/sudoers 文件中拥有正确的权限,但仍然无法获得更改的权限。

<?php
shell_exec("find /home/path -type d -name Directory_name_to_search_for -print0 | xargs -0 sudo chmod 777");
?>

这与我调用 sudo 的位置有关吗?

【问题讨论】:

  • 你检查find是否真的找到了什么?
  • 是 - 从命令行打印出一长串目录名称,但中间没有空格。
  • 意料之中,print0 强制 find 使用 null (\0) 作为文件名间分隔符,xargs 在 -0 模式下使用,因此文件名中的空格不会' t 被视为文件名分隔符。既然 find 工作正常,那么你的 sudo 设置就会出现问题。
  • 好的 - sudo 设置确实不正确 - 非常感谢你现在已经修复了。

标签: php chmod


【解决方案1】:

输出开头的换行符似乎阻止了 shell_exec 打印任何其他内容。希望这可以为其他人节省一两个小时。

<?php
shell_exec("find /home/path -type d -name Directory_name_to_search_for -print0 | xargs -0 sudo chmod 777 2>&1");
?>

2>&1

【讨论】:

  • OK - 日志给了我这个; COMMAND=/bin/chmod 777 /home/dropbox/home/path/match_1/Directory_name_to_search_for /home/path/match_2/Directory_name_to_search_for 等等。所有目录都存在,所以查找位有效,但输出仅由空格分隔。
  • 现在工作 - Youssef 把我带到了那里,Marc B 谢谢你。
猜你喜欢
  • 2014-10-11
  • 2012-04-17
  • 1970-01-01
  • 2012-05-26
  • 2013-04-09
  • 2012-09-09
  • 2013-11-01
  • 2012-03-06
  • 1970-01-01
相关资源
最近更新 更多