PHPのmove_uploaded_file()関数の詳しい説明
この記事では、アップロードされたファイルを実際に新しい場所に移動する PHP の move_uploaded_file() 関数を主に紹介します。必要な方は参考にしていただければ幸いです。
move_uploaded_file()
関数は、アップロードされたファイルを新しい場所に移動します。
成功した場合は true を返し、それ以外の場合は false を返します。
構文
move_uploaded_file(file,newloc)
パラメータ | 説明 |
---|---|
file | 必須。移動するファイルを指定します。 |
newloc | 必須。ファイルの新しい場所を指定します。 |
説明
この関数は、file で指定されたファイルが正当なアップロード ファイル (つまり、PHP の HTTP POST アップロード メカニズムを通じてアップロードされたファイル) であることをチェックし、保証します。ファイルが正当な場合、そのファイルは newloc で指定されたファイルに移動されます。
ファイルが合法的にアップロードされたファイルではない場合、操作は行われず、move_uploaded_file() は false を返します。
ファイルが有効なアップロード ファイルであるにもかかわらず、何らかの理由で移動できない場合、アクションは実行されず、move_uploaded_file() は false を返し、警告が発行されます。
この種のチェックは、アップロードされたファイルによってそのコンテンツがこのシステムのユーザーまたは他のユーザーに表示される可能性がある場合に特に重要です。
ヒントとメモ
注: この機能は、HTTP POST 経由でアップロードされたファイルにのみ使用されます。
注: 対象のファイルが既に存在する場合は上書きされます。
セキュリティに関する補足
w3c からの紹介として、私が遭遇した問題について話しましょう。
一般的に、保存ファイルは次のように書きます:
$fileName = $_SERVER['DOCUMENT_ROOT'].'/Basic/uploads/'.$_FILES['file']['name']; move_uploaded_file($_FILES['file']['tmp_name'],$fileName )
まず、これら 2 行のコードの意味を説明します: ファイルを直接保存します。ファイル名はユーザーがアップロードしたファイル名でもあります。
さて、次はリスクです:
① ファイルを直接保存します。
これは、ユーザーが背景コードをアップロードして jpg などのサフィックスとして保存した場合、管理者がそれを誤って php にマッピングしてから背景にアクセスした場合、そのファイルはいかなる方法でも識別されないことを意味します。想像できますが、バックグラウンドですべてのデータベースを削除すると、Web サイト全体が直接 GG になります。つまり、ファイルを直接保存するのは非常に危険です。
②ファイル名はユーザーファイル名と同じにしてください。
ユーザーが中国語のファイル名を使用すると、上記のコードはエラーを報告します。
ファイル名が英語+数字であれば問題ありませんが、中国語が含まれている場合は大きな問題となり、再エンコードする必要があります。
信頼できるストレージは次のようにあるべきだと思います:
①ユーザーがアップロードしたファイルは識別されなければなりません。
ファイル認識、この部分には多くの機能がありますが、これも偽造が難しいMIMEタイプを使用するのが良いと思います。
②ファイル名を変更する。
ファイル名を「201803264104421」のような時刻形式に変更するか、ファイル名をデータベースと一致させることもできると思います。
追加:
には2つのパラメータがあります。最初のパラメータは、アップロード後の一時ファイル名で、システムによって自動的に生成されます。通常、スタイルは次のとおりです:
$_FILE["file"]["tmp_name"];
ここで、file はフロントエンド ファイル アップロード フォームの名前です。
2 番目のパラメータは、パスを含む新しいファイル名です。例:
"upload/1.jpg";
この方法では、アップロードしたファイルは現在のディレクトリの Upload という名前のサブディレクトリに移動され、ファイル名は 1.jpg として保存されます。
move_uploaded_file() 関数の例
move_uploaded_file() 関数を使用して、ファイルをサーバーにアップロードします。
<?php $tmp_filename = $_FILES['myupload']['tmp_name']; if(!move_uploaded_file($tmp_filename,"/path/to/dest/{$_FILES['myupload']['name']}")) { echo "An error has occurred moving the uploaded file.<BR>"; echo "Please ensure that if safe_mode is on that the " . "UID PHP is using matches the file."; exit; } else { echo "The file has been successfully uploaded!"; } ?>
move_uploaded_file ファイルのアップロードの失敗事例と解決策
今日、ユーザー登録時にアバター画像ファイルをアップロードする PHP スクリプトを実装するときに問題が発生しました。PHP スクリプト コードは次のとおりです:
<?php define('ROOT',dirname(__FILE__).'/'); if ($_FILES["file"]["error"] > 0) { echo "Return Code: " . $_FILES["file"]["error"] . "<br />"; } else { echo "Upload: " . $_FILES["file"]["name"] . "<br />"; echo "Type: " . $_FILES["file"]["type"] . "<br />"; echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />"; echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />"; if (file_exists("upload/" . $_FILES["file"]["name"])) { echo $_FILES["file"]["name"] . " already exists. "; } else { if(is_uploaded_file($_FILES['file']['tmp_name'])){ $stored_path = ROOT.'/upload/'.basename($_FILES['file']['name']); if(move_uploaded_file($_FILES['file']['tmp_name'],$stored_path)){ echo "Stored in: " . $stored_path; }else{ echo 'Stored failed:file save error'; } }else{ echo 'Stored failed:no post '; } } } ?>
上記のスクリプトを実行すると、スクリプトは「保存に失敗しました: ファイル保存エラー」と出力しました。これは明らかにエラーでした。php_error_log ファイルに、エラーが発生した場所が見つかりました。イメージの宛先ディレクトリには、PHP を実行するユーザーのアクセス許可がないため、PHP スクリプトを実行するユーザーは、スクリプト コードを記述してイメージ フォルダーを作成したユーザーと同じではないため、ファイルのアクセス許可を次のように変更するだけで済みます。 777。
PHP開発学習ファイルアップロード(move_uploaded_file)
機能: アップロードした一時ファイルをアップロードディレクトリに移動 アップロードがルートディレクトリに作成されました。 ! !
<form action="" enctype="multipart/form-data" method="post" name="uploadfile">上传文件:<input type="file" name="upfile" /><br> <input type="submit" value="上传" /></form> <?php //print_r($_FILES["upfile"]); if(is_uploaded_file($_FILES['upfile']['tmp_name'])){ $upfile=$_FILES["upfile"]; //获取数组里面的值 $name=$upfile["name"];//上传文件的文件名 $type=$upfile["type"];//上传文件的类型 $size=$upfile["size"];//上传文件的大小 $tmp_name=$upfile["tmp_name"];//上传文件的临时存放路径 //判断是否为图片 switch ($type){ case 'image/pjpeg':$okType=true; break; case 'image/jpeg':$okType=true; break; case 'image/gif':$okType=true; break; case 'image/png':$okType=true; break; } if($okType){ /** * 0:文件上传成功<br/> * 1:超过了文件大小,在php.ini文件中设置<br/> * 2:超过了文件的大小MAX_FILE_SIZE选项指定的值<br/> * 3:文件只有部分被上传<br/> * 4:没有文件被上传<br/> * 5:上传文件大小为0 */ $error=$upfile["error"];//上传后系统返回的值 echo "================<br/>"; echo "上传文件名称是:".$name."<br/>"; echo "上传文件类型是:".$type."<br/>"; echo "上传文件大小是:".$size."<br/>"; echo "上传后系统返回的值是:".$error."<br/>"; echo "上传文件的临时存放路径是:".$tmp_name."<br/>"; echo "开始移动上传文件<br/>"; //把上传的临时文件移动到upload目录下面(upload是在根目录下已经创建好的!!!) move_uploaded_file($tmp_name,"upload/".$name); $destination="upload/".$name; echo "================<br/>"; echo "上传信息:<br/>"; if($error==0){ echo "文件上传成功啦!"; echo "<br>图片预览:<br>"; echo "<img src=".$destination.">"; //echo " alt=\"图片预览:\r文件名:".$destination."\r上传时间:\">"; }elseif ($error==1){ echo "超过了文件大小,在php.ini文件中设置"; }elseif ($error==2){ echo "超过了文件的大小MAX_FILE_SIZE选项指定的值"; }elseif ($error==3){ echo "文件只有部分被上传"; }elseif ($error==4){ echo "没有文件被上传"; }else{ echo "上传文件大小为0"; } }else{ echo "请上传jpg,gif,png等格式的图片!"; } } ?>
実行結果:
関連する推奨事項:
PHP move_uploaded_file() 関数に関する推奨記事 10 件
以上がPHPのmove_uploaded_file()関数の詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











