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

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

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

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

Q&A

解決済

2回答

428閲覧

input file経由と同じデータは経由しなくともできるのか

ayumi4632p

総合スコア4

JavaScript

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

0グッド

1クリップ

投稿2024/03/26 01:57

input fileで選択したものをPOSTすると
独自のパラメータが生成されると思います

input fileを経由せず直書きしてPOSTした場合(PHPのcURL)、
通るのでしょうか

両方送ってるのはファイル名やバイナリコードのようですが

セキュリティ的な面から通らなそうですがご存じでしたら教えてください

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

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

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

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

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

ayumi4632p

2024/03/26 02:02

追記です PHP側で if (isset($_FILES["upload"]) && $_FILES["upload"]["error"] === UPLOAD_ERR_OK) { } このような処理が書かれている前提です
yambejp

2024/03/26 02:03

具体的なソースとその状況を説明できますか? 基本的にHTMLのtype=fileからpostで送っても cURLをつかっても転送中のデータはおなじですし セキュリティ面での違いもないと思います
ayumi4632p

2024/03/26 02:09 編集

こんにちは。 簡単にいうとinput fileを経由せずとも$_FILES["upload"]の条件分岐は通るのかということです
Lhankor_Mhy

2024/03/26 02:22

質問タグが JavaScript となっていますが、これは適切ですか? 適切であれば、JavaScript のコードをご提供ください。
ayumi4632p

2024/03/26 02:25

JavaScriptはfetchかxhrを考えてました <form>を使ってもなんでも良いのですが 抜けててすみません
yambejp

2024/03/26 02:38

質問がぶれてます PHPでやるならブラウザ経由ではないファイル転送ですよね? jsでやるならtype=fileの利用は必須です jsでPHPのcURLを利用することはちょっと考えづらい状況です
m.ts10806

2024/03/26 02:38

質問は編集できます。適宜本文に追記を。
Lhankor_Mhy

2024/03/26 03:14

実際に書いてみればいいのではないか、と思ったのですが、「このようなコードでテストしたところ通らなかったのだが、うまくいく方法はないか」というようなご質問なのでしょうか? それとも、なんとなくふんわりとした感じで一般論的な回答を求めてる感じですか?
Lhankor_Mhy

2024/03/26 03:42

あ、もしかして、セキュリティ的な懸念から「HTMLフォームを介さないリクエストが通ってくる可能性はあるか?」というご質問ですか?
ayumi4632p

2024/03/26 04:03

どういう定義かそこまで重要でしょうか?
ayumi4632p

2024/03/26 04:05

あやふやな定義だったかもしれませんが、のちに 「input fileを経由せずとも$_FILES["upload"]の条件分岐は通るのかということ」 と書いています
m.ts10806

2024/03/26 04:19

質問は編集できます。適宜本文に追記を。 コメント欄だけのやりとりでは埋もれます。
Lhankor_Mhy

2024/03/26 06:17 編集

> どういう定義かそこまで重要でしょうか? 回答に対して疑義は出ているのは、質問の要件の理解にずれがあるからではないかなと感じております。 おのおの感じたとおりに答えてよい、ということであればそれはそれでいいのですけれども(なので、一般論的な回答を求めてる感じですか?とお聞きしたところです)、そうでなくて何か目的があって質問されているのであれば、できればその目的に沿う形で回答をした方がお役に立てるのではないかと思いました。 --- > input fileを経由せずとも$_FILES["upload"]の条件分岐は通るのか つまり、「HTMLフォームを介さずに条件分岐を通す方法が、JavaScriptに限らずあるか」ということですね。理解しました。それであればYESが回答ですが、すでに出ているようなので、そちらにお任せします。
guest

回答2

0

ベストアンサー

PHPのcURLでpostを利用したファイルの転送は可能です。ただしそれはサーバーサイドの問題です。
クライアントのブラウザからではjsを利用してもtype=fileを利用しないでファイルの転送はできません

たとえばクライアントがtype=fileを利用して送ったファイルをサーバーが受け、それをさらにhttpベースで別のサーバーにpostしたいときはcURLで転送可能です。
また場合によっては307エラーを利用した転送なども可能です
なおjsで送信する場合もクライアント側はあくまで任意にファイルの選択をするという手順を経る必要があります。
それは非同期のXHRでも同様です。

