这是我的目标:我有Windows XP电脑的所有源代码和发展数据库。让我们叫它"电脑。开发。XP".我有一个目的地的计算机,运行Linux。让我们叫它"电脑。演示。Linux"。这是我做了什么关于"电脑。开发。XP"(只是让你得到的上下文):

  • 安装的所有cygwin的东西
  • 创建一个有效的rsa密钥和把它的目标 备份的计算机,以便ssh不 要求一个密码
  • 可以工作得很好这种方式

如果我尝试这样做的"电脑。开发。XP"通过命令行:

cd \cygwin\bin
ssh Fred@pc.demo.Linux "cd /var/www && ls -al"

这个完美的作品,而不要求一个密码 现在,这里就是我想要做的"电脑。开发。XP":

  • 启动一个php script提取的开发。数据库入sql文件
  • zip这个文件
  • 转让通过ftp的"电脑。演示。Linux"
  • 登录到的"电脑。演示。Linux"和执行"解压然后mysql-e"源解压缩的文件"

如果我运行关于"电脑。开发。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"

如果我尝试exec()in php(*瓦姆普的办公室安装在"电脑。开发。XP")这些脚本,他们挂起。我敢肯定这是因为用户"系统"而不是"Fred",并腻子或ssh要求一个密码,但也许我是错误的。

无论如何我在寻找一种方法自动执行的那些4个任务我已经描述了我坚持因为exec()挂起。有没有问题safe_exec_mode或safe_exec_dir指令,他们是残疾人在开发计算机,因此exec()工作得很好如果我尝试一些基本的东西,如exec("迪尔")

任何想法什么我可以做/检查/否正确?

有帮助吗?

解决方案 3

这是我做了什么:一批文件:

  1. 呼叫php文件通过"php.exe my_extract_then_compress_then_ftp.php"
  2. 电话可以同步的源文件夹
  3. 调用的油灰-我用户pw密码-m file_with_ssh_commands_to_execute

它就像一个特色。

其他提示

我不知道如果这是你需要什么,但我通常使用的一个构造这样的数据库的同步跨越的机器:

php extractFromDb.php | ssh user@remote.com "mysql remoteDatabaseName"

这个执行PHP script当地和水管SQL命令脚本打印出通过SSH straigt入远程mysql过程,执行它们在远程数据库。

如果你需要压缩,既可以使用SSH的-C开关、或将使用压缩方案的选择,这样的:

php extractFromDb.php | gzip -9 | ssh user@remote.com "gunzip | mysql remoteDatabaseName"

你想这样做,从PHP下运行的阿帕奇,因为在我去 http://myWebserver.com/crazyScript.php 而这一切发生?或者你只是想要写你的脚本中PHP和调用它们通过cmd线?

如果你想第一个解决方案,尝试运行apache/国际空间站的下一个不同的用户有凭据来执行所有这些任务。

"如果我跑在开发的电脑手这个完美的作品。".为什么不做这样的吗?当你碰那个剧本,我想你在接连接到当地SSH服务器上的开发机。当你做这个,你正在使用的凭证,弗莱德,这么一切正常工作。当你run PHP script的,你是正确的,这可能是运行为的系统。

尝试改变用户apache运行为,或者使用php连接到当地ssh从而使用其他凭据。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top