stream_context_get_options () 함수의 함수는 주어진 스트림 컨텍스트와 관련된 모든 옵션을 반환하는 것입니다. 스트림 컨텍스트가 생성 될 때 옵션이 설정되지 않으면 함수는 빈 배열을 반환합니다. 일반적으로 생성 시간에 옵션을 지정하지 않고 기본 스트림 컨텍스트 (예 : Stream_Context_create () 사용) 만 작성하는 경우 Stream_Context_get_options () 호출이 빈 배열을 반환합니다.
해결책:
스트림 컨텍스트를 만들 때 올바른 옵션이 전달되도록하십시오. 예를 들어 다음 방법으로 스트림 컨텍스트 옵션을 지정할 수 있습니다.
<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">"method"</span></span><span> => </span><span><span class="hljs-string">"GET"</span></span><span>,
</span><span><span class="hljs-string">"header"</span></span><span> => </span><span><span class="hljs-string">"User-Agent: 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-variable">$options</span></span><span>);
</span><span><span class="hljs-variable">$contextOptions</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__">var_dump</span></span><span>(</span><span><span class="hljs-variable">$contextOptions</span></span><span>);
</span></span>
이 예에서는 Stream_Context_get_options ()가 HTTP 요청 방법 및 헤더 정보가 포함 된 배열을 반환합니다.
PHP는 많은 함수 (예 : file_get_contents () )에서 기본 스트림 컨텍스트를 사용할 수 있습니다. 이러한 기능을 호출 할 때 컨텍스트가 명시 적으로 통과되지 않으면 PHP는 사용자 정의 옵션없이 기본 스트림 컨텍스트를 사용합니다. 이 경우 stream_context_get_options ()는 빈 배열을 반환합니다.
해결책:
사용자 정의 옵션으로 명시적인 컨텍스트를 전달하십시오. 예를 들어:
<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">"method"</span></span><span> => </span><span><span class="hljs-string">"POST"</span></span><span>,
</span><span><span class="hljs-string">"header"</span></span><span> => </span><span><span class="hljs-string">"Content-Type: application/json"</span></span><span>
]
]);
</span><span><span class="hljs-variable">$response</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-variable">$contextOptions</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__">var_dump</span></span><span>(</span><span><span class="hljs-variable">$contextOptions</span></span><span>);
</span></span>
이런 식으로 Stream_Context_get_options ()는 빈 배열이 아닌 http 옵션이 포함 된 배열을 반환합니다.
전달 된 매개 변수가 유효한 스트림 컨텍스트 리소스가 아닌 경우 stream_context_get_options ()가 호출되면 PHP는 빈 배열을 반환합니다. 함수로 전달 된 컨텍스트 변수가 비어 있거나 유효하지 않거나 초기화되지 않았기 때문일 수 있습니다.
해결책:
stream_context_get_options ()를 호출하기 전에 전달한 것이 유효한 컨텍스트인지 확인하십시오. 예를 들어, var_dump ($ context) 에 의해 컨텍스트가 유효한지 확인할 수 있습니다.
<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-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$context</span></span><span>) {
</span><span><span class="hljs-variable">$contextOptions</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__">var_dump</span></span><span>(</span><span><span class="hljs-variable">$contextOptions</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>
스트림 컨텍스트가 닫히거나 파괴되면 Stream_Context_get_options () 호출 나중에 빈 배열이 반환됩니다. 스트림 컨텍스트는 일반적으로 스트림 작동이 완료된 후에 파괴되므로 스트림을 작동 할 때 스트림의 수명주기에 특별한주의를 기울이십시오.
해결책:
스트림 컨텍스트가 파괴되기 전에 액세스하십시오. 스트리밍 작업을 사용하기 전에 컨텍스트 옵션을 얻을 수 있으며 작업이 완료된 후에는 액세스를 피할 수 있습니다.
stream_context_get_options () 가 반환 한 옵션은 스트림 프로토콜을 기반으로합니다. 예를 들어, 파일 작업에 대한 컨텍스트를 작성하지만 실제로 HTTP 스트림을 처리하는 데 사용하는 경우 반환 할 관련 옵션이 없습니다.
해결책:
올바른 프로토콜 유형에 대한 스트림 컨텍스트를 작성하고 전달 된 옵션이 해당 프로토콜에 적용 할 수 있는지 확인하십시오.
<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">"username"</span></span><span> => </span><span><span class="hljs-string">"user"</span></span><span>,
</span><span><span class="hljs-string">"password"</span></span><span> => </span><span><span class="hljs-string">"pass"</span></span><span>
]
]);
</span><span><span class="hljs-variable">$contextOptions</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__">var_dump</span></span><span>(</span><span><span class="hljs-variable">$contextOptions</span></span><span>);
</span></span>