[PHP-users 13578] system関数で出力が書き出せない

Masaki NOHTOMI php-users@php.gr.jp
Tue, 25 Feb 2003 18:39:20 +0900


みなさんお世話になります。

#!/usr/local/bin/php
<?php
system("cvs up > /tmp/cvsup.txt 2>&1");
if(!($file = fopen("/tmp/cvsup.txt", 'r'))) {
        print("cannot open file");
        exit;
}
while (!feof($file)) {
        $line = fgets($file);
        $term = explode(" ", $line);
                if ($term[0] == '?') {
                echo("$term[1]");
                system("cvs add $term[1] > /tmp/cvsadd.txt 2>&1");
        }
}
fclose($file);
?>

コマンドライン版PHP-4.3.0で上記スクリプトを組んで
cvs up したときの出力をたとえば
---------------------------
A test/untitled6.php
? test/untitled7.php
A test/untitled/untitled0.php
---------------------------
をファイルに書き出した後
? で始まる行を処理中するとき
cvs add <ファイル名>
というコマンドを走らせ、
その際に出力される内容(エラー出力になってるようです)を
cvs add: use 'cvs commit' to add this file permanently
という内容をファイルに書き出そうとしております。

上記スクリプトだと
system("cvs add $term[1] > /tmp/cvsadd.txt 2>&1");
の部分がそうなのですが、
出力がどうしても画面に出てしまい、ファイルに書き出されません。

ためしにたとえば cvs up の出力が上記と同じ状態で
?で始まる行を処理するため

#!/usr/local/bin/php
<?
system("cvs add test/untitled7.php > /tmp/cvsadd.txt 2>&1")
?>

というスクリプトだと /tmp/cvsadd.txt にはちゃんと
cvs add: use 'cvs commit' to add this file permanently
が書き込まれます。

ちなみに FreeBSD 4.7-STABLE の tcsh上で作業しておりますが、
PHPのsystem関数からはBシェル(sh)が起動しているようです。
このあたり知識が不確かですみませんが、
解決法ご存知の方おられましたらよろしくお願いします。


-- 
納富正樹 / Masaki NOHTOMI <narf@alcnet.jp>