PHP의 기본 임시 생성 파일 디렉터리를 가져옵니다
Linux 운영 체제를 공부한 사람들은 /tmp 디렉터리(보통 Windows에서는 C:WindowsTemp)라는 디렉터리가 있다는 것을 알고 있을 것입니다. 일부 시스템 파일 임시 파일을 저장하기 위해 이 디렉터리를 임시 파일 디렉터리라고도 합니다. 많은 소프트웨어는 일부 캐시, 임시로 생성된 스크립트 등을 포함하여 일부 임시로 저장된 파일을 이 디렉토리에 배치합니다. 또한 PHP는 기본적으로 임시 파일 디렉터리를 이 디렉터리로 지정하며 SESSION 파일을 포함한 임시 파일은 여기에 저장됩니다. php.ini 파일의 sys_tmp_dir을 통해 설정할 수 있습니다.
물론, 동적으로 실행되는 PHP 프로그램에서는 함수를 통해 현재 임시 파일 디렉터리를 가져올 수도 있습니다.
print_r(sys_get_temp_dir()); // /tmp
임시 파일 만들기
이제 임시 파일 디렉터리가 생겼으니, PHP는 물론 우리가 임시 파일을 직접 만들 수 있도록 신중하게 함수를 준비했습니다.
$tmpFile = tmpfile(); fwrite($tmpFile, "I'm tmp file."); // ll /tmp // vim phpbnAjbE sleep(10); fclose($tmpFile); // ll /tmp
tmpfile() 함수는 이 임시 파일을 생성하는 데 사용됩니다. 동시에 생성되는 파일은 직접 읽을 수 있는 w+ 유형입니다. 파일. 이 임시 파일은 fclose()가 호출되면 자동으로 삭제됩니다. 매뉴얼에는 이 기능을 사용하여 생성된 파일은 스크립트 종료 후 자동으로 삭제된다고 나와 있는데, 테스트 결과 스크립트 종료 시 파일이 삭제되지 않는 것으로 확인되었습니다.
함수를 호출하고 내용을 작성한 후 10초 동안 잠시 멈춥니다. 실제로 파일이 성공적으로 생성되었는지 확인하려면 /tmp 디렉터리로 이동하면 됩니다. 파일이 생성된 시간을 기준으로 해당 생성 파일을 찾았습니다. 그리고 10초 후 fclose()를 실행한 후 디렉토리를 다시 확인해 보면 해당 파일이 자동으로 삭제된 것을 확인할 수 있습니다.
디렉토리 상태에 따라 고유한 이름을 가진 임시 파일을 생성합니다.
마지막으로 PHP는 임시 파일 생성을 위한 매우 사용자 친화적인 기능도 제공합니다.
$tmpFile = tempnam('/Users/zhangyue/MyDoc/博客文章/dev-blog/php/202006/source', 'testtmp'); $f = fopen($tmpFile, "w"); fwrite($f, "I'm tmp file."); // ll /tmp // vim testtmpH7bptZ // etc目录没有写权限 $tmpFile = tempnam('/etc', 'testtmp'); $f = fopen($tmpFile, "w"); fwrite($f, "I'm tmp file."); // ll /etc // ll /tmp // vim testtmpTUNucM
tempnam() 함수는 디렉터리 상태에 따라 고유한 이름을 가진 임시 파일을 생성합니다. 디렉터리 상태에 따른 의미는 무엇입니까? 위의 코드 주석에서 볼 수 있듯이 두 번째 단락의 /etc 디렉터리는 일반적으로 루트 권한이 있는 디렉터리입니다. 루트 계정 권한이 없으면 파일을 생성하거나 수정할 수 없습니다. 권한이 없는 디렉터리이거나 전혀 존재하지 않는 디렉터리인 경우 tempnam() 함수는 임시 파일 디렉터리에 파일을 생성합니다. 첫 번째 코드와 같이 디렉토리가 정상적으로 존재하고 쓰기 가능한 경우 파일은 이 디렉토리에 정상적으로 생성됩니다.
tempnam() 함수의 두 번째 매개변수는 생성된 파일 이름의 접두사를 지정하는 것입니다. tmpfile() 함수는 파일 이름을 지정할 수 없지만, 이 함수는 파일 이름에 고정 접두사를 부여하고 접두사 뒤의 자동 생성된 파일 이름 부분이 고유한지 확인할 수 있습니다.
요약
임시 캐시로 사용하든 일부 파일을 생성하든 이 두 가지 임시 파일 작업 기능은 매우 유용합니다. 우리는 향후 개발에서 이러한 기능을 더 많이 사용하려고 노력할 수 있으며 아마도 생산성을 크게 향상시킬 수 있습니다.
테스트 코드:
https://github.com/zhangyue0503/dev-blog/blob/master/php/202006/source/%E5%9C%A8PHP%E4%B8%AD%E6%93%8D%E4%BD%9C%E4%B8%B4%E6%97%B6%E6%96%87%E4%BB%B6.php
추천 학습: php 비디오 튜토리얼