【问题标题】:ssh2_scp_send not accepting array variable more than 9ssh2_scp_send 不接受超过 9 的数组变量
【发布时间】:2021-12-31 06:54:05
【问题描述】:

这是我的 php 脚本,当我扫描目录并将其存储在数组中时,我正在尝试使用 SSH 将照片上传到其他服务器。

然后我尝试在终端中运行直到索引 9 正确上传,当索引到达 10 时出现问题.......................... ..................................................... ..................................................... ......

$username = 'root';
$password = 'Workflow#5992$';

$connection = ssh2_connect($host, 22);


ssh2_auth_password($connection, $username, $password);

$sftp = ssh2_sftp($connection);



// Specifying directory
$mydir = '/var/www/html/AcadWFReport/photos';

// Scanning files in a given directory in ascending order
$myfiles = scandir($mydir);

// Displaying the files in the directory
print_r($myfiles);


$c = count($myfiles);
//print_r($c);

for ($i = 2; $i < $c; $i++){    
$fname= substr($myfiles[$i],0,8); 
$ext= substr($myfiles[$i],9,3);
$b= substr($myfiles[$i],2,2);
$batch=20 . $b ;
$pid= substr($myfiles[$i],4,1);
$pname=$myfiles[$i];

$result1=ssh2_sftp_mkdir($sftp, '/var/www/html/Dev/File_upload/doc/byroll/'.$batch.'');
$result2=ssh2_sftp_mkdir($sftp, '/var/www/html/Dev/File_upload/doc/byroll/'.$batch.'/'.$pid.'');

$local_file = '/var/www/html/AcadWFReport/photos/'.$pname.'';
$remote_file = '/var/www/html/Dev/File_upload/doc/byroll/'.$batch.'/'.$pid.'/'.$pname.'';






echo 'Uploading...'.$pname.''.$i.''."\n";

$stream = file_exists("ssh2.sftp://$connection/var/www/html/Dev/File_upload/doc/byroll/".$batch."/".$pid."/".$pname."");
if($stream){
    
    echo "File already Exits";
    $new_name= $fname.'_'.date('dmY').'.'.$ext;

    ssh2_sftp_rename($sftp, '/var/www/html/Dev/File_upload/doc/byroll/'.$batch.'/'.$pid.'/'.$pname.'', '/var/www/html/Dev/File_upload/doc/byroll/'.$batch.'/'.$pid.'/'.$new_name.'');
}

$result = ssh2_scp_send($connection, $local_file, $remote_file, 0644);

if(!$result) {
    echo 'Error while uploading';
    
}
else{

echo 'Uploaded successfully!'."\n";

}
}

我的输出是 下面

[root@localhost AcadWFReport]# php transfer.php
Array
(
    [0] => .
    [1] => ..
    [2] => ME18S010.JPG
    [3] => MM17S001.JPG
    [4] => MS12B043.JPG
    [5] => MS15F001.JPG
    [6] => MS16D003.JPG
    [7] => MS19S034.JPG
    [8] => MS20B036.JPG
    [9] => MS21D003.JPG
    [10] => MS21W002.JPG
    [11] => MS21W004.JPG
    [12] => MS21W005.JPG
    [13] => MS21W007.JPG
    [14] => MS21W008.JPG
    [15] => MS21W009.JPG
    [16] => MS21W010.JPG
    [17] => MS21W011.JPG
    [18] => MS21W012.JPG
    [19] => MS21W014.JPG
)
Uploading...ME18S010.JPG2
File already ExitsUploaded successfully!
Uploading...MM17S001.JPG3
File already ExitsUploaded successfully!
Uploading...MS12B043.JPG4
File already ExitsUploaded successfully!
Uploading...MS15F001.JPG5
File already ExitsUploaded successfully!
Uploading...MS16D003.JPG6
File already ExitsUploaded successfully!
Uploading...MS19S034.JPG7
File already ExitsUploaded successfully!
Uploading...MS20B036.JPG8
File already ExitsUploaded successfully!
Uploading...MS21D003.JPG9
File already ExitsUploaded successfully!
Uploading...MS21W002.JPG10
File already ExitsPHP Warning:  ssh2_scp_send(): Failure creating remote file: Channel open failure (connect failed) (-21) in /var/www/html/AcadWFReport/transfer.php on line 60
Error while uploadingUploading...MS21W004.JPG11
PHP Warning:  ssh2_scp_send(): Failure creating remote file: Channel open failure (connect failed) (-21) in /var/www/html/AcadWFReport/transfer.php on line 60
Error while uploadingUploading...MS21W005.JPG12
PHP Warning:  ssh2_scp_send(): Failure creating remote file: Channel open failure (connect failed) (-21) in /var/www/html/AcadWFReport/transfer.php on line 60
Error while uploadingUploading...MS21W007.JPG13
PHP Warning:  ssh2_scp_send(): Failure creating remote file: Channel open failure (connect failed) (-21) in /var/www/html/AcadWFReport/transfer.php on line 60
Error while uploadingUploading...MS21W008.JPG14
PHP Warning:  ssh2_scp_send(): Failure creating remote file: Channel open failure (connect failed) (-21) in /var/www/html/AcadWFReport/transfer.php on line 60
Error while uploadingUploading...MS21W009.JPG15
PHP Warning:  ssh2_scp_send(): Failure creating remote file: Channel open failure (connect failed) (-21) in /var/www/html/AcadWFReport/transfer.php on line 60
Error while uploadingUploading...MS21W010.JPG16
PHP Warning:  ssh2_scp_send(): Failure creating remote file: Channel open failure (connect failed) (-21) in /var/www/html/AcadWFReport/transfer.php on line 60
Error while uploadingUploading...MS21W011.JPG17
PHP Warning:  ssh2_scp_send(): Failure creating remote file: Channel open failure (connect failed) (-21) in /var/www/html/AcadWFReport/transfer.php on line 60
Error while uploadingUploading...MS21W012.JPG18
PHP Warning:  ssh2_scp_send(): Failure creating remote file: Channel open failure (connect failed) (-21) in /var/www/html/AcadWFReport/transfer.php on line 60
Error while uploadingUploading...MS21W014.JPG19
PHP Warning:  ssh2_scp_send(): Failure creating remote file: Channel open failure (connect failed) (-21) in /var/www/html/AcadWFReport/transfer.php on line 60 ```

and after index 9 it not allowing any double digit number to it 

【问题讨论】:

  • 您可能遇到了限制,因为某些东西没有正确关闭连接。在花了很多很多小时修复奇怪的边缘情况错误并处理“它在我的机器上工作”之后,每当我需要 SSH、SCP 或 SFTP 时,我总是去phpseclib,我会鼓励你也这样做。它有SCP support 和通常更好的错误消息。我并不是说你的方法是错误的,只是说这是我的首选工具,到目前为止,我每次使用它时“都能正常工作”。
  • 似乎问题不在于数组变量,它似乎与限制或缓冲时间有关.....

标签: php linux


【解决方案1】:

您启动 SFTP 会话 (ssh2_sftp),而稍后您使用 SCP 进行实际传输 (ssh2_scp_send)。您绝对不需要 ssh2_sftp 行;它实际上可能是您的问题的原因。 虽然从技术上讲,可以通过一个 SSH 连接同时进行 SFTP 和 SCP 会话,但我不希望 PHP 支持这一点。虽然我不确定。

我在我的代码中注释了 SFTP 部分并通过 ssh2 上传了 50 多个文件

所有 57 个文件都已从本地服务器移动到远程服务器,并且运行良好

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-25
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 1970-01-01
    • 2019-09-07
    • 1970-01-01
    相关资源
    最近更新 更多