質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.38%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

4430閲覧

PHP SFTPでファイル取得時のエラー

u.shino

総合スコア12

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2020/08/03 02:27

PHPでSFTPサーバに接続してファイルを取得しようとしていますが、エラーが発生して取得することができません。
実装方法は以下のURLを参考にしています。
https://www.php.net/manual/ja/function.ssh2-sftp.php
phpバージョンは5.6.40です。

last_error_message()でメッセージを取得すると、以下のようなものでした。

fopen(): Unable to open ssh2.sftp://1049/hogehoge.txt on remote host

ディレクトリ内にいくつかのファイルがあり、それをスキャンして全てを取得しようとしています。
同じ実装で取得できるファイル、取得できないファイルがあるようです。
最初パーミッションの問題かと思ったんですが、パーミッションには問題なく、エラーメッセージもパーミッションのものとは違うようです。
検索してみても該当する問題が見つからず・・・
原因にお心当たりのある方がいらっしゃいましたらアドバイスいただけると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

いまだに完全な解消には至っていませんが、やはりSFTPサーバの問題のようです。
諸々アドバイスありがとうございました。

投稿2020/08/07 01:11

u.shino

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

参考サイトの通りに

php

1$stream = fopen('ssh2.sftp://' . intval($sftp) . '/path/to/file', 'r');

って書いてあるんでしょ?

そこに、実際のSFTPサーバのアドレスを書いていないので「Unable to open ssh2.sftp」になるのは、当然のことです。

投稿2020/08/03 03:29

showkit

総合スコア1638

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

u.shino

2020/08/03 03:48 編集

SFTPサーバへの接続はssh2_connectで行っています。(認証はssh2_auth_password、SFTPセッションに開始はssh2_sftp) なのでfopenに直接SFTPサーバのアドレスは記載しないです。 なお、1049というのがSFTPセッションIDです。 他のファイルは取得できているので、接続できていないのではなくファイルが開けない状況かと思われます。
showkit

2020/08/03 04:09

あ、そういうことですか、ごめんなさい。勘違いしていました。ちょっと自分でも もう少しみてみます。
showkit

2020/08/03 04:31

やってみましたが、パーミッションの違いがないとなると・・・。ディレクトリの違いとか、ファイルの種類の違いとかはありませんか?
u.shino

2020/08/03 05:27

取得しようとしているファイルはディレクトリ内をスキャンしてファイル名を取得し、それをfopenに指定しているのでディレクトリの間違いはないようです。 phpでなくsftpコマンドでも接続して見てみてもいますが、ファイルの種類もtxtで他のファイルと違いはありませんでした。 強いて言えば他のファイルはShiftJISで、エラーになったファイルはASCIIであることくらいしか違いはないんですが・・・ それとこれは推測なんですが、パーミッションだったりファイルが存在しなかったりした場合は別のエラーメッセージが出るような気がしています。 このメッセージが何を指しているのかが不明で・・・
showkit

2020/08/03 05:57

Read 権限がない場合のメッセージもファイルがない場合も、メッセージは「fopen(): Unable to open ssh2.sftp:// ...」でした。これは、やってみることができましたので・・・。
u.shino

2020/08/03 08:35

なるほど・・・ やはりSFTPサーバ側の問題の可能性が高そうですね。 SFTPサーバの管理者は私ではないのですぐに確認することが難しいんですが、どうにか検証してみようと思います。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.38%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問