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

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

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

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

CORS

CORSとはCross-Origin Resource Sharingの頭文字をとったもので、ブラウザがオリジン以外のサーバからデータを取得するシステムのことです。

HTML

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

Q&A

解決済

1回答

4479閲覧

PHP間でのファイル送信について

SystemRyota

総合スコア24

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

CORS

CORSとはCross-Origin Resource Sharingの頭文字をとったもので、ブラウザがオリジン以外のサーバからデータを取得するシステムのことです。

HTML

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

1グッド

0クリップ

投稿2016/02/11 11:49

クライアントとサーバ間でzipファイルをやり取りしたいと考えています。
クライアント側で独自SDK(javaScript)を使用しなくてはいけない為、PHPの使用を考えています。
その為、サーバにApache+PHP、クライアント側にApache+PHPで実現できるか、
ご教授頂きたく質問させて頂きました。

また、クライアントでの操作は「submit」のみで、「ファイル選択」はできません。
なので、特定ディレクトリ配下に存在する「xxx.zip」を送信するファイルに設定といったことがしたいです。

前述した、「zip」ファイルのやり取りですが、
FTPのようにフォルダの「ダウンロード・アップロード」が実現できると一番良いです。
また、PHPを使用することは前提ではないので、他に実現できる言語などありましたら、教えて頂けると嬉しいです。

以上になります。不明点などありましたら、補足致します。
ご回答の程、よろしくお願い致します。

mpyw👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

以下のコードでどうでしょう?
申し訳ありませんが、環境構築できていないので、全体で一回も試していません。

ファイルをダウンロードするコードはパーミッションを正しく設定しないとエラーになりました。
パーミッションエラーが出た場合は正しく設定してあげてください。

クライアント側からファイルをPOSTデータとして送信する方法は以下のページを参考にしました。
PHP: ファイルをアップロードする

もし上手くいきましたらご一報ください、よろしくお願いします。

php

1クライアント側からのファイルのアップロード1(cURLを利用する方法) 2 3// http://blog.sarabande.jp/post/80779555411より抜粋 4 5$opts = [ 6 CURLOPT_RETURNTRANSFER => true, 7 CURLOPT_URL => 'http://localhost:3000/upload.php', 8 CURLOPT_POST => true, 9 CURLOPT_POSTFIELDS => ['userfile' => curl_file_create('test.txt','text/plain','uploaded.txt')], 10 CURLOPT_USERAGENT => 'User-Agent: Mozilla/5.0', 11 CURLOPT_COOKIE => 'foo=bar', 12 CURLOPT_HTTPHEADER => ['Accept-language: ja'] 13]; 14 15$ch = curl_init(); 16curl_setopt_array($ch, $opts); 17$ret = curl_exec($ch); 18curl_close($ch); 19 20var_dump( 21 'success' === json_decode($ret, true)['msg'] 22);

php

1 2クライアント側からのファイルのアップロード2(file_get_contentsを利用する方法) 3 4// http://blog.sarabande.jp/post/80779555411より抜粋 5 6$boundary = '--------------------------'.microtime(true); 7$url = 'http://localhost:3000/upload.php'; 8$filename = 'test.txt'; 9 10$headers = [ 11 'Accept-language: ja', 12 'Cookie: hash=12345abcde', 13 'Content-Type: multipart/form-data; boundary='.$boundary 14]; 15 16$content = '--'.$boundary."\r\n". 17 'Content-Disposition: form-data; name="userfile"; filename="'.basename($filename).'"'."\r\n". 18 'Content-Type: text/plain'."\r\n\r\n". 19 file_get_contents($filename)."\r\n". 20 '--'.$boundary.'--'."\r\n"; 21 22$opts['http'] = [ 23 'method' => 'POST', 24 'header' => implode("\r\n", $headers), 25 'content' => $content, 26 'user-agent' => 'Mozilla/5.0' 27]; 28 29$context = stream_context_create($opts); 30$ret = file_get_contents($url, false, $context); 31var_dump('success' === json_decode($ret, true)['msg']);

PHP

1サーバー側のファイル受信時の処理(upload.php) 2 3<?php 4 5if (is_uploaded_file($_FILES["uplift"]["tmp_name"])) { 6 if (move_uploaded_file($_FILES["upfile"]["tmp_name"], "folder/" . $_FILES["upfile"]["name"])) { 7 chmod("folder/" . $_FILES["upfile"]["name"], 0644); 8 echo $_FILES["upfile"]["name"] . "をアップロードしました。"; 9 } else { 10 echo "ファイルをアップロードできません。"; 11 } 12} else { 13 echo "ファイルが選択されていません。"; 14} 15 16?>

php

1クライアント側のファイルのダウンロード(download.php) 2 3<?php 4 5$url = "http://XXX.XXX.XXX.XXX/folder/file.txt"; 6$data = file_get_contents($url); 7file_put_contents('C:work\file.txt', $data); 8 9echo "ファイルをダウンロードしました。" 10 11?>

html

1クライアント側のファイルのダウンロード(client.html) 2 3<a href="download.php">ダウンロード</a> 4

投稿2016/02/11 14:11

編集2016/02/13 14:32
K_S_

総合スコア419

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

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

SystemRyota

2016/02/11 14:26

ご回答有り難うございます。 JavaScriptを使用しなくてはいけない意味ですが、 ユーザ認証をする為に、必要なので変数等受け渡しが可能な言語を使用する必要がある。 という意味になります。 また、ご回答頂いた内容ですが、実現したいことと若干異なります。 ・アップロード ユーザ操作でファイルを選択してアップロードではなく、 特定のディレクトリに存在するファイルを固定でアップロードという操作が実現できないか。という意味になります。 例ですが、 プログラム側で「C:work\file.txt」をアップロードするファイルとしてセット、 ユーザ操作にて「submit」が押されたタイミングで送信処理開始。 ・ダウンロード 確認ダイアログが表示されるのではなく、 ボタン等をクリックしたタイミングで特定ディレクトリに対象ファイルを保存するといったことが実現できないか。という意味になります。 例ですが、 ボタンをクリックし、「http://111.11.11.11/folder/file.txt」を「C:\work」に保存。 説明が下手で申し訳ありません。
K_S_

2016/02/11 14:43

上記の回答に加えて、 アップロード ・ファイルの選択機能をなくし、固定パスにする。 ダウンロード ・確認ダイアログを消す。 で実現したいことはあっていますでしょうか?
SystemRyota

2016/02/11 15:06

はい。相違ありません。 よろしくお願い致します。
SystemRyota

2016/02/13 13:49

ご回答ありがとうございます。 ダウンロード側は思い通りの動きになりました。 アップロード側ですが、うまく動きませんでした。 確か、inputのvalueにファイルパスを記載しても認識しない為、 「ファイルが選択されていません。」と表示されるのではないかと思います。
SystemRyota

2016/02/13 14:56

追記ありがとうございます。 載せて頂いたサイトを参考に組んでみると思い通りの動きになりました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問