【发布时间】: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 和通常更好的错误消息。我并不是说你的方法是错误的,只是说这是我的首选工具,到目前为止,我每次使用它时“都能正常工作”。
-
似乎问题不在于数组变量,它似乎与限制或缓冲时间有关.....