20703
お世話になっております。  
今回PHP5.4から5.6に上げたのですが、  
クライアント実行のPHPからAPNsへ繋がらなくなりました。  
Webブラウザからアクセスすると動作するのでクライアント実行で引っかかっているものと考えております。  
最終的にクライアント実行で実行し、ウェブルートからアクセスできない場所に移動する予定です。  
下記に接続に使用したコードを添付します。  
どうぞ、よろしくお願いいたします。

```

    /**
     * PHP5.4：Web＆Cliの両接続成功
     * PHP5.6：Web成功、Cli失敗
     **/
    //証明書(pem)のパスと暗号化キー
    $pem_path = './APNs.pem';
    $pem_pass = '********************';
    
    //APNsサーバの指定
    $apns_serv = 'ssl://gateway.sandbox.push.apple.com:2195';
    
    //証明書をセット
    $context = stream_context_create();
    stream_context_set_option($context, 'ssl', 'local_cert', $pem_path);
    stream_context_set_option($context, 'ssl', 'passphrase', $pem_pass);
    
    $fp = stream_socket_client(
                                $apns_serv,                                     //ソケット送信先
                                $err,                                           //接続失敗時のエラー番号
                                $errstr,                                        //接続失敗時のエラーメッセージ
                                60,                                             //タイムアウト(秒)
                                STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, //接続設定のフラグ
                                $context                                        //コンテキストリソース
                            );
    
    //接続失敗
    if(!$fp){ die(); }
    
```

* * *

**追記**  
上記コードを実行した際に返却されるエラー番号は"0"でした。  
ソケットの初期化に失敗したようなのですが、原因が分かりません……。
CC BY-SA 3.0
2016-01-07T05:52:59.250
20701
2016-01-07T06:38:10.830
2016-01-07T06:18:55.733
question
php
PHP5.6でのstream_socket_clientについて
自己解決いたしました。

`ini_get()`を出力したところ`NULL`が表示されたので`php.ini`が読み込めなかったことが原因でした。  
下記のようにコマンド上で`php.ini`を指定してやることで実行できました。

```

    php -c /home/foo/www/php.ini /home/exec/target.php
    
```

※`curl.cainfo`＆`openssl.cafile`の設定が読めないためにソケット初期化に失敗し、エラーが出ておりました。
CC BY-SA 3.0
2016-01-07T06:38:10.830
20703
2016-01-07T06:38:10.830
20701
answer