使用 sftp 和 ssh2 在 fopen 上出现分段错误
我有一个在 AWS 上运行的 php 系统和一个使用 shh2 和 sftp 在外部服务器上上传 xlsx 文件的类.这段代码运行良好,直到上次升级 aws 包 openssh-clients-6.6.1p1-31.62 和 openssh-server-6.6.1p1-31.62 到此时我有一个
I have a php system running on AWS and a class that upload a xlsx file on external server using shh2 and sftp. This code worked fine until last upgrade of aws package openssh-clients-6.6.1p1-31.62 and openssh-server-6.6.1p1-31.62 by this time I have a segfault during fopen. Fopen create a file on external server. Here the code:
$stream = @fopen("ssh2.sftp://$this->sftp$remote_file", 'w');
然后我使用 $stream 来编写内容,但是由于段错误,代码在 fopen 上停止.我没有发现任何关于这个问题的信息,我认为问题是opnessh的新升级,因为php代码没有改变.有什么想法吗?
Then I use $stream to write the content, but the code stop on fopen bacause a segfault. I don't find anything about this problem, I think the problem is the new upgrade of opnessh, because the php code isn't changed. Any idea?
推荐答案
在 StackOverflow 上找到了答案:https://stackoverflow.com/a/40972584/2520795
Found the answer here on StackOverflow: https://stackoverflow.com/a/40972584/2520795
似乎自从这次 PHP 更新以来,你必须用 intval()
包围你的主机部分(ssh2_sftp()
的结果):
It seems since this PHP update, you have to surround your host part (result of ssh2_sftp()
) with intval()
:
$handle = opendir("ssh2.sftp://".intval($sftp)."/path/to/directory");
在我的例子中,有一个 fopen
而不是 opendir
,但解决方案是一样的.
In my case there was a fopen
instead of an opendir
, but the solution is the same.
相关文章