Mit PHP eine Datei via https herunterladen

Moin,
die Frage kommt sooo oft aber ich habe noch keine funktionierende Lösung gefunden. Was muss ich im folgenden Code einstellen um z.B. das Bild runterladen zu können?

function getSSLPage($url)
{ 
$ci=@curl_version();
$cv=$ci["version_number"];
if(!$cv) return "0";

$ch = curl_init();

  	$options = array(
		  CURLOPT_URL				  => $url,
		  CURLOPT_HEADER			  => false,
		  CURLOPT_RETURNTRANSFER	  => true,
		  CURLOPT_SSLVERSION		  => "1",
		  CURLOPT_SSL_VERIFYPEER	  => FALSE,
		  CURLOPT_FOLLOWLOCATION	  => "1",	
		  CURLOPT_SSL_VERIFYHOST	  => false,
		  CURLOPT_CONNECTTIMEOUT	  => "0",
		  CURLOPT_TIMEOUT             => "3600",	
		  CURLOPT_DNS_CACHE_TIMEOUT	  => "3600"
	);

   curl_setopt_array($ch, $options);
   $result = curl_exec($ch);
 
  if(curl_errno($ch))
  {
    echo 'Curl error: ' . curl_error($ch);
    return "0";
  }
  curl_close($ch);
  return $result;
}

$tmp = getSSLPage('https://www.google.de/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png');
 echo 'getSSLPage = '.$tmp; //hier koennte natürlich auch irgendwo abgespeichert werden. Ist aber nicht das Thema jetzt 

Als Ergebnis kommt „Curl error: Failed to connect to www.google.de port 443: Connection refused“.

Hallo,

du hast also noch ein Problem auf Netzwerkebene. PHP kann nicht mal die notwendige TCP-Verbindung herstellen, da hilft keine Änderung am Code.

Gibt es vielleicht eine Firewall oder ähnliches?

Gruß,
Steve

Hallo. Ja die gibt es. Allerdings habe ich da keinen direkten Zugriff drauf… Dann muss ich die IT-Abteilung ansprechen?
Gruß

Vermutlich.

Der Verbindungsaufbau zu Google wird abgelehnt. Entweder ist also Google down oder die Firewall verhindert es.

Gruß,
Steve

CURLOPT_SSLVERSION => "1",

Ich gehe davon aus, dass google einfach nicht mehr mit dir reden will, weil die SSL-Version zu alt ist.

Das sieht für mich nach einem Codeschnipsel von Stackoverflow oder Ähnlichem aus. Vermutlich ein alter. Dein Problem an der Stelle ist, dass du den Code nicht verstehst. Das solltest du dringend (!) anders handhaben. Vor allem bei Code aus dem Internet musst du immer dreimal hinschauen. Also geh jede einzelne Option durch und überlege, ob es nicht schon gute defaults dafür gibt oder ob die Einstellung zu deinem Problem passt.

Und dann solltest du sprechende Variablen verwenden und Quelltextkommentare wären auch gut. Spätestens, wenn du den Code in 1 Jahr auch noch verstehen willst, fliegst du sonst auf die Schnauze.

Hä? Wie kommst du denn darauf?

Ein Netzwerkproblem liefert timeout und nicht connection refused. Die Ursache ist total klar.

Wie sollte Google down sein aber dann die Verbindung ablehnen?

Lange Rede, kurzer Sinn:
Connection refused = TCP Reset

Zum TLS-Handshake kommt es gar nicht erst.

Google down war offensichtlich ironisch gemeint.

Also ist das Herunterladen von Dateien per https mit PHP möglich oder gar nicht?

Natürlich ist das möglich.
Aber in deiner Umgebung stimmt halt was nicht.

Hast du denn gemacht, was ich gesagt habe?