我想在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)的调用没有设置所有者和组可写权限?
答案 0 :(得分:8)
PHP有glob()
函数接受通配符。它不像shell行那么简单,但你可以这样做:
foreach (glob("*.html") as $htmlFile) {
copy($htmlFile, $targetDir);
}
答案 1 :(得分:0)
事实证明,正如评论所指出的,确实cp
不是shell的一部分,我认为错误与权限有关。我在运行mkdir
命令时不清楚如何设置目录权限,因此它不是所有者可写的。因此,除非有充分的理由不使用system()
函数,否则我可能会使用现有的解决方案并纠正我的mkdir
权限。
我的mkdir
指定了775作为模式,但由于我忽略了包含“0”前缀(0775),我认为它被解释为十进制而不是八进制。纠正解决了一切。一个小角色会产生很大的不同!