php fopen与ssh2.sftp失败的特殊字符

时间:2015-02-12 19:09:29

标签: special-characters fopen

以下工作正常

$stream = fopen($connection_string . "/var/tmp/test.test", 'r');

但是

$stream = fopen($connection_string . "/var/tmp/test.#test", 'r');

失败并显示错误消息: 警告:fopen():无法打开ssh2.sftp://资源ID#108 / var / tmp / test。#test在远程主机上...

test.test和test #test工作正常,只有测试组合。#test失败。

ssh2_scp_recv()处理测试。#test就好了。

CentOS 5.8版(最终版) PHP 5.2.17

这是一个php bug吗?或者需要一些特殊字符转义?

1 个答案:

答案 0 :(得分:2)

了解它与phpseclib的效果会很有趣。例如

<?php
include('Net/SFTP.php');

$sftp = new Net_SFTP('www.domain.tld');
if (!$sftp->login('username', 'password')) {
    exit('Login Failed');
}

// outputs the contents of filename.remote to the screen
echo $sftp->get('filename.remote');
// copies filename.remote to filename.local from the SFTP server
$sftp->get('filename.remote', 'filename.local');
?>

src:http://phpseclib.sourceforge.net/sftp/examples.html#get

如果phpseclib不起作用,您可以使用phpseclib启用日志记录,并查看phpseclib日志所说的内容。例如。在您添加define('NET_SSH2_LOGGING', NET_SSH2_LOG_COMPLEX);之后执行Net/SFTP.php,然后在尝试下载文件后执行$sftp->getLog()