【发布时间】:2011-02-26 05:33:27
【问题描述】:
我有两个脚本。
- 运行更新并调用 shell_exec('svn update') 和 shell_exec('svn st')
- 运行 mysqldump shell_exec('mysqldump params')
svn 脚本没有运行更新命令,svn st 正在打印结果但不是svn update
我尝试在调用 svn update 时声明参数,例如 'svn 更新' 。目录' --username myuser --password mypasswd --non-interactive'; - 依然没有 玩了大部分的参数
如果这与二进制文件/权限/组有关,我看不到。 mysqldump 命令运行良好,并且正在生成文件,那么为什么 svn 不更新文件系统?
请不要建议在 PHP 中使用核心 SVN 类。这不是一个选项,我无法完全控制服务器并且该模块不可用。
感谢您的帮助,
-hbt
PS:这里要提一下重要。当通过命令行调用时,脚本工作。只有在通过网络浏览器调用时才会失败。
【问题讨论】:
-
你确定从浏览器调用
shell_exec('svn update')的结果是空的吗?很可能是权限问题(svn 工作目录和 http 进程的用户不同),但在这种情况下应该会出现类似“svn: Can't open file '.svn/lock': Permission denied”的错误。 -
您是否已经尝试过捕获输出并将其转储到屏幕/调试时查看输出? IE。
$output = shell_exec('svn update ...'); print_r($output);。您确定您没有忘记将文件夹作为变量引用吗(因为给出的示例包含 dir 而不是 $dir,除非 dir 当然被定义为命名常量)。 -
@alexander 确实获得了许可。它是 .svn 目录。 svn update 命令正在尝试在其中写入内容。感谢您的帮助
-
@wimvds 是的,示例是即时编写的。 print_r 为
exec命令返回空, var_dump 为shell_exec命令返回空。不过我想通了。下面贴出答案。感谢您的帮助 -
我找到了另一种运行顺畅的方法。 stackoverflow.com/a/8532448/2805783