2010-06-08 5 views
4

푸시 알림 (APNS)을 수행하기 위해 Apple 서버와 통신하기 위해 PHP 클래스를 개발해야합니다. 인증서 (.pem)가 있는데 인터넷에서 찾은 다양한 자습서를 따르려고했지만 ssl : //gateway.sandbox.push.apple.com에 연결하려고하면 오류가 발생합니다. 스트림 소켓이있는 2195 :PHP로 SSL 연결을 수행하는 방법

$apnsHost = 'gateway.sandbox.push.apple.com'; 
$apnsPort = 2195; 
$apnsCert = 'apns-dev.pem'; 
$streamContext = stream_context_create(); 
stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert); 
$apns = stream_socket_client('ssl://'.$apnsHost.':'.$apnsPort, $error, $errorString, 2, 
STREAM_CLIENT_CONNECT, $streamContext); 

이 URL의 텔넷은 포트 2195가 열리도록 작동합니다. Phpinfo()로 "등록 된 스트림 소켓 전송 : tcp, udp, ssl, sslv3, sslv2, tls"를 얻었 기 때문에 Openssl이 PHP에서 활성화되었습니다. 내 인증서를 잘 읽었습니다 (PHP is_readable (certif.pem) 파일에 대해 true를 반환 함)

Apache 또는 PHP에서 활성화하려면 다른 것이 있습니까?

+0

또한 오류를 언급합니다. 정확히 오류가 무엇입니까? –

+0

더 자세한 오류가 표시됩니까? (오류보고 수준을 확인하십시오) – baloo

+0

아래에 설명했듯이 오류는 다음과 같습니다 : [function.stream-socket-client] : 로컬 인증서 체인 파일 'editus_dev_push.pem'을 설정할 수 없습니다. [function.stream-socket-client] : SSL 핸들을 생성하지 못했습니다. [function.stream-socket-client] : crypto를 활성화하지 못했습니다 [function.stream-socket-client] : ssl : // gateway에 연결할 수 없습니다. sandbox.push.apple.com:2195 (알 수없는 오류) – Anth0

답변

0

발견! 인증서에 문제가 있습니다. 내가 직접 만들지 않았기 때문에 나는 그것을 조사하지는 않았지만 나는 틀렸다. ...

나는 다음 지시 사항을 올바르게 따라 재생성하기로 결정했다. : Error using ssl cert with PHP! 당신의 도움에 대한

감사합니다 :)

0

첫 번째 의견은 당신이 아파치를 사용하지 않는다는 것입니다. APNS와 통신하려면 PHP 스크립트를 쉘 스크립트 (기본적으로 데몬)로 실행해야합니다. Apple의 서비스와 소켓 연결을 열어야합니다. 시작하려면 socket_connect()http://www.php.net/manual/en/function.socket-connect.php을 참조하십시오.

PHP 스크립트가 단일 실행 후에 종료하지 말고 근본적으로 거의 무한 루프를 유지해야한다는 것을 기억해야합니다. 각 반복에서 푸시 변경 사항을 확인하고 소켓에 쓰고 sleep, repeat를 반복합니다.

Apple 개발자 사이트에는 많은 정보가 있습니다. 여기에서 시작하십시오 http://developer.apple.com/iphone/library/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingWIthAPS/CommunicatingWIthAPS.html#//apple_ref/doc/uid/TP40008194-CH101-SW1

검색 중 짧은 비트 APNS with PHP은 약간의 결과 중 하나가 유망 해 보이는 http://code.google.com/p/php-apns/입니다.

+0

Hum 왜 연결을 열어야하는지 이해가 안됩니까? 연결을 열어 하나의 알림을 보내고 연결을 닫고 싶다면 어떻게해야합니까? 내 사건에 더 구체적으로, 일주일에 한 번 내 PHP 스크립트를 실행하여 내 아이폰의 앱에 뉴스를 보냅니다. 이미 이러한 검색을 수행했으며 APNS PHP를 사용 중입니다 – Anth0

+0

링크에서 사과 웹 사이트 바로 아래에 -Note-box 바로 아래에 다음 줄이 있습니다 : "여러 알림에 걸쳐 APN과의 연결을 유지해야합니다. APN은 오류가 발생한 연결을 닫습니다. " 귀하의 경우에는 일주일에 한 번씩 혼란에 빠지기는하지만 잘 알고있을 것입니다. –

+0

좋아,이 점을 염두에 두라. 그 이유는 이미 APNS PHP 코드를 사용하고 있고 PHP 측에서 제가 아파치 문제라고 생각하기 시작했다고 생각하기 때문입니다 ... – Anth0

1
정확하게 주제에

아니지만, 가치 언급 :

두 가지가 (당신이 소스에서 PHP를 컴파일하는 경우) PHP와 SSL 작업을하기 위해 중요하다

1) openssl base와 devel 패키지가 설치되어 있는지 확인하십시오. 예. yum은 openssl openssl-devel을 설치합니다.

2) PHP를 openssl 지원으로 컴파일하십시오 : 즉, config를 실행할 때 --with-openssl 옵션을 사용하십시오.

그러면 ssl이 phpinfo()의 "Registered Stream Socket Transports"에 나타납니다.

관련 문제