オープン ソースの詳細については、次のサイトを参照してください。 51CTO Honmeng 開発者コミュニティ https://ost.51cto.com 実行環境 DAYU200:4.0.10.16SDK: 4.0.10.15IDE: 4.0.600 1. アプリケーションを作成するには、[ファイル] をクリックします。 >新しいファイル ->プロジェクトの作成。テンプレートを選択します: [OpenHarmony] EmptyAbility: プロジェクト名 shici、アプリケーション パッケージ名 com.nut.shici、およびアプリケーションの保存場所 XXX (中国語、特殊文字、スペースは含まれません) を入力します。 CompileSDK10、モデル: ステージ。デバイス

ファイルのサイズを取得するには、Java の File.length() 関数を使用します。ファイル操作を扱うとき、ファイル サイズは非常に一般的な要件です。Java では、ファイルのサイズを取得するための非常に便利な方法、つまり length( ) File クラスのメソッド。この記事では、このメソッドを使用してファイルのサイズを取得する方法と、対応するコード例を紹介します。まず、サイズを取得したいファイルを表す File オブジェクトを作成する必要があります。 File オブジェクトを作成する方法は次のとおりです: Filef

PHP BLOB をファイルに変換する方法: 1. PHP サンプル ファイルを作成します; 2. 「function blobToFile(blob) {return new File([blob], 'screenshot.png', { type: 'image/jpeg' })」を通じて} 」メソッドを使用して、Blob をファイルに変換できます。

