PHP 개발 중에 터치 () 함수는 종종 파일의 액세스 시간 및 수정 시간을 업데이트하거나 파일이 존재하지 않을 때 빈 파일을 작성하는 데 사용됩니다. 그러나 많은 개발자는 Touch ()를 사용할 때 실수로 빈 파일을 생성하는 문제가 발생할 수 있습니다. 특히 파일이 존재하지 않을 때 Touch ()는 자동으로 새 빈 파일을 만듭니다. 이는 일부 시나리오에서, 특히 빈 파일을 실수로 생성하고 싶지 않은 경우 문제를 일으킬 수 있습니다. 이 기사는이 문제를 피하는 방법을 탐색하고 몇 가지 실용적인 팁을 공유합니다.
먼저 터치 () 함수의 기본 동작을 이해해야합니다. 터치 () 함수는 파일의 액세스 시간 및 수정 시간을 수정하는 데 사용됩니다. 기능 프로토 타입은 다음과 같습니다.
<span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-title function_ invoke__">touch</span></span><span> ( </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$filename</span></span><span> [, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$time</span></span><span> = </span><span><span class="hljs-title function_ invoke__">time</span></span><span>() [, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$atime</span></span><span> = </span><span><span class="hljs-title function_ invoke__">time</span></span><span>() ]] )
</span></span>
$ filename : 작동 할 파일 이름입니다.
$ 시간 : 시간을 수정하고 현재 시간을 기본값으로 수정하십시오.
$ atime : 액세스 시간, 현재 시간의 기본값.
지정된 파일이 존재하지 않고 파일을 생성 할 권한이없는 경우 touch ()은 false를 반환하지만 지정된 파일이 존재하지 않고 파일을 생성 할 권한이 있으면 빈 파일이 생성되고 true가 반환됩니다.
터치를 피하기 위해 () 파일이 존재하지 않을 때 빈 파일 생성을 피하려면 다음 방법을 수행 할 수 있습니다.
가장 쉽고 효과적인 방법은 Touch ()를 사용하기 전에 대상 파일이 존재하는지 확인하는 것입니다. file_exists () 또는 is_file () 함수를 사용하여 파일이 이미 존재하는지 확인할 수 있습니다. 파일이 존재하지 않으면 터치 () 호출을 건너 뛸 수 있습니다.
<span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">file_exists</span></span><span>(</span><span><span class="hljs-variable">$filename</span></span><span>)) {
</span><span><span class="hljs-title function_ invoke__">touch</span></span><span>(</span><span><span class="hljs-variable">$filename</span></span><span>);
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-comment">// 파일이 존재하지 않습니다,다른 작업 또는 로깅을 수행하십시오</span></span><span>
}
</span></span>
이런 식으로 터치 ()는 파일이 이미 존재하는 경우에만 호출되므로 빈 파일 생성을 피할 수 있습니다.
때로는 대상 경로가 파일이 아닌 디렉토리 일 수 있으며, 이는 잘못된 동작으로 이어질 수도 있습니다. is_file ()을 사용하여 대상이 디렉토리가 아닌 파일인지 확인하여 불필요한 빈 파일 생성을 더 피하십시오.
<span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_file</span></span><span>(</span><span><span class="hljs-variable">$filename</span></span><span>)) {
</span><span><span class="hljs-title function_ invoke__">touch</span></span><span>(</span><span><span class="hljs-variable">$filename</span></span><span>);
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-comment">// 파일 처리는 일반 파일이 아닙니다</span></span><span>
}
</span></span>
파일이 존재하지 않을 때 파일을 만들려면 파일이 미리 위치한 디렉토리를 작성하고 빈 파일이 생성되지 않도록 적절한 파일 권한을 설정하는 것을 고려하십시오. 대상 디렉토리가 존재하지 않으면 먼저 디렉토리를 작성한 다음 Touch ()를 사용할 수 있습니다.
<span><span><span class="hljs-variable">$dir</span></span><span> = </span><span><span class="hljs-title function_ invoke__">dirname</span></span><span>(</span><span><span class="hljs-variable">$filename</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">is_dir</span></span><span>(</span><span><span class="hljs-variable">$dir</span></span><span>)) {
</span><span><span class="hljs-title function_ invoke__">mkdir</span></span><span>(</span><span><span class="hljs-variable">$dir</span></span><span>, </span><span><span class="hljs-number">0777</span></span><span>, </span><span><span class="hljs-literal">true</span></span><span>); </span><span><span class="hljs-comment">// 디렉토리를 작성하고 권한을 설정하십시오</span></span><span>
}
</span><span><span class="hljs-title function_ invoke__">touch</span></span><span>(</span><span><span class="hljs-variable">$filename</span></span><span>);
</span></span>
오류 억제기를 사용하는 것이 권장되는 모범 사례 는 아니지만 오류의 특정 세부 정보가 아닌 성공적으로 실행되는지 여부에 대해서만 관심이있는 경우 @ 이전 터치 () 호출을 사용하여 오류를 억제 할 수 있습니다.
<span><span>@</span><span><span class="hljs-title function_ invoke__">touch</span></span><span>(</span><span><span class="hljs-variable">$filename</span></span><span>);
</span></span>
이런 식으로 파일이 존재하지 않더라도 경고 메시지가 없습니다. 그러나 이것은 빈 파일을 만드는 문제를 해결하지 못하므로 다른 전략과 함께 사용하는 것이 더 효과적 일 수 있습니다.
파일 생성 프로세스를보다 세분화하려면 필요에 따라 파일 작동 로직을 사용자 정의 할 수 있습니다. 예를 들어, 경우에 따라 빈 파일이 아닌 특정 콘텐츠가있는 파일을 만드는 것이 바람직 할 수 있습니다. 현재 파일이 존재하는지 확인할 수 있습니다. 존재하지 않는 경우 파일을 작성하고 일부 초기화 내용을 작성하십시오.
<span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">file_exists</span></span><span>(</span><span><span class="hljs-variable">$filename</span></span><span>)) {
</span><span><span class="hljs-title function_ invoke__">file_put_contents</span></span><span>(</span><span><span class="hljs-variable">$filename</span></span><span>, </span><span><span class="hljs-string">"Initial content"</span></span><span>);
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-title function_ invoke__">touch</span></span><span>(</span><span><span class="hljs-variable">$filename</span></span><span>);
}
</span></span>
이렇게하면 기본 컨텐츠를 제공하는 동시에 완전히 빈 파일을 작성하지 않습니다.
보다 유연한 파일 생성 및 수정 작업이 필요한 경우 file_put_contents () 또는 fopen ()을 사용하여 파일 생성 및 쓰기를 제어 할 수 있습니다. 이 방법을 사용하면 빈 파일의 생성을 피하기 위해 파일이 생성되는 것과 동시에 데이터를 작성할 수 있습니다.
<span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">file_exists</span></span><span>(</span><span><span class="hljs-variable">$filename</span></span><span>)) {
</span><span><span class="hljs-title function_ invoke__">file_put_contents</span></span><span>(</span><span><span class="hljs-variable">$filename</span></span><span>, </span><span><span class="hljs-string">"Initial content"</span></span><span>);
}
</span></span>
또는 fopen ()을 사용하고 파일이없는 경우 컨텐츠를 작성하고 작성하십시오.
<span><span><span class="hljs-variable">$handle</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-variable">$filename</span></span><span>, </span><span><span class="hljs-string">"w"</span></span><span>); </span><span><span class="hljs-comment">// 'w' 모드는 파일을 생성하고 파일의 내용을 지우겠습니다.</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$handle</span></span><span>) {
</span><span><span class="hljs-title function_ invoke__">fwrite</span></span><span>(</span><span><span class="hljs-variable">$handle</span></span><span>, </span><span><span class="hljs-string">"Initial content"</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">fclose</span></span><span>(</span><span><span class="hljs-variable">$handle</span></span><span>);
}
</span></span>
Touch () 함수를 사용하는 경우 실수로 빈 파일을 생성하지 않도록하는 키는 파일이 미리 존재하는지 판단하거나 빈 파일의 생성을 피하기 위해 다른 방법을 사용하는 것입니다. file_exists () , is_file () , mkdir () 등과 같은 함수를 결합하면 불필요한 빈 파일 생성을 효과적으로 피할 수 있습니다. 각 방법에는 해당 시나리오가 있습니다. 특정 요구에 따라 적절한 전략을 선택하면 코드의 견고성과 유지 관리가 향상 될 수 있습니다.