我编写了一个 PHP 脚本来更新 SVN 工作副本。
它在我的开发计算机(W2k3 服务器)上运行良好,但我无法让它在生产服务器(W2k8 服务器)上运行。我正在使用最新的 Collabnet Subversion 二进制文件 (1.6.17)。
这是 PHP 代码:
$command = 'svn update C:\inetpub\wwwroot\mysite --config-dir C:\Windows\Temp';
$response = array();
$handle = popen("$command 2>&1", 'r');
$read = '';
while( $read = fread( $handle, 20096 ) )
{
$response[] = $read;
}
pclose( $handle );
flush();
echo '<h2>Command</h2><p> ' . $command . '</p>';
echo '<h2>Response</h2><p>' . implode( '<br />', $response ) . '</p>';
当我从命令提示符运行相同的命令时,它工作正常。但是当我通过 IIS 运行它时,我得到:
svn: Can't open file 'C:\inetpub\wwwroot\mysite.svn\lock': Access is denied.
大概我需要提升权限,但我不知道如何实现它。
我尝试让 _IUSR 帐户完全控制包含 svn 的文件夹和 C:\inetpub\wwwroot\mysite.svn\文件夹,但这没有什么区别。
谢谢
最佳答案
SVN 和 Windows Server 2008 也遇到过类似的问题。该问题是由 UAC 内容引起的,该内容通常会阻止某人更改不拥有该文件的文件。就 SVN 而言,问题通常是由一名用户执行初始 checkout ,创建 .svn 文件夹和相关位。然后,另一个用户访问 svn up 并遇到了有关修改 SVN 数据库文件的操作系统级访问问题。
不幸的是,我们能找到的最佳解决办法是禁用 UAC。实际上解决了其他一些问题,并且它在服务器上确实有意义。如果它作为计划任务运行,那么您可以尝试“以最高权限运行”,但提升这么多对于网络应用程序来说没有什么意义。
关于php - 在 Windows 上从 PHP 更新 Subversion - 权限相关(访问被拒绝),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7611025/