Php ssh2#u scp#u send仅在windows上工作,但不';t在linux上复制到amazon.com

Php ssh2#u scp#u send仅在windows上工作,但不';t在linux上复制到amazon.com,php,amazon,ssh2-sftp,Php,Amazon,Ssh2 Sftp,我有一个小脚本,可以通过php的ssh2库复制文件。 我在windows上尝试了不同版本的php,它可以正常工作,但是当我在Linux上上传代码时,它无法复制文件 请注意,php代码相同,php版本相同。 我没有收到任何错误消息。我在预设文件权限期间使用此命令。在此之前,我尝试使用fopen、fwrite和sftp,但在复制文件后未能对其进行chmod 以下是代码(如果有问题): php-i命令返回的一些行: Registered PHP Streams => https, ftps, c

我有一个小脚本,可以通过php的ssh2库复制文件。 我在windows上尝试了不同版本的php,它可以正常工作,但是当我在Linux上上传代码时,它无法复制文件

请注意,php代码相同,php版本相同。 我没有收到任何错误消息。我在预设文件权限期间使用此命令。在此之前,我尝试使用fopen、fwrite和sftp,但在复制文件后未能对其进行chmod

以下是代码(如果有问题):

php-i命令返回的一些行:

Registered PHP Streams => https, ftps, compress.zlib, compress.bzip2, php, file, data,
               http, ftp, ssh2.shell, ssh2.exec, ssh2.tunnel, ssh2.scp, ssh2.sftp, zip
Registered Stream Socket Transports => tcp, udp, unix, udg, ssl, sslv3, sslv2, tls
...
ssh2
libssh2 version => 1.2.9
banner => SSH-2.0-libssh2_1.2.9
...
Stream Wrapper support => compress.zlib://
zlib.output_compression => Off => Off
zlib.output_compression_level => -1 => -1
编辑:

我只是尝试使用fopen/fwrite/fclose代替ssh\u scp\u send,得到了相同的结果。我完全糊涂了。以下是文件上载的代码:

$targetHandler = fopen("ssh2.sftp://".$this->sftp."/".$this->ftpProps['ftpDestPath'].$targetFileName, 'w');
        if (empty($targetHandler)) {
            $result['errorMsg'] = 'Failed to open '.$targetFileName;
            return $result;
        }
        $sourceHandler = @fopen($sourceFileName, "r");
        while (!feof($sourceHandler)) {
            $readBlock = fread($sourceHandler, 16384);
            $resultWrite = fwrite($targetHandler, $readBlock);
            if ($resultWrite === false) {
                $result['errorMsg'] = 'Failed to upload '.$targetFileName;
                fclose($targetHandler);
                fclose($sourceHandler);
                return $result;
            }
        }

        $chmodResult = ssh2_sftp_chmod($this->sftp, $this->ftpProps['destPath'].$targetFileName, 0755);
        if (empty($chmodResult)) {
            $result['errorMsg'] = 'Failed to chmod '.$targetFileName;
            return $result;
        }
谢谢

编辑2: 这似乎是亚马逊sftp的具体问题。我在另一台服务器上试过这个,它在两个平台上都能工作。我首先想到的是知识产权的某种保护。你怎么认为?
amazon sftp服务器位于:productads.amazon digital ftp.com

看起来SSH2库有两个先决条件,您是否验证Linux box是否满足这些先决条件


我找到了脚本这种行为的原因。 它是ssh2库版本。在我的本地主机和一台linux服务器上,它是SSH-2.0-libssh2_1.4.3。在有问题的机器上,库的版本是SSH-2.0-libssh2_1.2.9。看来这是一个库错误

我把这篇文章留给那些使用这个库并且不想更改代码的人


谢谢您的时间。

Hm,我的连接功能在两种平台上都可以使用。如果你是对的,我想我无法通过ssh2连接,可以吗?嗯,那是一个humdinger。。。PHP错误日志中没有记录任何错误?是的。日志中没有关于ssh错误的任何线索。请参阅我编辑的问题
Registered PHP Streams => https, ftps, compress.zlib, compress.bzip2, php, file, data,
               http, ftp, ssh2.shell, ssh2.exec, ssh2.tunnel, ssh2.scp, ssh2.sftp, zip
Registered Stream Socket Transports => tcp, udp, unix, udg, ssl, sslv3, sslv2, tls
...
ssh2
libssh2 version => 1.2.9
banner => SSH-2.0-libssh2_1.2.9
...
Stream Wrapper support => compress.zlib://
zlib.output_compression => Off => Off
zlib.output_compression_level => -1 => -1
$targetHandler = fopen("ssh2.sftp://".$this->sftp."/".$this->ftpProps['ftpDestPath'].$targetFileName, 'w');
        if (empty($targetHandler)) {
            $result['errorMsg'] = 'Failed to open '.$targetFileName;
            return $result;
        }
        $sourceHandler = @fopen($sourceFileName, "r");
        while (!feof($sourceHandler)) {
            $readBlock = fread($sourceHandler, 16384);
            $resultWrite = fwrite($targetHandler, $readBlock);
            if ($resultWrite === false) {
                $result['errorMsg'] = 'Failed to upload '.$targetFileName;
                fclose($targetHandler);
                fclose($sourceHandler);
                return $result;
            }
        }

        $chmodResult = ssh2_sftp_chmod($this->sftp, $this->ftpProps['destPath'].$targetFileName, 0755);
        if (empty($chmodResult)) {
            $result['errorMsg'] = 'Failed to chmod '.$targetFileName;
            return $result;
        }