PHP 中的通配符复制文件


Wildcard copy files in PHP

我想从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) 的调用没有将权限设置为所有者和组可写?

PHP 有一个接受通配符的glob()函数。它不像外壳线那么简单,但您可以执行以下操作:

foreach (glob("*.html") as $htmlFile) {
    copy($htmlFile, $targetDir);
}

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

我的mkdir指定 775 作为模式,但由于我忽略了包含"0"前缀 (0775),我认为它被解释为十进制而不是八进制。纠正解决了一切。一个小角色会带来很大的不同!