2016-12-15 23 views
0

私たちはホスティング企業を変更しましたが、ssh2が動作していた場所はもう機能しません。新しいサーバーでssh2を有効にし、allow_url_fopenを有効にしました。SSH2が新しいサーバで動作しない

唯一の違いは、古いサーバーがPHP 5.4.45を使用し、新しいサーバーがPHP 5.6.28を使用していることです。

ただし、次のエラーが表示されるようになりました。 Could not open remote file: ssh2.sftp://Resource id #337/my/directory/file.txt

ここでは、私のコードの例です:

再び
$remote_host = "myhostinfohere"; 
$remote_port = 22; 
$remote_user = "myuser"; 
$remote_pass = "mypassword"; 
$remote_dir = "/my/directory/"; 
$remote_file = 'file.txt'; 

try { 
    $remote_conn = ssh2_connect($remote_host, $remote_port);  
} catch (Exception $e) { 
    die("could not connect to ".$remote_host); 
} 

try { 
    ssh2_auth_password($remote_conn, $remote_user, $remote_pass); 
} catch (Exception $e) { 
    die("Password failed on ".$remote_host); 
} 

$sftp = ssh2_sftp($remote_conn); 

$fetch_string = "ssh2.sftp://$sftp" . $remote_dir . $remote_file; 

//If I add this it says it doesn't exists for some reason even though I can see the file if I log in remotely. 
$fileExists = file_exists($fetch_string); 
if (!$fileExists) { 
    die('File does not exist'); 
} 

$stream = fopen($fetch_string, 'r'); 

if (!$stream) { 
    die("Could not open remote file: " . $fetch_string . "\n"); 
} 

、この同じコードは、古いサーバー上で動作しますが、新しいサーバー上にありません。私は何が欠けていますか? ssh2_scp_recv()でサーバにファイルを簡単にコピーできるので、fopen()機能で何が起こっているのか分かりません。

+0

同じユーザーを使用して手動で認証したり、新しいサーバーを渡すことはできますか? /my/directory/file.txtは新しいサーバーに存在しますか?適切な権限を持っていますか? – ivanivan

+0

私は手動で認証でき、接続は機能します。私が新しいサーバーと言うとき、私はそのスクリプトがどこにあるのかを、他のサーバーを呼び出すために使用することを意味します。ファイルが存在する他のサーバーはまったく変更されていません。上記のスクリプトをホストしていたサーバー。 – MagentoMan

+0

ファイアウォールを無効にして、その効果(SSHスクリプトがあるサーバー)を確認します。ああ、あなたは既にSSH要求を正しく行うことができますか?もしそうなら、それは@ivanivanが述べたようなファイルアクセス権の問題かもしれません。 – webDev

答えて

1

SSH2拡張では、このバグに関連する可能性が非常に高い - 私は最近発生しました:

https://bugs.php.net/bug.php?id=71376

ワードプレスでSSH2更新機能破る:

https://core.trac.wordpress.org/ticket/35517

+0

非常に面白いです。ありがとうございました!私は今までそれを見ていない。さらに掘り下げてみましょう。 – MagentoMan

+0

私は '' ssh2_scp_recv() 'を使ってファイルを私のサーバにコピーできることを確認しましたが、私は' 'fopen()'を使いたいです。何か案は? – MagentoMan

3

時間後にさまざまなオプションを試してみると、私はついにこれを見つけました。これに $fetch_string = "ssh2.sftp://$sftp" . $remote_dir . $remote_file;

http://php.net/manual/en/wrappers.ssh2.php

私はこの変更 $fetch_string = "ssh2.sftp://user:[email protected]" . $remote_dir . $remote_file;

をそしてfopen()機能が働き始めさきがけ。

新しいバージョンでは、ssh2_sftp()機能を廃止した場合、または上記のリンクでも使用されていないため、@billynoahのようなバグであるかどうかはわかりません。

これは痛みの程度が分かりましたので、うまくいけば他の誰かを助けるでしょう!

+0

それはかなりクールです - 私はそれをphp7/wordpressのインストールで渦巻きを与えて、それが役立つかどうかを見なければなりません。 – billynoah

0

はSFTPサービスは、ここで

3

$ = ":// $のSFTP ssh2.sftpを" fetch_string(PowerShellの)サーバー上で有効になっていることを確認してください。 $ remote_dir。 $ remote_file;代わりに$のSFTPの

使用INTVAL($のSFTP)

+1

このソリューションは私の仕事です。 https://bugs.php.net/bug.php?id=73597 – Chaitenya

1

私も同じ問題に直面し、私は多くのことを苦しみました。私にとっては今は固定されています。
これは私がやったことです:
私のPHPのバージョン:5.6.25
から最新php_ssh2.dllをダウンロード:(PHP 5.6のx64用php_ssh2.dll)https://phpfashion.com/php-ssh2-dll-for-php-5-6-and-7-0
はでphp_ssh2.dllを置き換え次の場所:"C:¥wamp64¥bin¥php¥php5.6.25¥ext" &すべてのサービスを再開しました。

関連する問題