2

こんな機能を使いたい。以下のコードを確認してください

function notify (
    $notification_code,
    $severity,
    $message,
    $message_code,
    $bytes_transferred,
    $bytes_max
) {
    echo "Runned \n";
};

$ctx = stream_context_create();
stream_set_params($ctx, array('notification' => 'notify'));
$ssh_connection = ssh2_connect('myhost');
ssh2_auth_password($ssh_connection, 'login','pass');
$sftp_resource = ssh2_sftp($ssh_connection);
$data = file_get_contents("ssh2.sftp://{$sftp_resource}/path/to/big/file",
            false, $ctx);

私の通知関数が少なくとも 1 回呼び出されることを期待しています。実際、同じコードが ftp ラッパーでも機能します。

function notify (
    $notification_code,
    $severity,
    $message,
    $message_code, 
    $bytes_transferred,
    $bytes_max
) {
    echo "Runned \n";
};

$ctx = stream_context_create();
stream_set_params($ctx, array('notification' => 'notify'));
$scheme = 'ftp';
$data = file_get_contents("{scheme}://username:password@host:port/path/to/file",
            false, $ctx);

そして、それはうまくいきます!通知関数は何度も呼び出されます。このようなsftpラッパーを使用しようとしています

$data = file_get_contents("ssh2.sftp://username:password@host:port/path/to/big/file",
            false, $ctx);

そして、それもうまくいきません。何か案は?

4

2 に答える 2

2

ssh2 拡張機能は、通知コールバックをサポートしていません。これが設計によるものなのか実装されていないのかはわかりませんが、拡張機能のコードには次のような関数の呼び出しがありません。

(PHP-5.4.10) /ext/standard/ftp_fopen_wrapper.c の 573 行目から:

php_stream_notify_progress_init(context, 0, file_size);

私がまだテストしていない回避策は、使用することftps://です(FTP over ssl)。これはセキュリティのニーズに適合する必要があり、コードが示すように、ftp としての通知をサポートします。詳細には、ftp と同じ urlwrapper を使用します。

于 2013-02-12T13:12:45.407 に答える