SVN提交命令行与php中变量内的路径

Posted

技术标签:

【中文标题】SVN提交命令行与php中变量内的路径【英文标题】:SVN commit command line with path inside a variable in php 【发布时间】:2017-12-22 08:30:58 【问题描述】:

我需要创建一个使用 SVN 命令行的网络应用程序。所以我想使用一个带有 svn commit 的 exec 命令,一个变量包含工作副本的路径。我试过这段代码但没有用。提交没有发生。

<?php
$lpath="c:\a\svn\projectwc";
$msg="first commit";
exec("svn commit -m $msg $lpath");
?>

是的,我已经在里面添加了所有文件。我尝试用路径值替换 lpath 并且它有效。 请帮忙...

【问题讨论】:

定义“没用”。 未显示错误但未发生提交。 【参考方案1】:

你的字符串扩展为

svn commit -m first commit c:\a\svn\projectwc

而你需要这样做

svn commit -m "first commit" c:\a\svn\projectwc

由于日志消息不止一个单词,因此需要用引号引起来。

我认为您应该重新考虑您要在这里实现的目标。根据用户输入构造字符串并将它们传递给exec 从安全角度来看是一个非常糟糕的主意。

您还标记了帖子 tortoise-svn - 如果您从命令行调用 TSVN,它会弹出绝对不适合服务器端的 GUI。

那么您还有其他考虑因素,例如:

出现问题时如何记录错误消息 Web 服务器是否有足够的权限访问工作副本来执行这些操作 是否可以在您的环境中调用“svn”。

无论您尝试做什么,很可能已经有一些免费软件可以做到这一点。 svn 有一个 webdav 接口和一个以多种语言实现的 API - 这将比使用 exec

安全

【讨论】:

如果我直接指定路径,则提交有效,但在我使用变量时无效。还有那个界面,PHP中有一个SVN的pecl扩展,但问题是处理请求并将其安装到系统中大约需要2或3天。(我在一家软件公司做,所以他们有防火墙和所有那些东西)。但要在此之前完成它,我使用命令行 SVN。而且它是一个学校项目,所以我不会担心安全问题。 将命令分配给变量,例如$cmd = "svn commit -m \"$msg\" $lpath";。检查它看起来是否正常:echo $cmd; 另请参阅我在此处为您的提交消息添加了引号。

以上是关于SVN提交命令行与php中变量内的路径的主要内容,如果未能解决你的问题,请参考以下文章

svn 命令行使用总结

确定 PHP 脚本的命令行与 http 执行的规范方法是啥?

如何将 Windows 路径转换为文件:URL,在批处理文件中,适合 SVN 命令行使用

《Linux命令行与shell脚本编程大全》 第六章环境变量

svn命令 行如何把已经删除的文件提交上去?

svn commit 命令,只要提交一个文件怎么办?