[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>