0

我想在 PHP 脚本中执行与以下 bash (shell) 命令等效的命令:

cp --parents -t ../../htdocs/host/$2/ *.html *.js *.png *.ogg *.mp3 Sprites/*.js

但是当我尝试使用 PHP system() 命令时,它不起作用,大概是因为 cp 是 shell 的一部分,而不是独立的可执行文件。而且我不认为 PHP copy() 函数支持通配符,或者如果支持,它肯定不支持我指定的命令行开关。在 PHP 中执行此操作的最简单和最好的方法是什么。我可以创建一个 shell 脚本并在其上调用 system() ,但这似乎很糟糕。

编辑:评论正确;我相信我遇到了许可问题。为什么我对 mkdir("blahblah/htdocs/host/$REV", 775) 的调用没有将权限设置为所有者和组可写?

4

2 回答 2

10

PHP 有一个glob()接受通配符的函数。它不像 shell 行那么简单,但你可以这样做:

foreach (glob("*.html") as $htmlFile) {
    copy($htmlFile, $targetDir);
}
于 2012-04-22T17:04:08.717 回答
0

事实证明,正如评论所示,确实cp不是外壳的一部分,我认为错误与权限有关。运行命令时我不清楚如何设置目录权限mkdir,因此它不是所有者可写的。因此,除非有充分的理由不使用该system()功能,否则我可能会使用现有的解决方案并更正我的mkdir权限。

mkdir已将 775 指定为模式,但因为我忽略了包含“0”前缀 (0775),所以我认为它被解释为十进制而不是八进制。纠正解决了一切。一个小角色真的有很大的不同!

于 2012-04-22T19:40:11.620 回答