2013-09-27 20 views
0

這是劇本我有套接字連接在PHP腳本失敗,而它工作在終端

<?php 
    $timeout = 10; 
    $target = "tls://testbed-epp.nominet.org.uk:700"; 

    $result = stream_socket_client($target, $errno, $errstr, 30, STREAM_CLIENT_CONNECT); 
    if ($result === False) { 
     throw new Exception("Error connecting to $target: $errstr (code $errno)"); 

    } 

    echo "Connected"; 

而且它拋出一個異常

Error connecting to tls://testbed-epp.nominet.org.uk:700: (code 0) 

還有一個警告

WARNING: stream_socket_client(): Failed to enable crypto 

同時運行

openssl s_client -connect testbed-epp.nominet.org.uk:700 

在一個終端連接完美無瑕。

任何想法可以理解

回答

0
$timeout =- 10; 
      ^---- 

你設置$timeout爲負10秒。例如你可以在開始之前終止連接嘗試。

+0

感謝您的答覆,這是一個錯字,在原來的腳本它是積極的。所以這不是我恐怕的原因 –

+0

而且這個變量沒有被使用,硬編碼的'30'超時值代替了。 – CodeCaster

1

試試這個:

$result = stream_socket_client("testbed-epp.nominet.org.uk:700", $errno, $errstr); 

編輯:你也可以通過stream_socket_enable_crypto建立安全連接()功能,但你要注意,它必須套接字連接的初始化後才能使用。

+0

奇怪的是它沒有指定協議。問題是我無法編輯該文件,因爲它是第三方庫。除此之外,相同的腳本可以在另一臺服務器上正常工作,所以我認爲服務器配置有些問題。我最初的擔心是運行在安裝在遠程服務器虛擬機節點上的VPN客戶端上。但事實證明,這不是問題 –

1

嗯,我測試了你的代碼在我的apache服務器上,它工作正常。你可以檢查你的Apache配置。在配置中有一個名爲"Registered Stream Socket Transports "的參數。只要檢查tls是否存在那裏的價值,否則有一些其他問題,但它絕對不是你的腳本

+0

做phpinfo()顯示註冊流套接字傳輸\t tcp,udp,unix,udg,ssl,sslv3,sslv2,tls –

+0

好吧,這很奇怪,但我注意到你的錯誤'$ errstr'是空的。你應該有一些東西。我試圖改變端口,它給了我'拒絕連接'。同樣,你應該有這個錯誤的東西 – aaron

+0

事情是它是空的,錯誤代碼是0.在我原來的腳本錯誤記錄捕獲警告 - 警告:stream_socket_client():無法啓用加密。我更新了這個問題。在測試腳本中可能沒有顯示警告的原因是我通過命令行 –