【问题标题】:Making executable all PHP files (recursively)使所有 PHP 文件可执行(递归)
【发布时间】:2011-05-31 04:21:45
【问题描述】:

我刚刚在我的服务器上下载了 MediaWiki 软件进行安装。解压后发现PHP文件无法执行。

我运行了 chmod +x *.php*(也有 .php5 文件),但它在子目录中不起作用。

如何将可执行标志添加到 MediaWiki 文件夹内的所有 PHP 脚本以递归方式扫描子文件夹?

提前谢谢你。

【问题讨论】:

  • 我认为您不需要使所有文件都可执行。普通的php包含脚本不需要flag。仅建议用于命令行脚本。因此,仅在适当的工具文件夹中使用一些 chmod +x */*.phpchmod +x */*/*.php
  • @mario,如果我没记错的话,这是一种可能(尽管可能不常见)使用“X Bit Hack”的服务器设置。
  • 您应该始终限定您的 chmod 命令。 chmod a+x *.php* 将为用户、组和世界设置执行位。无论如何,这隐含地是您正在做的事情,但更清楚。根据您的情况,您可能只需要为用户和组 (chmod ug+x) 设置可执行文件,如果这可行,您应该这样做。
  • 出于安全原因,我会避免使用ao(或通过省略限定符来暗示a)。拥有ug+x,o-x 更安全
  • 抱歉,丹尼斯,但由于 Apache 作为 wwwrun 运行,因此 需要脚本才能被其他人执行

标签: php bash chmod


【解决方案1】:

在 MediaWiki 目录中使用 bash

find . -iname "*.php" | xargs chmod +x

【讨论】:

  • 要确保它适用于包含空格的文件名,请使用:find . -iname '*.php' -print0 | xargs -0 chmod +x
  • 对。使用白色字符命名文件是不好的 ;) 我希望 MediaWiki 是一个好软件。
  • 事实上,Robert 的评论不适用于 MediaWiki,但对于一般用途来说是一件好事
【解决方案2】:

它在子目录中不起作用,因为*.php* 不匹配任何目录,因此不包含它。

因此,您应该使用 find ./ -iname "*.php*" -exec chmod 755 {} \; 之类的内容来设置相应的位。

【讨论】:

  • 因为 chmod 可以一次对多个文件进行操作,并且因为此操作在并行完成时不会失败,所以您应该使用 + 而不是 \; 来关闭您的 -exec
  • '.php' 被认为匹配 .php 和 .php5,而不是子目录;)
  • 如果您不知道结果列表中的项目数量,请不要使用+。这将在您的脚本中引入一个 Bohrbug。如果列表足够大,就会超过可执行命令行的最大长度(好吧,我知道它大于 2 MB,但仍然不安全)
  • @djechelon:当然是想匹配“.php”和“.php5”,但你的问题是它不适用于子目录。尽管如此,一个名为“subdir”的子目录(包括几个以“.php”或“.php5”结尾的文件本身)将不会被考虑,因为“subdir”与“.php”不匹配。因此,没有为“subdir”中的“.php”文件设置可执行位... ;)
猜你喜欢
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 2014-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-15
相关资源
最近更新 更多