我在 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-FPMexec
在svn
. 但是我怎样才能调试它并找出问题所在呢?
谢谢。
更新评论以使所有内容保持在一起: 尝试了 proc_open 方法,通过该方法仅运行“svn cleanup $path”失败并导致所有文件锁定。在终端的同一用户下运行相同的命令工作正常并再次解锁所有文件。
尝试了svn bin的完整路径,没有区别
运行“svn info $path”似乎工作正常,没有文件被锁定。以下命令在 php exec/proc_open 中都失败(没有任何错误消息或输出)并锁定应用程序文件:
- svn清理$路径
- svn 恢复 $path -R
"svn update $path" 返回 "Updating '$path'" 但停在那里,之前当前的内部版本号将在第二行返回。
我有第二个设置,使用不同的应用程序和 svn 服务器,但运行相同版本的操作系统和所有软件,这个运行正常。我认为这排除了软件。
我尝试将问题服务器回滚到 2 个月前运行时的版本,服务器在启动时会自动更新软件和应用程序,但不应该触及配置文件或缓存。在它可用后,它仍然显示相同的问题。相当肯定排除软件配置文件/缓存。
这仅留下了应用程序代码库和 svn 服务器作为可能的原因。接下来我将尝试重置 svn 服务器并重做 svn 项目。
更新 2: 在 SVN 服务器上重新创建项目,从应用服务器和所有 svn 配置目录中删除应用程序,从 SVN 服务器签出新项目(构建 1)。还是同样的错误。!_!
更新 3: 在完成上述所有操作后,我得出的结论是只留下了可能导致问题的文件库。事实上,由于文件名中有一些带有特殊字符的文件,SVN 会抛出“无法将字符串从本机编码转换为 'UTF-8':”错误。有趣的是,该错误仅在从 php-fpm 而不是在终端中运行时停止了进程。不知道为什么。我添加了 export LC_CTYPE=en_US.UTF-8; 到 exec 命令,现在它工作正常。
exec("export LC_CTYPE=en_US.UTF-8; svn update $path",$output);