2

ウェブサイトの起動とバージョン管理を自動化するために、svn を php スクリプトに統合しようとしています。

svn および svnadmin コマンドと一緒に exec php コマンドを使用して、作成の手順中にいくつかのチェックを行いました。

したがって、(存在しないリポジトリの) make および hotcopy を実行すると、値 1 (およびその正しい) が返されますが、svnadmin create (完全にばかげたパスを使用) は常に 0 を返します (コンテンツが作成された場合と同様ですが、それは正しくありません!)

public function routine($istr, $search, $replace) {
 $output = array();
 $returnvar = 0;
 $istr = str_replace($search,$replace,$istr);
 exec($istr." 2>&1", $output,$returnvar);
 $this->addMessage($istr);
 if($returnvar != 0) {
  $this->addMessage("!!! GOT ERRORS !!!");
  $this->addMessage(implode("\n", $output));
 }
}

このルートは実際には機能しますが、returnvar は常に 0 です (svnadmin コマンドが hotcopy と異なる場合)。

関数の意味は、エラーが発生した場合にのみ完全な出力を表示したいということです。それ以外の場合は何も表示しない (または確認メッセージを表示する)

誰かが前もって助けてくれることを願っています

4

1 に答える 1

1

解決策を見つけました: http://www.php.net/manual/en/function.system.php#94929

私の目的のためにそれを変更し、私のプロジェクトに追加しました:)今、私のルーチンは次のようになります:

public function routine($istr, $search="", $replace="") {
    $output = array();
    if($search != "" || $replace != "")
        $istr = str_replace($search,$replace,$istr);
    $output = $this->runExec($istr);
    $this->addMessage(preg_replace("/[\n\r]/","",$istr));
    if(strlen($output['stdout']) > 5)
        $this->addMessage($output['stdout']);

    if($output['return'] != "0") {
        $this->addMessage("<font color='red'>!!! GOT ERRORS !!!");
        $this->addMessage($output['stderr']);
        $this->addMessage("</font>");

        return false;
    } else
        $this->addMessage("<font color='orange'>!!! EXEC SUCCESS !!!</font>");

    return true;
}

そして魅力のように働きます:)

于 2013-03-12T15:46:07.090 に答える