현재 위치: > 최신 기사 목록> PHP 파일에 의해 업로드 된 임시 디렉토리의 경로를 수정하기 위해 ini_set 함수를 사용하는 방법은 무엇입니까? 팁과 방법

PHP 파일에 의해 업로드 된 임시 디렉토리의 경로를 수정하기 위해 ini_set 함수를 사용하는 방법은 무엇입니까? 팁과 방법

gitbox 2025-08-27

PHP 개발에서 파일 업로드는 일반적인 요구 사항이며, 파일 업로드시 임시 스토리지 위치는 종종 성능, 보안 및 서버 구성에 무시할 수없는 영향을 미칩니다. 기본적으로 PHP는 php.ini 에서 임시 디렉토리로 구성된 upload_tmp_dir 경로를 사용하지만 런타임 에서이 설정을 동적으로 변경할 수도 있습니다. 이 기사는 INI_SET 기능을 사용하여 PHP 파일에서 업로드 한 임시 디렉토리를 수정하고 몇 가지 실용적인 팁과 예방 조치를 제공하는 방법을 자세히 소개합니다.

1. ini_set 소개

ini_set ()은 런타임시 구성 항목을 수정하기 위해 PHP가 제공하는 함수입니다. 기본 구문은 다음과 같습니다.

 <span><span><span class="hljs-title function_ invoke__">ini_set</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$option</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span>|</span><span><span class="hljs-keyword">int</span></span><span>|</span><span><span class="hljs-keyword">float</span></span><span>|</span><span><span class="hljs-keyword">bool</span></span><span>|</span><span><span class="hljs-literal">null</span></span><span> </span><span><span class="hljs-variable">$value</span></span><span>): </span><span><span class="hljs-keyword">string</span></span><span>|</span><span><span class="hljs-literal">false</span></span><span>
</span></span>

이 함수는 지정된 구성 옵션을 수정하고 성공하면 이전 값을 반환하고 실패하면 False를 반환하려고합니다.

그러나 항목의 "가변 범위 (php_ini_*)에 따라 모든 구성 항목을 런타임에 수정할 수있는 것은 아닙니다 .

2. 임시 디렉토리 업로드 목적을 수정하십시오

기본 구성에서 파일 업로드는 시스템 수준 (예 : /TMP )의 임시 디렉토리에 임시로 저장됩니다. 수정하는 것은 다음과 같은 목적을 가질 수 있습니다.

  • 디스크 I/O 성능 향상 (예 : SSD 경로 사용)

  • 쉽게 유지 보수를 위해 응용 프로그램 데이터 및 시스템 데이터를 별도로 제공합니다

  • 보안을 개선하고 다른 서비스가 스캔하는 임시 파일을 피하십시오.

  • 다중 사용자 시스템 또는 컨테이너화 된 배포의 분리 요구 사항에 응답

3. INI_SET를 사용하여 업로드 임시 디렉토리를 수정하십시오

PHP 스크립트에서 임시 디렉토리 업로드를 수정하려면 다음 코드를 사용할 수 있습니다.

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$customTmpDir</span></span><span> = </span><span><span class="hljs-string">'/path/to/custom/tmp'</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">ini_set</span></span><span>(</span><span><span class="hljs-string">'upload_tmp_dir'</span></span><span>, </span><span><span class="hljs-variable">$customTmpDir</span></span><span>);
</span></span>

예 : 파일 업로드 및 임시 경로 인쇄

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$customTmpDir</span></span><span> = </span><span><span class="hljs-string">'/var/www/project/tmp_uploads'</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">ini_set</span></span><span>(</span><span><span class="hljs-string">'upload_tmp_dir'</span></span><span>, </span><span><span class="hljs-variable">$customTmpDir</span></span><span>);

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$_SERVER</span></span><span>[</span><span><span class="hljs-string">'REQUEST_METHOD'</span></span><span>] === </span><span><span class="hljs-string">'POST'</span></span><span> &amp;&amp; </span><span><span class="hljs-keyword">isset</span></span><span>(</span><span><span class="hljs-variable">$_FILES</span></span><span>[</span><span><span class="hljs-string">'myfile'</span></span><span>])) {
    </span><span><span class="hljs-variable">$tmpPath</span></span><span> = </span><span><span class="hljs-variable">$_FILES</span></span><span>[</span><span><span class="hljs-string">'myfile'</span></span><span>][</span><span><span class="hljs-string">'tmp_name'</span></span><span>];
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"업로드하는 임시 경로는 다음과 같습니다: <span class="hljs-subst">$tmpPath</span></span></span><span>";

    </span><span><span class="hljs-comment">// 대상 디렉토리로 이동하십시오</span></span><span>
    </span><span><span class="hljs-title function_ invoke__">move_uploaded_file</span></span><span>(</span><span><span class="hljs-variable">$tmpPath</span></span><span>, </span><span><span class="hljs-keyword">__DIR__</span></span><span> . </span><span><span class="hljs-string">'/uploads/'</span></span><span> . </span><span><span class="hljs-title function_ invoke__">basename</span></span><span>(</span><span><span class="hljs-variable">$_FILES</span></span><span>[</span><span><span class="hljs-string">'myfile'</span></span><span>][</span><span><span class="hljs-string">'name'</span></span><span>]));
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>

&lt;form method=</span><span><span class="hljs-string">"post"</span></span><span> enctype=</span><span><span class="hljs-string">"multipart/form-data"</span></span><span>&gt;
    &lt;input type=</span><span><span class="hljs-string">"file"</span></span><span> name=</span><span><span class="hljs-string">"myfile"</span></span><span> /&gt;
    &lt;button type=</span><span><span class="hljs-string">"submit"</span></span><span>&gt;업로드&lt;/button&gt;
&lt;/form&gt;
</span></span>

4. 주목할만한 것들

  1. 디렉토리가 존재해야합니다
    upload_tmp_dir 로 지정된 디렉토리는 존재해야하며 웹 서버 사용자 (예 : www-data)는 쓰기 권한이 있으므로 업로드가 실패하고 $ _files가 비어 있습니다.

  2. 제한된 행동 범위
    ini_set () 설정은 현재 스크립트 실행에만 유효합니다. mod_php 와 같은 Apache 환경을 사용하는 경우 스크립트가 실행되기 전에 업로드 동작이 완료 될 수 있으며이 경우 설정이 유효하지 않습니다.

  3. CLI 또는 FPM 모드 <br>에 적합합니다 PHP-FPM 또는 CLI 모드에서 INI_SET ()는 특히 Move_Uploaded_File ()을 실행하기 전에 설정 한 경우 동작에 성공적으로 영향을 줄 가능성이 높습니다.

  4. 대안 : php.ini 또는 .user.ini를 구성하십시오
    영구 설정이 필요한 경우 php.ini를 수정하거나 .user.ini 파일 (FPM 또는 CGI와 같은 특정 환경에서 지원)을 사용하는 것이 좋습니다.

     <span><span><span class="hljs-attr">upload_tmp_dir</span></span><span> = /var/www/project/tmp_uploads
    </span></span>

5. 요약

INI_SET을 사용하면 런타임에서 PHP 구성을 수정할 수있는 유연성이 허용되지만 임시 디렉토리를 설정할 때 특히 실행 환경이이를 허용 할 수 있도록 특별한주의가 필요합니다. 조건이 허용되면 구성 파일 레벨 설정이 더 안정적이고 신뢰할 수 있습니다. 어떤 방법을 사용하든 업로드 프로세스 및 서버 권한 구조를 이해하는 것은 항상 업로드 기능의 안정적인 작동을 보장하기위한 기초입니다.