On Jun 19, 2005, at 12:37 PM, M. Sokolewicz wrote:
Lowell Allen wrote:
I need to use SFTP to send text files and binary files from one
server to another, but I'm unable to use fopen on the remote server,
and if I send with ssh2_scp_send the files are truncated. I'm
assuming the libssh2-PECL/ssh2 installation isn't the problem because
I'm able to connect using ssh2_auth_password, create a directory on
the remote server with ssh2_sftp_mkdir, and copy files with
ssh2_sftp_send and ssh2_sftp_recv (even though ssh2_sftp_send
truncates files).
When I try to use fopen, I get this error message:
Warning: fopen(): Unable to open ssh2.sftp://Resource id
#10/whatever.com:22/home/whatever/public_html/flamingo/test.txt on
remote host in /home/user/public_html/cms/sftp_test.php on line 79
Warning: fopen(ssh2.sftp://Resource id
#10/whatever.com:22/home/whatever/public_html/flamingo/test.txt):
failed to open stream: Resource temporarily unavailable in
/home/user/public_html/cms/sftp_test.php on line 79
Here's line 79 of sftp_test.php:
$stream =
fopen("ssh2.sftp://$sftp/whatever.com:22/home/whatever/public_html/
flamingo/".$filename, "wt")
I've read "Secure Communications with PHP and SSH" in the February
PHP Architect. That's what prompted me to try PECL/ssh2, but now I'm
stuck. Anybody successfully using fopen with SFTP or anybody using
ssh2_sftp_send without getting truncated files?
First of all, posting this once is enough. Second of all, I think the
problem here is actually a lot easier than it would look at first
glance :)
I noticed the following error:
Warning: fopen(ssh2.sftp://Resource id #10/[...]): [...]
Now, what you see here is that you suddenly have a
"ssh2.sftp://Resource id #10". This is probably not the domain name
you're trying to connect to, now is it? :) That string typically
appears only when you cast a resource to a string (eg. a
mysql-connection, a stream, or whatever). So, looking at line 79, I
would guess that $sftp isn't a string which tells fopen where to find
the file to open, but instead is a resource which should not be there
at all.
Thanks for your reply. I apologize for the duplication. I posted until
I saw it show up, and I've only seen it once -- probably my gmail
account marking as spam, which I don't see because I retrieve as a POP
account with Thunderbird. I unsubscribed and subscribed with a
different email address and posted again.
Here's where $sftp is coming from:
$connection = ssh2_connect("copy-design.com", 22);
$sftp = ssh2_sftp($connection);
And from the examples I've seen, the correct syntax for opening a
handle is what I use on line 79:
$stream =
fopen("ssh2.sftp://$sftp/whatever.com:22/home/whatever/public_html/
flamingo/".$filename, "wt")
The info at <http://us4.php.net/manual/en/function.ssh2-sftp.php> says
that ssh_sftp() "returns an SSH2 SFTP resource", which is what I
figured "Resource id #10" is referring to. From the manual example for
ssh_sftp:
$connection = ssh2_connect('shell.example.com', 22);
ssh2_auth_password($connection, 'username', 'password');
$sftp = ssh2_sftp($connection);
$stream = fopen("ssh2.sftp://$sftp/path/to/file", 'r');
Perhaps I'm being as inept with this code as I seem to be with my
email, but if the domain is "whatever.com", and the file is located at
"/home/whatever/public_html/flamingo/", and the file name is
"test.txt", and I want to open the file (which doesn't exist yet) for
writing, what should I use if not
'fopen("ssh2.sftp://$sftp/whatever.com:22/home/whatever/public_html/
flamingo/test.txt", "wt")'?
--
Lowell Allen
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php