Java の File.renameTo() 関数を使用してファイルの名前を変更する Java プログラミングでは、ファイルの名前を変更する必要がよくあります。 Java には、ファイル操作を処理するための File クラスが用意されており、その renameTo() 関数でファイルの名前を簡単に変更できます。この記事では、Java の File.renameTo() 関数を使用してファイルの名前を変更する方法と、対応するコード例を紹介します。 File.renameTo() 関数は、File クラスのメソッドです。

ファイルの親ディレクトリを取得するには、Java の File.getParentFile() 関数を使用します Java プログラミングでは、ファイルやフォルダーを操作する必要がよくあります。ファイルの親ディレクトリを取得する必要がある場合は、Java が提供する File.getParentFile() 関数を使用できます。この記事では、この関数の使用方法とコード例を説明します。 Java の File クラスは、ファイルやフォルダーを操作するために使用される主なクラスです。ファイルのプロパティを取得および操作するための多くのメソッドを提供します

ファイルの親パスを取得するには、Java の File.getParent() 関数を使用します Java プログラミングでは、ファイルやフォルダーを操作する必要がよくあります。場合によっては、ファイルの親パス、つまりファイルが存在するフォルダーのパスを取得する必要があることがあります。 Java の File クラスには、ファイルまたはフォルダーの親パスを取得する getParent() メソッドが用意されています。 File クラスは、ファイルとフォルダーを Java で抽象表現したもので、ファイルとフォルダーを操作するための一連のメソッドを提供します。その中で、手に入れてください

Java で File.delete() メソッドを使用してファイルまたはディレクトリを削除するにはどうすればよいですか?概要: Java では、File クラスの delete() メソッドを使用してファイルまたはディレクトリを削除できます。このメソッドは、指定されたファイルまたはディレクトリを削除するために使用されます。ただし、この方法では、他のプログラムによって開かれていない空のディレクトリまたはファイルしか削除できないことに注意してください。ファイルまたはディレクトリの削除が失敗した場合は、IOException をキャッチすることで特定の理由を見つけることができます。ステップ 1: 関連パッケージをインポートする まず、

Android アーキテクチャの基礎知識 カーネル カーネル層の脆弱性は極めて有害 汎用ドライバは多数かつ複雑であり、脆弱性も多数存在する可能性がある ライブラリ システム ランタイム ライブラリ層 システム ミドルウェアは、libc、WebKit、SQLite などのランタイム ライブラリを提供します。 AndroidRunTimeDalvik virtual マシンおよびカーネル ライブラリ FrameWork アプリケーション フレームワーク層は、一連のサービスと API インターフェイスを提供します アクティビティ マネージャー コンテンツ プロバイダー ビュー リソース マネージャー 通知マネージャー アプリケーション アプリケーション層 システム アプリケーション ホーム画面 ホーム、連絡先、電話、ブラウザー その他 アプリケーション開発者はアプリケーションを使用しますフレームワーク層へ
