stream_context_get_options 함수는 지정된 스트림 컨텍스트에서 옵션을 얻는 데 사용됩니다. 스트림 컨텍스트는 스트림의 동작을 구성하기 위해 PHP가 제공하는 메커니즘입니다. 예를 들어, 파일 작업 또는 HTTP 요청을 수행 할 때 일반적으로 스트림 컨텍스트를 통과하는 특정 옵션 (예 : 프록시, 타임 아웃, 인증 등)을 설정할 수 있습니다.
기능의 프로토 타입은 다음과 같습니다.
<span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-title function_ invoke__">stream_context_get_options</span></span><span>(resource </span><span><span class="hljs-variable">$stream_or_context</span></span><span>);
</span></span>$ stream_or_context : 이것은 열린 스트림 또는 스트림 컨텍스트 리소스입니다. 수신이 스트림 자원 인 경우 스트림 컨텍스트에서 옵션을 자동으로 추출합니다.
stream_context_get_options는 연관 배열을 반환합니다. 이 배열에는 스트림 컨텍스트와 관련된 모든 옵션이 포함되어 있습니다. 각 옵션의 키는 일반적으로 프로토콜 유형 (예 : "http", "ftp"등)이며 각 프로토콜 유형에는 아래에 관련 설정이 포함됩니다.
<span><span><span class="hljs-keyword">array</span></span><span>(
</span><span><span class="hljs-string">'계약 이름'</span></span><span> => </span><span><span class="hljs-keyword">array</span></span><span>(
</span><span><span class="hljs-string">'옵션1'</span></span><span> => </span><span><span class="hljs-string">'값1'</span></span><span>,
</span><span><span class="hljs-string">'옵션2'</span></span><span> => </span><span><span class="hljs-string">'값2'</span></span><span>,
...
),
...
)
</span></span>예를 들어, HTTP 요청에 대한 프록시 및 타임 아웃을 설정하면 반환 된 배열이 다음과 같습니다.
<span><span><span class="hljs-keyword">array</span></span><span>(
</span><span><span class="hljs-string">'http'</span></span><span> => </span><span><span class="hljs-keyword">array</span></span><span>(
</span><span><span class="hljs-string">'proxy'</span></span><span> => </span><span><span class="hljs-string">'tcp://proxy.example.com:8080'</span></span><span>,
</span><span><span class="hljs-string">'timeout'</span></span><span> => </span><span><span class="hljs-number">30</span></span><span>,
),
)
</span></span>옵션이 설정되지 않으면 반환 된 배열은 빈 배열이됩니다.
일반적인 시나리오는 파일 스트림, HTTP 요청 또는 기타 프로토콜을 작동 할 때 프로그램이 스트림 컨텍스트의 구성이 올바른지 확인해야 할 수 있습니다. 예를 들어, File_Get_Contents를 사용하여 원격 파일을 읽을 때 HTTP 프록시를 설정했을 수 있습니다. stream_context_get_options를 사용하여 현재 컨텍스트의 프록시 설정을 볼 수 있습니다.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$context</span></span><span> = </span><span><span class="hljs-title function_ invoke__">stream_context_create</span></span><span>([
</span><span><span class="hljs-string">'http'</span></span><span> => [
</span><span><span class="hljs-string">'proxy'</span></span><span> => </span><span><span class="hljs-string">'tcp://proxy.example.com:8080'</span></span><span>,
</span><span><span class="hljs-string">'timeout'</span></span><span> => </span><span><span class="hljs-number">60</span></span><span>
]
]);
</span><span><span class="hljs-variable">$options</span></span><span> = </span><span><span class="hljs-title function_ invoke__">stream_context_get_options</span></span><span>(</span><span><span class="hljs-variable">$context</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$options</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>산출:
<span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
[http] => </span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
[proxy] => </span><span><span class="hljs-attr">tcp</span></span><span>://proxy.example.</span><span><span class="hljs-attr">com</span></span><span>:</span><span><span class="hljs-number">8080</span></span><span>
[timeout] => </span><span><span class="hljs-number">60</span></span><span>
)
)
</span></span>이런 식으로 스트림 컨텍스트의 설정을 언제든지 확인하여 예상대로 확인할 수 있습니다.
흐름 컨텍스트를 보는 옵션은 네트워크 요청을 디버깅 할 때 문제를 해결하는 데 도움이됩니다. 예를 들어 프록시 설정, 요청 헤더 또는 시간 초과 구성이 올바른지 확인할 수 있습니다. 프로그램에서 네트워크 문제가 발생하면 스트리밍 컨텍스트의 구성 정보를 보면 문제를 신속하게 찾을 수 있습니다. 예를 들어, HTTP 요청을 보낼 때 프록시에 액세스 할 수 없거나 타임 아웃 설정이 너무 낮아서 확인을 위해 구성을 인쇄 할 수 있습니다.
경우에 따라 스트림 컨텍스트에서 특정 옵션을 수정하고 이러한 수정 된 옵션을 동적으로 얻을 수 있습니다. 예를 들어, 여러 요청에서 프록시 설정을 수정 해야하는 경우 stream_context_get_options 를 통해 현재 구성을 얻고이를 기반으로 변경할 수 있습니다. 이는 매번 모든 옵션을 재설정하지 않고 중복 구성을 줄입니다.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$context</span></span><span> = </span><span><span class="hljs-title function_ invoke__">stream_context_create</span></span><span>([
</span><span><span class="hljs-string">'http'</span></span><span> => [
</span><span><span class="hljs-string">'timeout'</span></span><span> => </span><span><span class="hljs-number">30</span></span><span>
]
]);
</span><span><span class="hljs-comment">// 현재 구성을 얻으십시오</span></span><span>
</span><span><span class="hljs-variable">$options</span></span><span> = </span><span><span class="hljs-title function_ invoke__">stream_context_get_options</span></span><span>(</span><span><span class="hljs-variable">$context</span></span><span>);
</span><span><span class="hljs-variable">$options</span></span><span>[</span><span><span class="hljs-string">'http'</span></span><span>][</span><span><span class="hljs-string">'timeout'</span></span><span>] = </span><span><span class="hljs-number">60</span></span><span>; </span><span><span class="hljs-comment">// 시간 초과 설정을 수정하십시오</span></span><span>
</span><span><span class="hljs-comment">// 使用修改后的옵션进行操作</span></span><span>
</span><span><span class="hljs-variable">$context</span></span><span> = </span><span><span class="hljs-title function_ invoke__">stream_context_create</span></span><span>([</span><span><span class="hljs-string">'http'</span></span><span> => </span><span><span class="hljs-variable">$options</span></span><span>[</span><span><span class="hljs-string">'http'</span></span><span>]]);
</span><span><span class="hljs-title function_ invoke__">file_get_contents</span></span><span>(</span><span><span class="hljs-string">'http://example.com'</span></span><span>, </span><span><span class="hljs-literal">false</span></span><span>, </span><span><span class="hljs-variable">$context</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>Stream_Context_get_options는 종종 Stream_Socket_client , Fopen, Fopen , File_get_Contents 등과 같은 다른 스트림 관련 기능과 함께 사용됩니다. 예를 들어 FTP 연결을 열면 stream_context_get_options를 사용하여 현재 FTP 구성을 얻을 수 있습니다.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$context</span></span><span> = </span><span><span class="hljs-title function_ invoke__">stream_context_create</span></span><span>([
</span><span><span class="hljs-string">'ftp'</span></span><span> => [
</span><span><span class="hljs-string">'timeout'</span></span><span> => </span><span><span class="hljs-number">60</span></span><span>,
]
]);
</span><span><span class="hljs-variable">$stream</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-string">'ftp://example.com/file.txt'</span></span><span>, </span><span><span class="hljs-string">'r'</span></span><span>, </span><span><span class="hljs-literal">false</span></span><span>, </span><span><span class="hljs-variable">$context</span></span><span>);
</span><span><span class="hljs-variable">$options</span></span><span> = </span><span><span class="hljs-title function_ invoke__">stream_context_get_options</span></span><span>(</span><span><span class="hljs-variable">$stream</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$options</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>stream_context_get_options는 stream_context_create 를 통해 생성 된 컨텍스트 리소스에만 적용됩니다. 컨텍스트가없는 컨텍스트 또는 스트림이 없으면 빈 배열을 반환합니다.
반환 된 옵션 배열은 프로토콜별로 키로 분류됩니다. 예를 들어, HTTP 프로토콜에는 하나의 옵션 세트가 있으며 FTP 프로토콜에는 또 다른 옵션 세트가 있으므로 프로토콜 유형에 따라 해당 작업을 수행해야합니다.