Ich habe diesen einfachen Code geschrieben:
$ch = curl_init();
//Set options
curl_setopt($ch, CURLOPT_URL, "http://www.php.net");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$website_content = curl_exec ($ch);
In meinem Fall $website_content
kommt als false
. Kann jemand etwas vorschlagen / beraten, was schief gehen könnte?
curl_error()
für Fehlerdetails und posten Sie diese bitte hier.curl_error()
ergeben?Antworten:
Die Fehlerprüfung und -behandlung ist der Freund des Programmierers. Überprüfen Sie die Rückgabewerte der initialisierenden und ausführenden cURL-Funktionen.
curl_error()
undcurl_errno()
enthält weitere Informationen im Fehlerfall:* Das
curl_init()
Handbuch besagt:Ich habe beobachtet, dass die Funktion zurückgegeben wird,
FALSE
wenn Sie ihren$url
Parameter verwenden und die Domäne nicht aufgelöst werden konnte. Wenn der Parameter nicht verwendet wird, wird die Funktion möglicherweise nie zurückgegebenFALSE
. Überprüfen Sie es trotzdem immer, da im Handbuch nicht klar angegeben ist, was "Fehler" tatsächlich sind.quelle
curl_exec
FALSE Return. - Curl Verbose Mode im PHP-BeispielIn meinem Fall muss ich Satz
VERIFYHOST
undVERIFYPEER
zufalse
, wie folgt aus :vor dem Anruf an
curl_exec($ch)
.Weil ich zwischen zwei Entwicklungsumgebungen mit selbst zugewiesenen Zertifikaten arbeite. Bei gültigen Zertifikaten müssen Sie keine Einstellungen
VERIFYHOST
vornehmenVERIFYPEER
,false
da diecurl_exec($ch)
Methode funktioniert und die erwartete Antwort zurückgibt.quelle
Dies geschah mir gestern und in meinem Fall, weil ich einem PDF-Handbuch folgte, um ein Modul für die Kommunikation mit einer API zu entwickeln, und während ich den Link direkt aus dem Handbuch
hyphen
kopierte , befand sich der aus dem kopierten Link aus irgendeinem seltsamen Grund in einem anderen Codierung und dahercurl_exec()
kehrte die immer zurück,false
weil sie nicht mit dem Server kommunizieren konnte.Ich habe ein paar Stunden gebraucht, um endlich den Unterschied in den folgenden Charakteren zu verstehen:
Jedes Mal, wenn ich versuchte, direkt über einen Browser auf den Link zuzugreifen, wurde er in so etwas wie konvertiert
https://www.xn--eexample-0m3d.com/api
.Es mag Ihnen scheinen, dass sie gleich sind, aber wenn Sie die Codierung der
hyphens
hier überprüfen, werden Sie sehen, dass das erstehyphen
ein Unicode-Zeichen U + 2010 und das andere ein U + 002D ist .Hoffe das hilft jemandem.
quelle