参考

テキストエリアの文字列をサーバーにファイルとして送付

javascript

1<script> 2window.addEventListener('DOMContentLoaded', ()=>{ 3 btn.addEventListener('click',()=>{ 4 const url="upload.php"; 5 const body= new FormData(); 6 7 body.append("upload", new Blob([document.querySelector('[name=body]').value],{"type":"text/plain"}),document.querySelector('[name=filename]').value); 8 fetch(url,{method:"post",body}).then(res=>res.text()).then(console.log); 9 }); 10}); 11</script> 12<textarea name="body"> 13test 14</textarea><br> 15<input name="filename" value="sample.txt"> 16<input type="button" id="btn" value="send">

// upload.php

PHP

1<?PHP 2print_r($_FILES);

投稿2024/03/26 02:40

編集2024/03/26 04:47
yambejp

総合スコア114843

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

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

maisumakun

2024/03/26 03:37

> クライアントのブラウザからではjsを利用してもtype=fileを利用しないでファイルの転送はできません できます。FormDataにBlobを渡せば、<input type="file">なしでJavaScriptから同様のリクエストを投げられます。
yambejp

2024/03/26 03:43

maisumakunさん それは単にデータをファイルとして渡しているだけであってローカルのファイルを送信することではないのでは?理解が違っていたらっすみません
ayumi4632p

2024/03/26 04:07

ローカルのファイルを送信することと バイナリデータを直接記述して送信することの違いを教えていただけませんか?
yambejp

2024/03/26 04:11

ayumi4632pさん ローカルファイルの送信はまさにPC(スマホ?)上のファイルを送ること。 バイナリーデータを送るのはなんらかのデータたとえばテキストエリアに書いた文字をファイルととしておくること。
ayumi4632p

2024/03/26 04:15

でしたら全く別物であり本題の答えは if (isset($_FILES["upload"]) && $_FILES["upload"]["error"] === UPLOAD_ERR_OK) { } は通らないってことでよいでしょうか?
yambejp

2024/03/26 04:22

ファイルとして送れば$_FILESで受けることはできるでしょう 本題の答えとしてはPHPのcURLでも送れるし、jsではtype=fille経由でなら送れる・・と回答した通りなんですが・・・
ayumi4632p

2024/03/26 04:27

ファイルとして送るにはinput file経由でしかないのでは?
yambejp

2024/03/26 04:28

「ローカルファイルを送る」のと「データをファイルとして送る」のは意味が異なります
ayumi4632p

2024/03/26 04:31

if (isset($_FILES["upload"]) && $_FILES["upload"]["error"] === UPLOAD_ERR_OK) { } 上記はローカルファイルしか通らないで間違いありませんか
yambejp

2024/03/26 04:45

追記した参考データを御覧ください。 データを「ファイルとして送付する」ことは可能です。 だからといってこれはローカルPC上にあるsample.txtを送っているわけではないということ わかりにくいですか?どこがわからないですか?
Lhankor_Mhy

2024/03/26 04:51

> yambejp さん > それは単にデータをファイルとして渡しているだけであってローカルのファイルを送信することではないのでは? 横からすみません。 DataTransfer はどうでしょう?
maisumakun

2024/03/26 04:56

> 上記はローカルファイルしか通らないで間違いありませんか 間違っています。自分の挙げたFormData経由でも、curlから送信してもこの条件分岐を通過します(サーバサイドで「元がローカルファイルだったかどうか」を検知する方法はありません)。
maisumakun

2024/03/26 04:58

> それは単にデータをファイルとして渡しているだけであってローカルのファイルを送信することではないのでは? 「ローカルファイルを読み取れるかどうか」という観点で言えばNoですが、「サーバに同等のデータを送れるか」という意味ではYesです(自分は後者を意図していました)。
yambejp

2024/03/26 05:11

結局どんな方法でもいいのでPHPの$_FILESで受け取れる方式でファイルではなくなんらかのデータを送りたいというところが落とし所ですかね? いずれにしろ参考データで必要十分条件は満たしていると思います
guest

0

input fileを経由せず直書きしてPOSTした場合(PHPのcURL)、通るのでしょうか

はい、通せます。

投稿2024/03/26 04:56

編集2024/03/26 04:57
maisumakun

総合スコア145184

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問