2

次のコードで seg fault が発生した場合はどうすればよいですか?

    $handle = opendir("ssh2.sftp://$sftp".'/usr/bin/');
    $file = readdir($handle);
    closedir($handle);

$sftp の場所

    $this->_connection = ssh2_connect($this->_server, 22);
    if($this->_authType==ExportInterface::CONN_AUTH_KEY) {
        ssh2_auth_pubkey_file($this->_connection,$this->_user,$this->_key,$this->_privateKey);
    } else {
        ssh2_auth_password($this->_connection,$this->_user,$this->_password);
    }
    $sftp = ssh2_sftp($this->_connection);

うまく接続します。そしてsegfaultは、私だけがreaddir関数を使用するときです。

4

6 に答える 6

4

Google 検索でのランキングが高いため、この古い質問に回答しています。私は同じセグメンテーション違反を経験していましたが、本当の解決策はここにはありませんでした.

PHP 5.6 以降、関数の動作がssh2_sftp変更され、文字列として連結してファイルシステム パスを形成することを許可しないリソースを返すようになりました。

したがって、 が返されたら、リモート ファイル パスを構築するために、ssh2_sftp最初にそれを渡す必要があります。intval

$sftp = ssh2_sftp($this->_connection);
$handle = opendir('ssh2.sftp://' . intval($sftp) . '/usr/bin/');
$file = readdir($handle);
closedir($handle);

どういたしまして。

于 2017-01-29T17:32:11.150 に答える
3

私は同じ問題を抱えていて、ssh2peclパッケージをバージョン0.11.3にアップグレードすることで解決しました

sudo pecl install ssh2 channel://pecl.php.net/ssh2-0.11.3

それはいくつかの問題の後で私のために働いた。

よろしく

于 2011-10-21T09:56:34.700 に答える
2

seg(mentation) fault は、php または SSH/SFTP 拡張機能の内部エラーです。問題の拡張機能に対してバグを報告する必要があります。

再現可能な短い例を含めることを忘れないでください。これは特定の ssh クライアントとサーバーの組み合わせでのみ再現可能である可能性があるため、最初に新しい VM でバグを再現し、次のようにすべての手順を記録する必要があります。

  1. VM に Ubuntu 11.04 amd64 をインストールします。
  2. でsshをインストール$ sudo apt-get install ssh
  3. ...でsshを構成します
  4. でphpをインストール$ sudo apt-get install php5-cli
  5. スクリプト [ http://pastebin.com/へのリンクはこちら] を VM にコピーします。
  6. segfaultを入力php ssh-segfault.phpして受け取ります。
于 2011-09-14T09:42:39.167 に答える
1

いくつかの追加要因がありますが、同様の問題がありました。解決策から始めましょう。相対パスではなく絶対パスを使用します。を避けて~ください。

私の発見に関しては。次のスクリプトを使用します。

#!/usr/bin/php
<?php

$ssh = ssh2_connect('hostname.example.com');
$res = ssh2_auth_pubkey_file($ssh, 'user', '~/.ssh/various-keys/special-key_2015.pub', '~/.ssh/various-keys/special-key_2015');
unset($res); unset($ssh);

$ssh = ssh2_connect('hostname.example.com');
$res = ssh2_auth_pubkey_file($ssh, 'user', '~/.ssh/various-keys/special-key_2015.pub', '~/.ssh/various-keys/special-key_2015');

ssh2_auth_pubkey_file2 回目の呼び出しで認証エラーが発生します。2 つの同一の呼び出しの後、遭遇するのは少し奇妙ですが、分析するのは簡単です。

しかし、残りのアプリケーション コードをその周りに配置すると、segfault が発生します。最終的に、定数を使用する関数を定義するファイルを含むものに絞り込み__FILE__、エラーをセグメンテーション違反に変えました。

このような単純なファイルでも:

<?php
function nothing() { 
    error_log(__FILE__);
}

これがいつか他の誰かに役立つことを願っています...

于 2015-03-10T11:15:35.267 に答える