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

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

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

FTP(File Transfer Protocol)は、ネットワークでのファイル転送を行うための通信プロトコルの1つである。

PHP

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

Q&A

解決済

4回答

3597閲覧

PHPでFTP接続について教えてください。

ue-hiro

総合スコア11

FTP

FTP(File Transfer Protocol)は、ネットワークでのファイル転送を行うための通信プロトコルの1つである。

PHP

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

0グッド

0クリップ

投稿2019/05/30 01:17

お世話になっております。
PHP7.3でWindowsServerもしくは、LinuxのFTPサーバに順次もしくは、同時に複数接続してファイルのアップロードおよびダウンロードするようなしくみを
作成しようかと思っております。

ここで、質問したいことは、2点あります。

①PHPで同時に複数のFTPサーバに接続できるのでしょうか。

②PHPでFTP接続中にファイルをアップロードしている途中に、ネットワークが途中で切れたり、FTPの接続に失敗といったフラグはとれるのでしょうか。

以下のリファレンスのサイトをみたのですが、よくわかりませんでした。

https://www.php.net/manual/ja/ref.ftp.php

漠然とした質問で申し訳ありません。ご教授の方お願いします。

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

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

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

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

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

guest

回答4

0

①PHPで同時に複数のFTPサーバに接続できるのでしょうか。

送信が完了するまで別なファイルを送信することはできません。
ただ

FTPサーバに順次もしくは、同時に複数接続してファイルのアップロードおよびダウンロードするようなしくみを作成しようかと思っております。

とあるので同時に複数のFTPサーバへ接続し順次送信することはできるかと読み替えてお答えすると可能です。

php

1$host1="FTP先1"; 2$host2="FTP先2"; 3 4//FTP1接続 5$ftp1 = ftp_connect($host) or die("1接続エラー\n"); 6//FTP2接続 7$ftp2 = ftp_connect($host) or die("2接続エラー\n"); 8 9//FTP1ログイン 10ftp_login($ftp1,ユーザ,パスワード) or die("1ログインエラー\n"); 11//FTP2ログイン 12ftp_login($ftp2,ユーザ,パスワード) or die("2ログインエラー\n"); 13 14//FTP1へ送信 15ftp_put($ftp1, 送信先ファイルパス, 送信するファイルパス, FTP_ASCII) or die("1送信エラー\n"); 16//FTP2へ送信 17ftp_put($ftp2, 送信先ファイルパス, 送信するファイルパス, FTP_ASCII) or die("2送信エラー\n"); 18 19// FTP1切断 20ftp_close($ftp1); 21// FTP2切断 22ftp_close($ftp2); 23

※補足すると、一般的にPHPは常に逐次実行なので処理が終わる前に次の行に進むということはできません。
世間一般にあるマルチアップロードなど並列処理は、javascriptでPHPを複数起動させることで擬似的に並列処理できるように見せています。

②PHPでFTP接続中にファイルをアップロードしている途中に、ネットワークが途中で切れたり、FTPの接続に失敗といったフラグはとれるのでしょうか。

これはドキュメントの戻り値をよく読んでください。失敗した場合どうなるか書いています。

投稿2019/05/30 02:19

namda

総合スコア705

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

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

ue-hiro

2019/05/30 05:10

ご回答ありがとうございます。
ue-hiro

2019/05/30 05:12 編集

読んでみます。
guest

0

同時接続は、cURL が ftp に対応していているようなので、curl_multi で実現できるかと(未検証)

ただクセが強いので、きちんと制御するのはなかなか苦労すると思います。

投稿2019/05/30 02:38

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

ue-hiro

2019/05/30 05:09

ありがとうございます。
guest

0

アップロードはともかくダウロードなら非同期でクローラを走らせれば
いけるかもしれません。
post機能があるクローラならアップロードもいけそうです
クローラの終了ステータスで正常/異常終了は感知できます

ただ、全然phpの機能とは関係ないですね

投稿2019/05/30 01:52

yambejp

総合スコア114747

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

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

ue-hiro

2019/05/30 02:58

ありがとうございます。
guest

0

ベストアンサー

①PHPで同時に複数のFTPサーバに接続できるのでしょうか。

できません。
手続きで1つずつ順番に行うので同時接続にはなりません。
必ず1ずつconnect-closeしましょう。

②PHPでFTP接続中にファイルをアップロードしている途中に、ネットワークが途中で切れたり、FTPの接続に失敗といったフラグはとれるのでしょうか。

ftp_put()の返り値boolで判断できるのではないでしょうか。
ただどのような環境でPHPにアクセスしているか分かりませんが、ブラウザからアクセスしているのであれば、「ネットワークが途中で切れた」となればそもそもPHPへのアクセスも持続できないように思います。

投稿2019/05/30 01:23

m.ts10806

総合スコア80842

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

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

ue-hiro

2019/05/30 02:58

ありがとうございます。
ue-hiro

2019/05/30 05:11

1点疑問に思ったことを質問させてください。 ②でboolで判断したときfalseになった理由というのは、PHPで拾えるものなのでしょうか。
ue-hiro

2019/05/30 05:22

たびたびのご回答ありがとうございます。読んでみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問