>백엔드 개발 >PHP 문제 >PHP로 파일을 업로드하는 방법은 무엇입니까? 읽고 나면 이해하게 될 거예요!

PHP로 파일을 업로드하는 방법은 무엇입니까? 읽고 나면 이해하게 될 거예요!

WBOY
WBOY원래의
2021-10-19 13:48:503451검색

이전 글에서는 "PHP에서 파일 속성을 얻고 감지하는 방법은 무엇인가요?"를 가져왔습니다. (요약 공유) "에서는 PHP의 파일 속성에 대한 지식을 자세히 소개합니다. 이번 글에서는 PHP에서 파일을 업로드하는 방법을 살펴보겠습니다. 모두에게 도움이 되기를 바랍니다!

PHP로 파일을 업로드하는 방법은 무엇입니까? 읽고 나면 이해하게 될 거예요!

우리는 일상생활에서 친구들에게 사진을 업로드하거나 이메일에 첨부된 파일을 보내는 등 파일을 업로드하는 단계를 자주 접하게 됩니다. 따라서 PHP 코드에서 파일을 업로드하려면 어떻게 해야 할까요? ? 파일 업로드는 PHP 파일 시스템에서 매우 중요한 기능 중 하나이므로 이러한 기능을 구현하는 방법을 살펴보겠습니다.

php.ini 구성php.ini

想要使用文件上传的功能,首先我们需要配置php.ini,对其中的参数进行合理地设置。那我们先来看一下应该怎样去找到php.ini文件。示例如下:

首先我们输入:

<?php
phpinfo();
?>

输出结果:

PHP로 파일을 업로드하는 방법은 무엇입니까? 읽고 나면 이해하게 될 거예요!

由上述结果中,在Loaded Configuration File一栏中可以看到php.ini的具体路径。由此便找到了php.ini文件。

php.ini中的文件太多可以使用ctrl+F来搜索相关配置项。那我们需要配置的参数如下:

  • file_uploads: on,说明服务器开启了文件上传功能;如果为 off,则说明服务器关闭了文件上传功能。

  • upload_tmp_dir:上传文件的临时目录。在文件被成功上传之前,文件首先会存放到服务器端的临时目录中,不设置的为系统默认的目录。

  • upload_max_filesize:服务器允许上传文件的最大值,以MB为单位。

  • max_execution_time:PHP 中一个指令所能执行的最大时间,单位是秒。

  • memory_limit:PHP 中一个指令所分配的内存空间,单位是 MB。

其中我们需要注意的是:配置完成后想要配置生效的话,需要重启Apache 服务器,配置的参数才生效。

预定义变量 $_FILES

在我们配置完php.ini之后,我们就需要通过预定义变量$_FILES 来对上传文件做一些限制和判断。$_FILES 变量存储的是上传文件的相关信息,其需要保存的信息如下:

  • $_FILES[filename][name]:保存上传文件的文件名    

  • $_FILES[filename][size]  :  保存上传文件的大小    

  • $_FILES[filename][tmp_name]  :  保存上传文件的临时名称    

  • $_FILES[filename][type]    :保存上传文件的类型    

  • $_FILES[filename][error]  :  保存上传文件结果的代号,0 则表示成功

我们可以通过预定义变量 $_FILES结合HTML进行示例如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>PHP文件上传</title>
</head>
<body>
    <form action="" method="post" enctype="multipart/form-data">
        <input type="file" name="upfile">
        <input type="submit" value="上传">
    </form>
