0

PHP スクリプト内から次の bash (シェル) コマンドに相当するものを実行したいと考えています。

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

しかし、PHP の system() コマンドを使用しようとしたとき、おそらく cp がシェルの一部であり、スタンドアロンの実行可能ファイルではないため、機能しませんでした。また、PHP の copy() 関数がワイルドカードをサポートしているとは思わないか、サポートしているとしても、私が指定しているコマンド ライン スイッチをサポートしていないことは確かです。PHP 内でこれを実行する最も簡単で最良の方法は何ですか。シェル スクリプトを作成して system() を呼び出すこともできますが、それはばかげているようです。

編集:コメントは正しいです。許可の問題があったと思います。mkdir("blahblah/htdocs/host/$REV", 775) への呼び出しで、所有者とグループが書き込み可能にパーミッションが設定されなかったのはなぜですか?

4

2 に答える 2

10

PHPには、glob()ワイルドカードを受け入れる関数があります。シェルラインほど単純ではありませんが、次のようなことができます。

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

コメントが示しているように、実際にcpはシェルの一部ではないことがわかりました。エラーは権限に関係していると思います。mkdirコマンドを実行したときにディレクトリのアクセス許可を設定する方法がわからなかったため、所有者が書き込み可能ではありませんでした。したがって、この関数を使用しない正当な理由がない限り、system()おそらく既存のソリューションを使用して、mkdir権限を修正するだけです。

モードとして775を指定しましたが、接頭辞「0」( 0775 mkdir)を含めなかったため、8進数ではなく10進数として解釈されたと思います。それを修正することですべてが解決しました。1つの小さなキャラクターが本当に大きな違いを生みます!

于 2012-04-22T19:40:11.620 に答える