PHPファイルアップロードの知識と応用

jacklove
リリース: 2023-03-25 13:44:01
オリジナル
1501 人が閲覧しました

phpファイルのアップロードはWebサイトにおいて重要な役割を果たしており、この記事で詳しく説明しています。

ファイルアップロードフォームの作成

ユーザーがフォームからファイルをアップロードできるようにすると非常に便利です。

以下のファイルをアップロードするための HTML フォームをご覧ください:

<html><head><meta charset="utf-8"><title>菜鸟教程(runoob.com)</title></head><body><form action="upload_file.php" method="post" enctype="multipart/form-data">    <label for="file">文件名:</label>    <input type="file" name="file" id="file"><br>    <input type="submit" name="submit" value="提交"></form></body></html>
ログイン後にコピー

上記のコードを form.html ファイルに保存します。

上記の HTML フォームに関するいくつかの注意事項を以下に示します。

タグの enctype 属性は、フォームを送信するときに使用するコンテンツ タイプを指定します。フォームにファイル コンテンツなどのバイナリ データが必要な場合は、「multipart/form-data」を使用します。

タグの type="file" 属性は、入力をファイルとして処理することを指定します。たとえば、ブラウザでプレビューすると、入力ボックスの横に参照ボタンが表示されます。

注: ユーザーにファイルのアップロードを許可すると、セキュリティ上の大きなリスクが生じます。信頼できるユーザーのみにファイルのアップロード操作を許可してください。

アップロード スクリプトを作成します

「upload_file.php」ファイルには、ファイルをアップロードするためのコードが含まれています:

<?phpif ($_FILES["file"]["error"] > 0){    echo "错误:" . $_FILES["file"]["error"] . "<br>";}else{    echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";    echo "文件类型: " . $_FILES["file"]["type"] . "<br>";    echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";    echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"];}?>
ログイン後にコピー

PHP のグローバル配列 $_FILES を使用することにより、クライアント コンピューターからリモート サーバーにファイルをアップロードできます。

最初のパラメータはフォームの入力名で、2 番目の添え字は「name」、「type」、「size」、「tmp_name」、または「error」です。以下に示すように:

$_FILES["file"]["name"] - アップロードされたファイルの名前

$_FILES["file"]["type"] - アップロードされたファイルのタイプ

$_FILES ["file" ]["size"] - アップロードされたファイルのサイズ (バイト単位)

$_FILES["file"]["tmp_name"] - サーバーに保存されているファイルの一時コピーの名前

$_FILES["file"] ["error"] - ファイルのアップロードによって引き起こされるエラー コード

これはファイルをアップロードする非常に簡単な方法です。セキュリティ上の理由から、ファイルのアップロードを許可するユーザーに制限を追加する必要があります。

アップロード制限

このスクリプトでは、ファイルのアップロードに制限を追加しました。ユーザーがアップロードできるのは .gif、.jpeg、.jpg、.png ファイルのみであり、ファイル サイズは 200 KB 未満である必要があります:

<?php// 允许上传的图片后缀$allowedExts = array("gif", "jpeg", "jpg", "png");$temp = explode(".", $_FILES["file"]["name"]);$extension = end($temp);        // 获取文件后缀名if ((($_FILES["file"]["type"] == "image/gif")|| ($_FILES["file"]["type"] == "image/jpeg")|| ($_FILES["file"]["type"] == "image/jpg")|| ($_FILES["file"]["type"] == "image/pjpeg")|| ($_FILES["file"]["type"] == "image/x-png")|| ($_FILES["file"]["type"] == "image/png"))&& ($_FILES["file"]["size"] < 204800)    // 小于 200 kb&& in_array($extension, $allowedExts)){    if ($_FILES["file"]["error"] > 0)    {        echo "错误:: " . $_FILES["file"]["error"] . "<br>";    }    else    {        echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";        echo "文件类型: " . $_FILES["file"]["type"] . "<br>";        echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";        echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"];    }}else{    echo "非法的文件格式";}?>
ログイン後にコピー

アップロードされたファイルを保存します

上記の例では、アップロードされたファイルが PHP 一時フォルダーに作成されます。サーバー ファイルの一時コピー。

この一時コピーファイルはスクリプトが終了すると消えます。アップロードされたファイルを保存するには、それを別の場所にコピーする必要があります:

<?php// 允许上传的图片后缀$allowedExts = array("gif", "jpeg", "jpg", "png");$temp = explode(".", $_FILES["file"]["name"]);echo $_FILES["file"]["size"];$extension = end($temp);     // 获取文件后缀名if ((($_FILES["file"]["type"] == "image/gif")|| ($_FILES["file"]["type"] == "image/jpeg")|| ($_FILES["file"]["type"] == "image/jpg")|| ($_FILES["file"]["type"] == "image/pjpeg")|| ($_FILES["file"]["type"] == "image/x-png")|| ($_FILES["file"]["type"] == "image/png"))&& ($_FILES["file"]["size"] < 204800)   // 小于 200 kb&& in_array($extension, $allowedExts)){    if ($_FILES["file"]["error"] > 0)    {        echo "错误:: " . $_FILES["file"]["error"] . "<br>";    }    else    {        echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";        echo "文件类型: " . $_FILES["file"]["type"] . "<br>";        echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";        echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"] . "<br>";        
        // 判断当期目录下的 upload 目录是否存在该文件        // 如果没有 upload 目录,你需要创建它,upload 目录权限为 777        if (file_exists("upload/" . $_FILES["file"]["name"]))        {            echo $_FILES["file"]["name"] . " 文件已经存在。 ";        }        else        {            // 如果 upload 目录不存在该文件则将文件上传到 upload 目录下            move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);            echo "文件存储在: " . "upload/" . $_FILES["file"]["name"];        }    }}else{    echo "非法的文件格式";}?>
ログイン後にコピー

この記事では、PHP アップロード ファイルについて詳しく説明します。その他の学習資料については、PHP 中国語 Web サイトを参照してください。

関連する推奨事項:

PHP ループ - While ループの理解と使用

PHP 5 の echo および print ステートメントの関連知識と応用

PHP マジック変数の理解と応用

以上がPHPファイルアップロードの知識と応用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート