Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过浏览器从php脚本调用svn更新不起作用_Php_Svn_Shell_Browser - Fatal编程技术网

通过浏览器从php脚本调用svn更新不起作用

通过浏览器从php脚本调用svn更新不起作用,php,svn,shell,browser,Php,Svn,Shell,Browser,我有两个脚本 运行更新并调用shell_exec(“svn更新”)和shell_exec(“svn st”) 运行mysqldump shell_exec('mysqldump params') svn脚本未运行update命令,svn st正在打印结果,而不是svn update 我试图在调用svn update eg时声明参数 “svn更新”。迪尔。”--用户名myuser——密码mypasswd——非交互式'; --还是没什么 和大多数的情妇一起玩 如果这与二进制文件/权限/组有关,我看不

我有两个脚本

  • 运行更新并调用shell_exec(“svn更新”)和shell_exec(“svn st”)
  • 运行mysqldump shell_exec('mysqldump params')
  • svn脚本未运行update命令,
    svn st
    正在打印结果,而不是
    svn update

    我试图在调用svn update eg时声明参数 “svn更新”。迪尔。”--用户名myuser——密码mypasswd——非交互式'; --还是没什么 和大多数的情妇一起玩

    如果这与二进制文件/权限/组有关,我看不到它。 mysqldump命令工作正常,正在生成一个文件,那么为什么svn不更新文件系统呢

    请不要建议在PHP中使用核心SVN类。这不是一个选项,我无法完全控制服务器,并且模块不可用

    谢谢你的帮助

    -hbt


    附言:这里要提到的重要事项。当通过命令行调用时,脚本可以工作。只有通过web浏览器调用时才会失败。

    这可能是权限问题:通过web浏览器调用的脚本在不同于svn工作目录所有者的用户名下运行,因此它具有只读访问权限。只读访问应该足以执行
    svn status
    ,但不足以执行
    svn update
    (尽管在这种情况下会出现类似“svn:无法打开文件”.svn/lock:权限被拒绝”这样的错误)。

    您是否尝试了该操作?您不需要为此使用
    shell\u exec

    好的。我得到了它。 这是一个权限问题。.svn目录必须具有正确的权限,因为svn update命令正在使用这些目录编写内容

    所以! ---确保以sudo或root的身份运行所有chmod命令----

  • 在.svn目录下运行chmod 777
  • 通过命令行运行svn更新
  • 调用脚本
  • 如果没有。必须对所有.svn目录递归运行chmod 777,然后运行另一个svn更新

    还是没什么

    确保没有两个svn客户端 在我的例子中,UI使用的svn客户端与svn(命令行)不同 如果您有两个客户端,请确保它们运行的版本相同 或者更新脚本以直接调用客户端

    还是没什么

    运行chmod 777-R* svn更新 然后再试一次

    如果您可以使用另一组权限使其工作,请告诉我。我知道777并不理想,但我不能让它与更低的东西一起工作


    再次感谢各位。

    要获取返回值中的标准错误,请使用:

    shell_exec('2>&1 svn update')
    

    如果您将
    2>&1
    放在末尾,它将不起作用

    是的,问题是.svn目录的权限


    确保它对运行PHP的用户具有正确的权限(在我的例子中是apache),并将其设置为775。

    我也遇到了同样的问题,但权限都没有解决它

    根据这里的一些其他建议,我做到了:

    <?php
    echo shell_exec('2>&1 svn update /path/to/checked/out/directory/ --non-interactive');
    
    不确定我的web服务器用户为何尝试访问/root,但我通过在svn up命令中添加--config dir,在不更改任何权限的情况下修复了该问题:

    <?php
    echo shell_exec('2>&1 svn update /path/to/checked/out/directory/ --non-interactive --config-dir /path/to/my/home/.subversion');
    

    从web浏览器调用
    shell\u exec('svn update')
    的结果时,您确定结果为空吗?很可能是权限问题(svn工作目录和http进程的不同用户),但在这种情况下,应该会出现类似“svn:无法打开文件”.svn/lock:权限被拒绝”的错误。您是否已尝试捕获输出并将其转储到屏幕上/调试时查看输出?例如,
    $output=shell_exec('svn update…');打印(输出)。您确定没有忘记将文件夹作为变量引用(因为给出的示例包含dir而不是$dir,当然,除非dir被定义为命名常量)。@alexander确实具有权限。它是.svn目录。svn update命令正在尝试在其中写入内容。谢谢你的帮助help@wimvds是的,这个例子是即时编写的。对于
    exec
    命令,print\r返回空,对于
    shell\u exec
    命令,var\u dump返回空。不过我想出来了。把答案贴在下面。谢谢你的帮助,我找到了另一种工作顺利的方法。很遗憾,服务器上没有svn扩展。没有错误,但已通过权限修复。把答案贴在下面。谢谢
    <?php
    echo shell_exec('2>&1 svn update /path/to/checked/out/directory/ --non-interactive --config-dir /path/to/my/home/.subversion');