PHP에서 Rewind () 는 일반적으로 사용되는 파일 작동 함수로, 파일 포인터를 파일의 시작 위치로 이전하는 데 사용됩니다. 일반적으로 파일을 다시 읽어야 할 때. 그러나 rewind () 함수를 사용하는 경우 "리소스가 다시 wound가 될 수 없습니다"오류가 발생할 수 있습니다. 이 오류는 일반적으로 파일 자원이 닫히거나 파일 자체 자체가 재설정을 지원하지 않을 때 발생합니다.
PHP에서 rewind () 함수의 함수는 파일 시작에 대한 열린 파일 포인터를 재설정하는 것입니다. 기능 프로토 타입은 다음과 같습니다.
<span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-title function_ invoke__">rewind</span></span><span>(resource </span><span><span class="hljs-variable">$file</span></span><span>);
</span></span>매개 변수 : $ 파일은 fopen () 에서 열리는 파일 리소스입니다.
반환 값 : 성공하면 return ()는 true를 반환합니다. 실패하면 False를 반환하십시오.
이 오류의 근본 원인은 일반적으로 다음 요인으로 인해 발생합니다.
Rewind () 함수를 호출하기 전에 파일 리소스가 미리 닫히지 않았는지 확인하십시오. fclose () 에 의해 파일 자원이 닫힌 경우 rewind ()를 포함한 리소스의 추가 작업이 오류로 실패합니다.
예:
<span><span><span class="hljs-variable">$file</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-string">'example.txt'</span></span><span>, </span><span><span class="hljs-string">'r'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">fclose</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">rewind</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>); </span><span><span class="hljs-comment">// 오류를보고합니다:리소스를 재설정 할 수 없습니다</span></span><span>
</span></span>Rewind () 함수는 전달 된 매개 변수가 유효한 파일 리소스 여야합니다. 유효하지 않은 리소스가 전달되거나 리소스 유형이 요구 사항을 충족하지 않으면 PHP가 오류를 던집니다. 예를 들어, 널 또는 닫힌 자원을 전달하십시오.
예:
<span><span><span class="hljs-variable">$invalid_resource</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">rewind</span></span><span>(</span><span><span class="hljs-variable">$invalid_resource</span></span><span>); </span><span><span class="hljs-comment">// 오류를보고합니다:리소스를 재설정 할 수 없습니다</span></span><span>
</span></span>PHP의 일부 스트림 유형은 Rewind () 작업을 지원하지 않을 수 있습니다. 예를 들어, fopen () (원격 URL 또는 파이프 라인과 같은)을 통해 열린 일부 특수 스트림은 재설정 포인터를 지원하지 않을 수 있습니다. 이러한 스트림의 경우 Rewind () 함수가 적용되지 않지만 대신 "리소스를 재설정 할 수 없습니다"오류를 던집니다.
예:
<span><span><span class="hljs-variable">$file</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-string">'http://example.com'</span></span><span>, </span><span><span class="hljs-string">'r'</span></span><span>); </span><span><span class="hljs-comment">// 원격 파일을 엽니 다</span></span><span>
</span><span><span class="hljs-title function_ invoke__">rewind</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>); </span><span><span class="hljs-comment">// 오류를보고합니다:리소스를 재설정 할 수 없습니다</span></span><span>
</span></span>파일 포인터가 파일 끝으로 이동 한 경우 Rewind ()을 호출하면 즉시 오류를보고하지 않을 수 있지만 합리적인 파일 확인이 없으면 예기치 않은 동작으로 이어질 수도 있습니다. 따라서 실제 작업에서는 Rewind ()을 호출하기 전에 필요한 파일 확인을 수행하는 것이 좋습니다.
예:
<span><span><span class="hljs-variable">$file</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-string">'example.txt'</span></span><span>, </span><span><span class="hljs-string">'r'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">fseek</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>, </span><span><span class="hljs-number">100</span></span><span>); </span><span><span class="hljs-comment">// 파일 포인터를 파일의 위치로 이동</span></span><span>
</span><span><span class="hljs-title function_ invoke__">rewind</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>); </span><span><span class="hljs-comment">// 정상적인 상황에서는 포인터가 파일의 시작 부분으로 다시 이동합니다.</span></span><span>
</span></span> 파일이 닫혀 있는지 확인하십시오 .
Rewind ()을 호출하기 전에 파일 리소스가 열려 있고 예기치 않게 닫히지 않았는지 확인하십시오. 이것은 간단한 조건부 점검으로 보장 할 수 있습니다.
<span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">is_resource</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>)) {
</span><span><span class="hljs-title function_ invoke__">rewind</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>);
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"파일 리소스를 사용할 수 없거나 닫았습니다"</span></span><span>;
}
</span></span> 리소스 유형 확인 :
Rewind () 함수에 전달 된 매개 변수가 유효한 파일 리소스인지 확인하십시오. 자원이 유효한지 확실하지 않은 경우 is_resource () 함수를 사용하여 확인할 수 있습니다.
유효한 파일 스트림인지 확인하십시오 .
원격 파일 또는 특수 스트림으로 작동하는 경우이 스트림이 Rewind () 작업을 지원하는지 확인하십시오. PHP 매뉴얼을 보면 특정 스트림의 동작 및 한계에 대해 배울 수 있습니다.
파일 포인터가 예기치 않게 이동하지 않았는지 확인하십시오 .
파일 포인터가 파일의 끝에 도달 한 경우 fseek ()을 사용하여 파일 포인터를 다른 위치로 이동 한 다음 Rewind () 를 호출 할 수 있습니다.
오류 처리 메커니즘 사용 :
@ 연산자를 사용하여 오류 메시지를 억제하고 Error_Get_Last ()를 결합하여 특정 오류 메시지를 보려면 문제를 해결하는 데 도움이됩니다.
<span><span><span class="hljs-keyword">if</span></span><span> (@</span><span><span class="hljs-title function_ invoke__">rewind</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>) === </span><span><span class="hljs-literal">false</span></span><span>) {
</span><span><span class="hljs-variable">$error</span></span><span> = </span><span><span class="hljs-title function_ invoke__">error_get_last</span></span><span>();
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"오류 메시지: "</span></span><span> . </span><span><span class="hljs-variable">$error</span></span><span>[</span><span><span class="hljs-string">'message'</span></span><span>];
}
</span></span>"재설정되지 않은 리소스"오류는 일반적으로 파일 자원이 닫히거나 들어오는 리소스가 유효하지 않거나 파일 스트림 자체가 재설정을 지원하지 않기 때문입니다. 이 문제를 해결할 때 먼저 리소스의 유효성을 확인하고 파일이 닫히지 않았는지 확인하고 스트림이 재설정 작업을 지원하는지 확인해야합니다. 합리적인 오류 확인 및 조건부 판단을 통해이 문제는 일반적으로 효과적으로 피하고 조사 할 수 있습니다.