可以连接但不能通过 SFTP 写入
Can connect but cannot write via SFTP
我正在尝试通过 SFTP 写入内容,但发生了一些奇怪的事情。
这是一个通用示例脚本:
<?php
$resConnection = ssh2_connect("<url>");
if (ssh2_auth_password($resConnection, "<name>", '<password>')){
//Initialize SFTP subsystem
echo "connected";
$resSFTP = ssh2_sftp($resConnection);
$resFile = fopen("ssh2.sftp://{$resSFTP}/"."test", 'w');
fwrite($resFile, "Testing");
fclose($resFile);
} else {
echo "Unable to authenticate on server";
}
它的输出是这样的:
root@0fb6a2a1af08:/var/www# php test.php
connected
Warning: fopen(ssh2.sftp://Resource id #5/test): failed to open stream: operation failed in /var/www/test.php on line 8
Warning: fwrite() expects parameter 1 to be resource, boolean given in /var/www/test.php on line 9
Warning: fclose() expects parameter 1 to be resource, boolean given in /var/www/test.php on line 10
所以基本上它连接但不能写任何东西。具有相同凭据的相同代码在另一台机器上运行良好。
是否有可能是 SFTP 端的某些特定配置阻止了我写入?
好的,它与这个错误有关:
目前的解决方案是在资源字符串周围使用 intval
,如文档中所述:https://www.php.net/manual/ru/function.ssh2-sftp.php
$stream = fopen('ssh2.sftp://' . intval($sftp) . '/path/to/file', 'r');
我正在尝试通过 SFTP 写入内容,但发生了一些奇怪的事情。
这是一个通用示例脚本:
<?php
$resConnection = ssh2_connect("<url>");
if (ssh2_auth_password($resConnection, "<name>", '<password>')){
//Initialize SFTP subsystem
echo "connected";
$resSFTP = ssh2_sftp($resConnection);
$resFile = fopen("ssh2.sftp://{$resSFTP}/"."test", 'w');
fwrite($resFile, "Testing");
fclose($resFile);
} else {
echo "Unable to authenticate on server";
}
它的输出是这样的:
root@0fb6a2a1af08:/var/www# php test.php
connected
Warning: fopen(ssh2.sftp://Resource id #5/test): failed to open stream: operation failed in /var/www/test.php on line 8
Warning: fwrite() expects parameter 1 to be resource, boolean given in /var/www/test.php on line 9
Warning: fclose() expects parameter 1 to be resource, boolean given in /var/www/test.php on line 10
所以基本上它连接但不能写任何东西。具有相同凭据的相同代码在另一台机器上运行良好。
是否有可能是 SFTP 端的某些特定配置阻止了我写入?
好的,它与这个错误有关:
目前的解决方案是在资源字符串周围使用 intval
,如文档中所述:https://www.php.net/manual/ru/function.ssh2-sftp.php
$stream = fopen('ssh2.sftp://' . intval($sftp) . '/path/to/file', 'r');