2008-12-18 88 views
31

我用這個來檢查URL的可用性:找不到插座運輸「https」開頭

$fp = fsockopen($url, 443, $errno, $errstr); 

,我得到這個錯誤回來...

警告:的fsockopen ()[function.fsockopen]:無法連接到https://example.com/soapserver.php:443(無法找到套接字傳輸「https」 - 你忘記啓用它時,你配置PHP?)在C:\首頁等等等等等...

我正在使用IIS服務器btw,(沒有它不是我的!)所以我認爲它沒有open-ssl,但我不確定。任何人都可以幫忙嗎?

我做了一個phpinfo(),我確實有ssl,但是在IMAP和cURL上,這就是所有。

任何想法?

回答

12

還爲SSL,你需要使用SSL的前綴主持人://

+0

這纔是真正的答案,但tvanfosson澄清它: ) – Jay 2008-12-19 12:28:57

26

您應該只使用主機名,而不是fsockopen調用中的URL。您需要提供uri,減去實際HTTP頭中的主機/端口。正如@Martijin指出的那樣,並且如手冊頁所列,您需要使用ssl://爲SSL或tls://開頭使用傳輸層安全性。

Manual page for fsockopen。看例1。

45

取消對該行:extension=php_openssl.dllphp.ini

0

安裝檢查捲曲或不爲PHP。如果未安裝,請安裝捲曲。 窗戶註釋該行:在php.ini中擴展= p​​hp_openssl.dll, 爲Ubuntu sudo易於得到安裝PHP捲曲

2

比方說,你要搶紐約時報,它強制HTTPS:

不正確:

$client = stream_socket_client('https://www.nytimes.com', $errno, $errstr, 30);

正確:

$client = stream_socket_client('tcp://www.nytimes.com:443', $errno, $errstr, 30);

注意我已將https://替換爲tcp://,並將443端口附加到主機名。

我想我們可以說stream_socket_client()不會說URL。

+1

很難想象9年前我在和IIS作戰,從過去爆炸... – 2017-02-20 13:31:11

0

切換到ssl://爲我工作,但我不斷收到一個壞請求響應。我發現,我需要增加一個行明確宣佈我的主機頭描述here,並確保我已經更新從HTTP/1.0我的HTTP到HTTP/1.1

$header .= "POST /cgi-bin/webscr HTTP/1.1\r\n"; 
$header .= "Host: www.sandbox.paypal.com\r\n";