1

PHP 内から SVN を更新する際に問題があります。正常に動作していましたが、数日前に突然動作しなくなりました。

Nginxを介してPHP-FPM 5.5を実行しています。SVN のバージョンは 1.8.8 です。

コード:

exec("svn cleanup $path");
exec("svn revert $path -R");
exec("svn update $path --accept theirs-full --non-interactive", $output, $return);
echo "Return: $return\nOutput: ".print_r($output, true)

出力:

Return: 1
Output: Array
(
)

これをターミナルで (PHP-FPM および Nginx と同じユーザーで) 実行すると、期待どおりの出力が得られます。

Updating '/path/to/app':
At revision 100

PHP CLI も正しい出力で動作します (PHP-FPM および Nginx と同じユーザーの下で):

php5 /path/to/app/svnupdate.php

これに基づいて、特にPHP5-FPM execonの問題のようですsvn。しかし、どうすればこれをデバッグして、何が悪いのかを理解できますか?

ありがとう。

すべてをまとめるためのコメントからの更新: proc_open アプローチを試してみましたが、それを介して "svn cleanup $path" のみを実行すると失敗し、すべてのファイルがロックされました。ターミナルで同じユーザーの下で同じコマンドを実行すると、正常に機能し、すべてのファイルのロックが再び解除されました。

svn bin へのフル パスを試しましたが、違いはありません

"svn info $path" の実行は正常に機能しているようで、ファイルはロックされていませんでした。次のコマンドはすべて php exec/proc_open で失敗し (エラー メッセージや出力なしで)、アプリ ファイルをロックします。

  • svn クリーンアップ $path
  • svn revert $path -R

「svn update $path」は「Updating '$path'」を返しますが、そこで停止します。以前は現在のビルド番号が 2 行目に返されていました。

別のアプリと svn サーバーを使用した 2 番目のセットアップがありますが、同じバージョンの OS とすべてのソフトウェアを実行しています。これは正常に動作しています。それはソフトウェアを除外すると思います。

問題のサーバーを 2 か月前に動作していたバージョンにロールバックしようとしました。サーバーは起動時にソフトウェアとアプリを自動的に更新しますが、構成ファイルやキャッシュに触れてはいけません。利用可能になった後も、同じ問題が表示されていました。ソフトウェア構成ファイル/キャッシュを除外することはかなり確実です。

考えられる原因として、アプリのコードベースとsvnサーバーのみが残ります。次にsvnサーバーをリセットして、svnプロジェクトをやり直してみます。

更新 2: SVN サーバーでプロジェクトを再作成し、アプリ サーバーとすべての svn 構成ディレクトリからアプリケーションを削除し、SVN サーバーから新しいプロジェクトをチェックアウトしました (ビルド 1)。それでも同じエラーです。!_!

更新 3: 上記のすべてを行った後、問題を引き起こしている可能性のあるファイル ベースのみが残っていると結論付けました。そして、ファイル名に特殊文字を含むいくつかのファイルが原因で、「文字列をネイティブエンコーディングから 'UTF-8' に変換できません:」というエラーが SVN によってスローされました。興味深いことに、このエラーは、ターミナルではなく php-fpm から実行しているときにのみプロセスを停止しました。理由がわからない。export LC_CTYPE=en_US.UTF-8; を追加しました。exec コマンドに追加すると、正常に動作するようになりました。

exec("export LC_CTYPE=en_US.UTF-8; svn update $path",$output);
4

3 に答える 3

1

終了ステータス(1) は、コマンドが何らかの理由で失敗したことを示します。理由を見つけるには、この回答proc_openに示されているように、関数を使用して標準エラーをキャプチャする必要があります。この関数は、標準出力のみをキャプチャします。exec

于 2016-12-06T02:25:07.153 に答える