Php 在Windows&;上通过Web表单更新SVN;Linux机器
我已经为此工作了一段时间,但我找不到解决方案(如果有) 因此,问题是:有没有办法通过HTML web表单执行Php 在Windows&;上通过Web表单更新SVN;Linux机器,php,svn,Php,Svn,我已经为此工作了一段时间,但我找不到解决方案(如果有) 因此,问题是:有没有办法通过HTML web表单执行svn更新请求? 我已经测试了多个基于web的SVN客户端(包括构建自己的客户端),但它们都不可能进行更新 我知道这是PHP使用的用户权限的问题,但即使我将系统上的所有文件设置为777(在虚拟机上尝试过),我仍然无法将其存档 有人有这方面的经验吗 已经谢谢你了 我还浏览了所有目录,并将owner设置为具有完全访问权限的everybody。现在不可能有权限问题了。。。我想 上次编辑: 如果脚
svn更新
请求?
我已经测试了多个基于web的SVN客户端(包括构建自己的客户端),但它们都不可能进行更新
我知道这是PHP使用的用户权限的问题,但即使我将系统上的所有文件设置为777
(在虚拟机上尝试过),我仍然无法将其存档
有人有这方面的经验吗
已经谢谢你了
我还浏览了所有目录,并将owner设置为具有完全访问权限的everybody
。现在不可能有权限问题了。。。我想
上次编辑:
如果脚本文件不在SVN目录的根目录中,我似乎无法执行SVN。最后的代码如下所示:您正在构建一个持续集成服务器吗?为什么要让任何Joe Bloggs更新您的本地存储库 后端必须有一些代码才能在shell中执行“svn更新”
通常,基于web的SVN客户端将直接输入SVN存储库,并且默认情况下是最新的-它甚至可以让您查看以前的版本和差异。以下功能或多或少可以为您完成此操作。它还打印出:
函数updatesvn(){
国际单项体育联合会(国际单项体育联合会){
//从请求参数获取svn用户名和密码
$username=;
$password=;
//获取要移动到的版本号
$values=$\u POST;
$version=$values['revision'];
//验证版本号
//签出项目的路径
$rpath='/var/www/myproj';
//命令以更新svn
$cmd=“cd$rpath;svn cleanup;svn--非交互式--用户名$username--密码$password update-r$version 2>&1”;
echo$cmd;
$out=shell_exec($cmd);
回音$out;
}
}
编辑:谨防此代码中的安全漏洞。我在这里简化了它。我们在其中一个应用程序中使用了它,其中达到这一点的用户被预先认证为web应用程序的Admin
用户。此外,此代码是在MVC框架中执行的,在控制器中执行操作之前,输入验证在中心位置完成。您可以从PECL svn扩展使用(或和命令行svn-实际上没有太大区别)
对于权限问题,我更喜欢的解决方案是为所有要更新的用户(包括
www-data
或您的Web服务器用户)设置umask002
,将他们放入一个公共phpuser
组,为工作副本的根目录设置该组(chgrp-phpuser
-在签出之前!),确保它是组可写的(chmod g+rwx
),并将其设置为setgid(chmod g+s
),但如果您不关心保存文件权限,那么肯定chmod-R 777
要简单得多。我不需要它是最新的默认设置。我希望我的网站可以在任何时候更新到任何版本,并且只在我需要的时候更新。您正在将用户输入直接传递到PHP命令行!您的脚本不验证用户输入,允许用户在服务器上执行任何命令。@OzairKafray好的,我终于有时间测试了:cd c:\data\mysite.com\;svn清理;svn--非交互式--用户名--密码更新-R6
给我系统找不到指定的路径。
好,我编辑了行。当我在CLI上执行它时,它工作得非常好,但当它作为php脚本在test.php
站点中运行时,它不会给出任何输出,也不会做任何事情。这是目前的情况:@dainisaols如果用户名和密码文件是空的,正如我在所附代码中看到的,请删除--username和--password字符串。我只是在发布之前删除了这些信息:)有一个密码和一个用户名。从您在下面发布的评论中:“我不需要它是最新的。我希望有可能在任何时候更新我的网站,以任何修订,只有当我需要它。“如果是这种情况,那么表单和SVN工作副本应该具有所有相同的权限,因为它们都被Apache用户访问,不是吗?除非您没有为文件设置正确的所有者。1.我不确定是否要使用这样写的内容:“此函数是实验性的。此函数的行为、名称和周围文档可能会在未来的PHP版本中更改,恕不另行通知。使用此函数的风险由您自行承担。”。正如我已经说过的,权限设置为Everyone
w/full-access.@DainisAbols:我使用SVN:PHP没有任何问题。如果我下次更新PHP时需要做一些细微的更改(通常一年一次或两次),我可以接受。我不会在生产中使用它,但我无法想象为什么我会从生产代码中调用SVN。至于权限,向每个人授予所有权限并没有那么好(这是不安全的,如果使用工作副本进行提交,可能会弄乱SVN中存储的权限标志),因此我试图解释如何做得更好。当然,这只有在你解决了最初的问题后才有意义。
function updatesvn() {
if ( isset($_POST) ) {
//Get svn username and password from request parameters
$username = <your_svn_username>;
$password = <your_svn_password>;
//Get version number to move to
$values = $_POST;
$version = $values['revision'];
//validate version number
//Path where you have checked out your project
$rpath = '/var/www/myproj';
//Command to svn update
$cmd = "cd $rpath; svn cleanup; svn --non-interactive --username $username --password $password update -r $version 2>&1";
echo $cmd;
$out = shell_exec($cmd);
echo $out;
}
}