【问题标题】:Copy Files from one machine to other using php使用php将文件从一台机器复制到另一台机器
【发布时间】:2016-08-13 07:25:54
【问题描述】:

我已经设置了 2 台 Ubuntu 机器:192.168.1.104 和 192.168.1.105 在两台机器上都安装了 ssh,在 104 机器上生成了ssh-keygen,并为这两个 IP 地址添加了密钥。

我想通过php将文件从一个192.168.1.104复制到192.168.1.105。 我试过这个命令scp /home/tejas/hadoop/conf/core-site.xml tejas@192.168.1.105:/home/tejas/hadoop/conf/core-site.xml 通过 shell 脚本文件被完美复制但是当我通过 php-script 运行相同的命令时

<?php $output = shell_exec('scp /home/tejas/hadoop/conf/core-site.xml tejas@192.168.1.105:/home/tejas/hadoop/conf/core-site.xml'); ?>

它没有显示任何错误,但文件没有被复制。还尝试了与 exec() 类似的尝试,还尝试了 rysnc 而不是 scp rsync -avzh /home/tejas/hadoop/conf/mapred-site.xml tejas@192.168.1.105:/home/tejas/hadoop/conf/mapred-site.xml 仍然没有运气。

这两个命令都可以通过 shell 脚本完美运行,但不能通过 php 运行

我检查了 php 没有处于安全模式,并且 shell_exec() 或 exec() 在 php.ini 中没有被禁用

【问题讨论】:

    标签: php hadoop ssh rsync scp


    【解决方案1】:

    exec()shell_exec() 由运行 php 脚本的用户执行(在 Ubuntu 上通常是 www-data,但可能是 apache 或其他)。该用户可能没有文件/文件夹的权限。一种解决方案是创建一个新用户组并将用户 (www-data) 添加到该组,然后对要复制/被复制到的文件/文件夹设置适当的所有权/权限。

    【讨论】:

    • 将尝试发布结果
    • 完成 sudo adduser tejas , sudo useradd -d /var/www -G www-data tejas 并赋予文件适当的所有权仍然不起作用
    • 主要问题如果 shell 脚本包含像 ls 这样的任何命令,那么它可以完美运行。我只在将一个文件从一台机器复制到另一台机器时才工作
    • 有时将错误输出转储到文件会有所帮助。在您的exec 命令中,使用类似exec('scp src dest &gt; /tmp/output 2&gt;&amp;1'); 的内容,然后在执行脚本的机器上的终端中运行脚本检查cat /tmp/output。它可以帮助您找出问题所在。
    • 它显示以下错误Host key verification failed. lost connection
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多