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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

5933閲覧

PHPでFTPを使用してファイルのアップロードをする

sstaishou

総合スコア46

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2016/09/08 14:59

PHPを使用してファイルをアップロードします。
まずAサーバーにフォームを設置しそこからBサーバーにファイルを保存するようにします。
以下、問題のプログラムです。

PHP

1 2index.html 3 4<html lang="ja"> 5<head> 6 <meta charset="utf-8"> 7 <title>test</title> 8</head> 9<body> 10<form method="post" action="./up.php" enctype="multipart/form-data"> 11ファイル:<input type="file" name="up_file"><br> 12<input type="submit" value="upload"> 13</form> 14</body> 15</html> 16 17 18up.php 19 20<?php 21// 22function FTP_Upload($ftp_server,$ftp_user_name,$ftp_user_pw,$remote_file,$local_file,$mode){ 23 //FTPサーバーに接続 24 $conn_id = @ftp_connect($ftp_server); 25 26 //ユーザ名とパスワードでログイン 27 $login_result = @ftp_login($conn_id, $ftp_user_name, $ftp_user_pw); 28 29 //接続確認 30 if ((!$conn_id) || (!$login_result)) { 31 return die("FTP接続失敗!"); 32 } else { 33 echo "ユーザー $ftp_user_name として、 $ftp_server に接続しました<br>\n"; 34 } 35 36 //ローカルファイルをアップロード 37 $upload = @ftp_put($conn_id, $remote_file, $local_file, $mode); 38 // アップロード状況を確認する 39 if (!$upload) { 40 return die("アップロード失敗!"); 41 } else { 42 echo "$local_file$remote_file へ アップロードしました<br>\n"; 43 } 44 //FTP接続終了 45 ftp_close($conn_id); 46 return true; 47} 48 49//FTPサーバー名 50$ftp_server="FTPサーバー名"; 51//ユーザー名 52$ftp_user_name="ユーザー名"; 53//パスワード 54$ftp_user_pw="パスワード"; 55//アップロード先のリモートファイルのパス 56$remote_file="./"; 57//アップロードするローカルファイルのパス 58$local_file= $_FILES['up_file']['tmp_name']; 59//転送モード 60$mode=FTP_ASCII; 61 62FTP_Upload($ftp_server,$ftp_user_name,$ftp_user_pw,$remote_file,$local_file,$mode); 63?> 64

プログラムはあるサイトに記載してあったものです。
FTPのアクセスはできましたがその後のアップロードができません。
まだPHPの知識は浅いです。
浅いからと言って丸投げしようと考えている訳ではありません。

わからないところ・問題であろうコードは

PHP

1//アップロード先のリモートファイルのパス 2$remote_file="./"; 3//アップロードするローカルファイルのパス 4$local_file= $_FILES['up_file']['tmp_name'];

まず、ファイルを作成する関数はfopen()を使用します。
しかし、この行では使用されていません。
また、リモートパスは
public/htdocs/up/
などのように絶対パスで記述しなければならないでしょうか?
エラーログは何も書いてありませんでした。
まず第一にファイルのアップロードができないという問題を解決したいです。
どこが間違えているのか、fopenを使用しないのは正しいのか教えてください。
よろしくお願いします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

ftp_putの第二引数$remote_fileはマニュルアルでも、ファイル名を含むのかどうかまで明記されていませんが、サンプルを見るとファイル名を含むようです。
http://php.net/manual/ja/function.ftp-put.php
なのでCodeLabさんの回答のように一時ファイルのファイル名を使うようにするか、決まったファイル名があるのならそれを指定すればよさそうです。

PHP

1$remote_file = $_FILES['up_file']['name'];

パスについては、FTPでログインしたところのがホームディレクトリになるはずなので、そこからのパスになります。
ホームディレクトリ配下がpublic/htdocs/up/という構成であるなら、以下のいずれでもOKと思います。

PHP

1$remote_file = 'public/htdocs/up/' . $_FILES['up_file']['name']; 2$remote_file = './public/htdocs/up/' . $_FILES['up_file']['name']; 3$remote_file = '/public/htdocs/up/' . $_FILES['up_file']['name'];

fopenについてはどこででてくるのでしょうか。
アップロードされた時点でファイルは$_FILESが示す場所に作成されていますので、あとはそれをFTPサーバー側に送るだけなので出番はないと思います。

投稿2016/09/09 00:27

ttyp03

総合スコア16996

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

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

0

$remote_fileにはファイル名を入れるのでは?
アップ先がカレントディレクトリで、元のファイル名を用いるのであれば

php

1$remote_file = $_FILES['up_file']['name'];

とすればよいかと思います。

投稿2016/09/08 18:15

CodeLab

総合スコア1939

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問