for some unkwon reason, stream_set_timeout() does not work on ssh2_exec, and strem_set_blocking (on my personal case) just hangs the script until it hits the max_execution_time.
Using sleep() or usleep() does not help either, because they are arbitrary and the command passed to ssh2_exec may have not finished yet.
The (best?) way to workaround this case was using a sh script on the remote server an a file as a handshake, the using this function to stat the file and, given a certain rule, fetching the result using stream_get_contents().
The sh script should create a dummy not zero size file (the handshake), run the commands then truncate the file (finished execution of the command). On the other side, the php script, should be stating the file until it gets a 0 size and then fetch the results.
I hope that this would be usefull to somebody else until stream_set_timeout() works on ssh2_exec or the functions adds a "timeout" parameter.
ssh2_sftp_stat
(PECL ssh2 >= 0.9.0)
ssh2_sftp_stat — リモートファイルシステム上のファイルの情報を取得する
説明
array ssh2_sftp_stat
( resource $sftp
, string $path
)
シンボリックリンクを辿って リモートファイルシステム上のファイルの情報を取得します。
PHP 5 では、この関数は ssh2.sftp:// ラッパーを使用した場合の stat() 関数と同様です。 返される値も同じです。
返り値
どのような値が返されるのかについての詳細は、 stat() を参照ください。
例
例1 SFTP 経由でのファイルの情報の取得
<?php
$connection = ssh2_connect('shell.example.com', 22);
ssh2_auth_password($connection, 'username', 'password');
$sftp = ssh2_sftp($connection);
$statinfo = ssh2_sftp_stat($sftp, '/path/to/file');
$filesize = $statinfo['size'];
$group = $statinfo['gid'];
$owner = $statinfo['uid'];
$atime = $statinfo['atime'];
$mtime = $statinfo['mtime'];
$mode = $statinfo['mode'];
?>
参考
- ssh2_sftp_lstat() - シンボリックリンクの情報を取得する
- lstat() - ファイルあるいはシンボリックリンクの情報を取得する
- stat() - ファイルに関する情報を取得する
ssh2_sftp_stat
vanscot on gemail
27-Mar-2008 08:53
27-Mar-2008 08:53
