2016-05-26 8 views
0

Wir haben 2 Server, dev und live. Beide benutzen LAMP (Debian), aber der Dev-Server ist regulär http und der Live-Server ist https. Dieser Code funktioniert perfekt auf unsere Dev-Server:file_get_contents + stream_context_create funktioniert auf 1 Server, blockiert auf einem anderen

$all_data = array(...); 
$eol = "\r\n"; 

$headers = array(
    'Content-Type: application/json', 
    'Content-Length: ' . strlen(json_encode($all_data)), 
    'connection: close' 
); 
$headers = implode($eol, $headers); 

$opts = array(
    'http'=>array(
     'method' => 'POST', 
     'header' => $headers, 
     'content' => json_encode($all_data) 
    ) 
); 
$context = stream_context_create($opts); 


$update_data = file_get_contents($_SERVER['REQUEST_SCHEME'] . '://' . $_SERVER['HTTP_HOST'] . $system_file, null, $context); 

auf dem Live-Server, gibt die file_get_contents diesen Fehler:

Warning: file_get_contents(https://...): failed to open stream: Connection timed out in ....php on line 1086 

Ich habe an den Apache-Logs sah, was für Hinweise auf die Ursache, es zu scheitern auf dem Live-Server, aber ich sehe nur den Fehler oben. Es sagt nicht, was den Anruf blockiert. Ich habe allow_url_include und allow_url_fopen auf dem Live-Server auf On gesetzt.

Ich weiß nicht, ob es etwas in der Apache-Konfiguration oder der SSL-Konfiguration oder etwas anderes ist, und ich weiß nicht, wo ich suchen soll. Ich habe heute mehrere Stunden damit verbracht, dieses Problem zu untersuchen, und habe versucht, dem Header-Array verschiedene Header hinzuzufügen (User-Agent, Accept-Language, Accept-Encoding, Cookie usw.), aber nichts hat funktioniert. Ich habe im Grunde versucht zu replizieren, was auf dem Entwickler war, aber Leben mochte es einfach nicht.

Ich habe auch überprüft, dass, wenn ich die URL kopieren und einfügen, die direkt im Browser erstellt wird, dass es funktioniert, so weiß ich, dass der Dateiname korrekt ist.

dev server: 
php: 5.6.14-0+deb8u1 
apache: Apache/2.4.10 
debian: 8.2 

live server: 
php: 5.5.12 
apache: Apache/2.4.10 
debian: 7.9 
+1

Connection timed out klingt wie ein Firewall-Problem und versuchen. Hast du das Ziel vom Live-Server gepingt, oder besser nmap auf Port 443? –

+2

Versuchen Sie, die https-Anforderung manuell über die Befehlszeile über 'curl' auf dem Server auszuführen, auf dem sie nicht funktioniert. Just: 'curl https: // ...' – Will

+0

@JeffPuckettII, habe ich das versucht: nmap -p 443 ourdomain.com und bekam: PORT STATE SERVICE 443/tcp gefiltert https – raphael75

Antwort

0

Können Sie bitte Proxy

$aContext = array(
 
    'http' => array(
 
     'proxy' => 'tcp://192.168.0.2:3128', 
 
     'request_fulluri' => true, 
 
    ), 
 
); 
 
$cxContext = stream_context_create($aContext); 
 

 
$sFile = file_get_contents("http://www.google.com", False, $cxContext); 
 

 
echo $sFile;

+0

Ich habe das versucht und es hat nicht funktioniert. Ich habe den gleichen Fehler, dass es abgelaufen ist. – raphael75

+0

Gibt es Firewallprobleme zwischen beiden Servern? Wenn Sie diese Probleme haben, öffnen Sie bitte den Port und versuchen Sie es erneut mit dem Proxy. Versuchen Sie es mit dem Befehl ** telnet ** oder ** ping ** – sasikaran

Verwandte Themen