PHP中的通配符复制文件

时间:2012-04-22 16:56:19

标签: php linux bash command-line

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

2 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:0)

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

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