这是我的目标:我有一台包含所有源代码的 Windows XP PC 和一个开发数据库。我们称之为“pc.dev.XP”。我有一台运行 Linux 的目标计算机。我们称之为“pc.demo.Linux”。这是我在“pc.dev.XP”上所做的(只是为了让你了解上下文):
- 安装了所有 cygwin 的东西
- 创建了一个有效的 rsa 密钥并将其放在 dest 备份计算机上,这样 ssh 就不会要求输入密码
- rsync 这样工作得很好
如果我尝试通过命令行在“pc.dev.XP”上执行此操作:
cd \cygwin\bin
ssh Fred@pc.demo.Linux "cd /var/www && ls -al"
无需询问密码即可完美运行现在这是我想在“pc.dev.XP”上执行的操作:
- 启动一个提取开发的 php 脚本。数据库到一个sql文件
- 压缩这个文件
- 通过 ftp 将其传输到“pc.demo.Linux”
- 登录到“pc.demo.Linux”并执行“unzip then mysql -e”source unzipped file”
如果我手动在“pc.dev.XP”上运行:
putty -load "myconf" -l Fred -pw XXX -m script.file.that.unzip.and.integrates.sql
这完美地工作。同样适用于:
cd \cygwin\bin
ssh Fred@dest "cd /var/www && ls -al"
如果我尝试在 php 中执行()(安装在“pc.dev.XP”上的 wamp),它们会挂起。我很确定这是因为用户是“SYSTEM”而不是“Fred”,并且 putty 或 ssh 要求输入密码,但也许我错了。
无论如何,我正在寻找一种方法来自动化我所描述的这 4 个任务,但我被卡住了,因为 exec() 挂起。safe_exec_mode 或 safe_exec_dir 指令没有问题,它们在开发机器上被禁用,因此如果我尝试一些基本的东西,比如 exec("dir") exec() 工作得很好
知道我能做什么/检查/纠正吗?