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

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

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

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

Q&A

解決済

5回答

451閲覧

if文で、処理を書いていないのにファイルアップロードできる理由について

hibimosaku

総合スコア17

PHP

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

1グッド

0クリップ

投稿2019/01/31 01:25

下記のコードで、ファイルをアップロードできるのですが(input type="file>は割愛)、
なぜ、ファイルのアップロード関数を条件式に書いているだけなのにアップロードできるのでしょうか?
こういう式として暗記するものでしょうか?

$dest = mb_convert_encoding($_FILES['upfile']['name'], 'SJIS-WIN', 'UTF-8'); if (!move_uploaded_file($src, 'doc/'.$dest)) { }

【理解していること】
if(条件式){
trueの場合の処理

すみませんが、よろしくお願いいたします。

oppeke👍を押しています

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

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

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

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

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

azuapricot

2019/01/31 01:29

if (!move_uploaded_file($src, 'doc/'.$dest)) {} の、move_uploaded_file()の関数実行結果がtrue(成功) か false(失敗)かでアップロード後の処理を分けているだけであって、 アップロード関数はふつうに実行されているからじゃないですかねぇ(たぶん)
azuapricot

2019/01/31 01:33 編集

あと、 if(条件式) { true の場合の処理 ) と書いてありますけど、今回は !条件式 となっていて falseの時の処理に{ } の中に入るっていうのは大丈夫ですよね。
azuapricot

2019/01/31 01:33

(あってるみたいだからふつうに回答欄にかけばよかった)
m.ts10806

2019/01/31 01:35

PHPマニュアル読んでから質問してもらいたい。
guest

回答5

0

ベストアンサー

if をよく見ましょう。

PHP

1if (!move_uploaded_file($src, 'doc/'.$dest)) {...}

と、if の条件式の中で、move_uploaded_file() という関数を呼んでいます。
つまりこの関数が動作した結果として、アップロードされたファイルが保存されているのです。
この関数はファイルの保存に成功すると true を、失敗すると false を返しますから、この if 文は
** ファイル保存に失敗したら ** (先頭に否定演算子 ! があるのに注意)という判定をしていることになります。

ファイルのアップロード自体は PHP が Web サーバから呼び出されるに行われており(POST の処理)、その一時保存先の情報が $_FILES の中に入ってきます。

投稿2019/01/31 01:34

tacsheaven

総合スコア13703

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

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

hibimosaku

2019/01/31 01:42

ありがとうございました。if条件式の中でも関数が実行されることが、理解できました。
guest

0

関数の基本です。詰まったときはまずマニュアルを確認ください。

返り値

成功した場合に TRUE を返します。

つまりifの条件中でmove_uploaded_file()を実行して、その結果が
失敗した場合(!で否定しているので)何かをするというロジックです

投稿2019/01/31 01:32

yambejp

総合スコア114837

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

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

hibimosaku

2019/01/31 01:44

ありがとうございました。返り値を理解していませんでした。
guest

0

逆に聞きたいんですが、
例えば下記の処理

php

1if(empty($hoge)){ 2 3}

質問者さんの言葉を借りると
$hogeが空かどうかを確認する処理を書いていないのに空のチェックが行われる
と言っているのと同じです。

PHPマニュアルの関数には
「説明」「パラメータ」「返り値」が必ず書いてあります。
ifの式は式の結果がtrue/falseでのみ評価されます。
例えif($i > 5)のような式であっても
$iは5より大きいですか? yes(true) or no(false)です。

PHPマニュアルをきちんと使えないと(読み込めないと)PHPは正しく扱えません。
あれはいわば辞書であり取扱説明書です。
指示通りにしか動かないのがプログラムなので説明書を読まずには使えません。

投稿2019/01/31 01:47

m.ts10806

総合スコア80850

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

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

hibimosaku

2019/01/31 02:06

すみませんでした。 PHPマニュアルが使えていないことがわかりました。 きちんと使えるように勉強します。
guest

0

式の評価順に関係しますのでどういう優先順位で処理されているか想像する必要があります。

ご提示のコードですと、move_uploaded_fileを実行した結果がfalseになっているかどうかを判定しています。

投稿2019/01/31 01:32

n_takapyon

総合スコア443

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

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

hibimosaku

2019/01/31 01:44

ありがとうございました。優先順位での処理を理解していませんでした。
guest

0

条件式がtrueかfalseを判断するには、一度実行して戻り値を見ないといけないですよね。

投稿2019/01/31 01:29

ozwind918

総合スコア1140

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

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

hibimosaku

2019/01/31 01:44

ありがとうございました。一度実行して戻り値を見ることを理解していませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問