</body>
</html>
<?php
    if(!empty($_FILES)){
        foreach ($_FILES[&#39;upfile&#39;] as $key => $value) {
            echo $key.&#39;=>&#39;.$value.&#39;<br>&#39;;
        }
    }
?>

运行程序后,根据表单选择要上传的文件,我以test1.txt为例,输出结果为:

PHP로 파일을 업로드하는 방법은 무엇입니까? 읽고 나면 이해하게 될 거예요!

根据保存的信息我们可以得出该文件的相关信息:

文件名为test1.txt;上传文件的类型为text/plain;保存上传文件的临时名称为C:WindowsphpD16F.tmp;0 则表示上传文件成功;文件的大小为5。

单文件上传

通过上面的代码,我们已经得到了要上传文件的基本信息,接下来我们需要使用 move_uploaded_file() 函数来实现上传。它的主要功能就是把刚才上传的文件移动到一个新的位置。它的语法格式如下:

move_uploaded_file(string $filename, string $destination)

其中$filenameb表示的是上传文件的文件名,这个文件名并不是上传文件的原文件名,而是通过上一步$_FILES中tmp_name得到的文件名;$destinationb
파일 업로드 기능을 사용하려면 먼저 php.ini를 구성하고 매개변수를 적절하게 설정해야 합니다. 먼저 php.ini 파일을 찾는 방법을 살펴보겠습니다. 예는 다음과 같습니다.

먼저 입력합니다:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>PHP文件上传</title>
</head>
<body>
    <form action="" method="post" enctype="multipart/form-data">
        <input type="file" name="upfile">
        <input type="submit" value="上传">
    </form>
</body>
</html>
<?php
    if(!empty($_FILES)){
        $tmpname   = $_FILES[&#39;upfile&#39;][&#39;tmp_name&#39;];     // 临时文件名称
        $name      = $_FILES[&#39;upfile&#39;][&#39;name&#39;];         // 文件的原名称
        $path      = &#39;./phptest&#39;;                       // 上传目录
        $file_name = date(&#39;YmdHis&#39;).rand(100,999).$name;// 避免文件重名,更改文件名称
        if(move_uploaded_file($tmpname, $path.&#39;/&#39;.$file_name)){
            echo $name." 上传成功!";
        }else{
            echo $name." 上传失败!";
        }
    }
?>

출력 결과:

PHP로 파일을 업로드하는 방법은 무엇입니까? 읽고 나면 이해하게 될 거예요!

위 결과에서 로드된 구성 파일 열에서 php.ini의 특정 경로를 확인할 수 있습니다. 이로 인해 php.ini 파일이 발견되었습니다. PHP로 파일을 업로드하는 방법은 무엇입니까? 읽고 나면 이해하게 될 거예요!

php.ini에 파일이 너무 많으면 Ctrl+F를 사용하여 관련 구성 항목을 검색할 수 있습니다. 그런 다음 구성해야 하는 매개변수는 다음과 같습니다: 🎜
  • 🎜file_uploads: on, 서버가 파일을 활성화했음을 나타냅니다. 업로드 기능이 꺼져 있으면 서버가 파일 업로드 기능을 껐다는 의미입니다. 🎜
  • 🎜upload_tmp_dir: 파일 업로드를 위한 임시 디렉터리입니다. 파일이 성공적으로 업로드되기 전에 파일은 먼저 서버 측의 임시 디렉터리에 저장됩니다. 설정되지 않은 경우 해당 디렉터리가 시스템 기본 디렉터리가 됩니다. 🎜
  • 🎜upload_max_filesize: 서버에서 업로드할 수 있는 최대 파일 크기(MB)입니다. 🎜
  • 🎜max_execution_time: PHP에서 명령을 실행할 수 있는 최대 시간(초)입니다. 🎜
  • 🎜memory_limit: PHP에서 명령으로 할당된 메모리 공간(MB)입니다. 🎜
🎜주의해야 할 점은 구성이 완료된 후 구성을 적용하려면 Apache 서버를 다시 시작해야 구성된 매개변수가 적용된다는 것입니다. 🎜🎜🎜🎜사전 정의된 변수 $_FILES🎜🎜php.ini를 구성한 후 사전 정의된 변수 $_FILES를 사용하여 업로드된 파일에 대해 몇 가지 제한과 판단을 내려야 합니다. $_FILES 변수는 업로드된 파일에 대한 정보를 저장합니다. 저장해야 하는 정보는 다음과 같습니다: 🎜
  • 🎜$_FILES[filename][ name] : 업로드된 파일의 파일 이름을 저장합니다 🎜
  • 🎜$_FILES[filename][size] : 업로드된 파일의 크기를 저장합니다 🎜 li>
  • 🎜 $_FILES[filename][tmp_name] : 업로드된 파일의 임시 이름을 저장합니다 🎜
  • 🎜$_FILES[filename][type] : 업로드된 파일을 저장합니다. 🎜
  • 🎜$_FILES[filename][error] : 업로드된 파일 결과의 코드 이름을 저장합니다. 0은 성공을 의미합니다🎜
🎜미리 정의된 변수 $_FILES를 HTML과 결합하여 사용하는 예는 다음과 같습니다. 🎜
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>PHP文件上传</title>
</head>
<body>
    <form action="" method="post" enctype="multipart/form-data">
        <input type="file" name="upfile[]"><br>
        <input type="file" name="upfile[]"><br>
        <input type="file" name="upfile[]"><br>
        <input type="submit" value="上传">
    </form>
</body>
</html>
<?php
    if(!empty($_FILES)){
        $tmpname = $_FILES[&#39;upfile&#39;][&#39;tmp_name&#39;];
        $name = $_FILES[&#39;upfile&#39;][&#39;name&#39;];
        $path = &#39;./phptest&#39;;
        for ($i=0; $i < count($tmpname); $i++) {
            $file_name = date(&#39;YmdHis&#39;).rand(100,999).$name[$i];
            if(move_uploaded_file($tmpname[$i], $path.&#39;/&#39;.$file_name)){
                echo $name[$i].&#39; 上传成功!<br>&#39;;
            }else{
                echo $name[$i].&#39; 上传失败!<br>&#39;;
            }
        }
    }
?>
🎜프로그램을 실행한 후 test1.txt 형식에 따라 업로드할 파일을 선택합니다. 출력 결과는 다음과 같습니다. 🎜🎜1019.11 .png🎜🎜저장된 정보에 따라 파일의 관련 정보를 얻을 수 있습니다. 정보: 🎜🎜파일 이름은 test1.txt, 업로드된 파일 형식은 text/plain, 저장할 임시 이름 업로드된 파일은 C:WindowsphpD16F.tmp입니다. 0은 파일 크기가 5임을 의미합니다. 🎜🎜🎜🎜단일 파일 업로드🎜🎜위의 코드를 통해 업로드할 파일의 기본 정보를 얻었습니다. 다음으로 move_uploaded_file()을 사용해야 합니다. > 기능 업로드를 구현합니다. 주요 기능은 방금 업로드한 파일을 새 위치로 이동하는 것입니다. 구문 형식은 다음과 같습니다. 🎜rrreee🎜여기서 $filenameb는 업로드된 파일의 파일 이름을 나타냅니다. 이 파일 이름은 업로드된 파일의 원래 파일 이름이 아니라 $_FILES의 tmp_name을 통해 얻습니다. 이전 단계에서 파일 이름, $destinationb는 업로드된 파일이 이동할 위치를 나타냅니다. 🎜🎜🎜실행 함수는 성공적으로 실행되면 TRUE를 반환하고, 실패하면 FALSE를 반환합니다. 🎜🎜다음으로 예를 살펴보겠습니다. 🎜🎜지금 방금 test1.txt 파일을 루트 디렉터리에 생성한 phptest라는 폴더에 업로드합니다. 작업은 다음과 같습니다. 🎜rrreee🎜에 따라 파일을 업로드한 후. 양식을 작성하면 출력 결과는 다음과 같습니다.🎜🎜🎜🎜

如此则表示我想要上传的test2.txt已经上传到我需要的目录中了:

PHP로 파일을 업로드하는 방법은 무엇입니까? 읽고 나면 이해하게 될 거예요!

多文件上传

通过上述示例已经了解了单文件上传的过程,但是在日常使用中经常会用到的是多文件上传,那多文件上传应该怎么操作呢?

示例如下:

还和上面的示例一样,上传多个文件到我在根目录里创建的phptest文件夹里

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>PHP文件上传</title>
</head>
<body>
    <form action="" method="post" enctype="multipart/form-data">
        <input type="file" name="upfile[]"><br>
        <input type="file" name="upfile[]"><br>
        <input type="file" name="upfile[]"><br>
        <input type="submit" value="上传">
    </form>
</body>
</html>
<?php
    if(!empty($_FILES)){
        $tmpname = $_FILES[&#39;upfile&#39;][&#39;tmp_name&#39;];
        $name = $_FILES[&#39;upfile&#39;][&#39;name&#39;];
        $path = &#39;./phptest&#39;;
        for ($i=0; $i < count($tmpname); $i++) {
            $file_name = date(&#39;YmdHis&#39;).rand(100,999).$name[$i];
            if(move_uploaded_file($tmpname[$i], $path.&#39;/&#39;.$file_name)){
                echo $name[$i].&#39; 上传成功!<br>&#39;;
            }else{
                echo $name[$i].&#39; 上传失败!<br>&#39;;
            }
        }
    }
?>

输出结果:

PHP로 파일을 업로드하는 방법은 무엇입니까? 읽고 나면 이해하게 될 거예요!

如此结果显示,多个文件已经上传到我的文件夹里了:

PHP로 파일을 업로드하는 방법은 무엇입니까? 읽고 나면 이해하게 될 거예요!

推荐学习:《PHP视频教程

위 내용은 PHP로 파일을 업로드하는 방법은 무엇입니까? 읽고 나면 이해하게 될 거예요!의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.