Schwerwiegender Fehler: Aufruf der undefinierten Funktion curl_init ()

71
<?php
$filename = "xx.gif";
$handle = fopen($filename, "r");
$data = fread($handle, filesize($filename));

// $data is file data
$pvars   = array('image' => base64_encode($data), 'key' => IMGUR_API_KEY);
$timeout = 30;
$curl    = curl_init();

curl_setopt($curl, CURLOPT_URL, 'http://api.imgur.com/2/upload.xml');
curl_setopt($curl, CURLOPT_TIMEOUT, $timeout);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $pvars);

$xml = curl_exec($curl);

curl_close ($curl);

var_dump($xml);
?>

Ich spiele mit der Imgur-API, aber es scheint nicht zu funktionieren. PHP.net sagt, dass dies curl_init()in PHP5 ist, aber mein Host sagt, dass dies nicht der Fall ist. Wie kann ich das zum Laufen bringen?

Thew
quelle

Antworten:

42

curl ist eine Erweiterung, die installiert werden muss. Sie hat nichts mit der PHP-Version zu tun.

http://www.php.net/manual/en/curl.setup.php

Feuer
quelle
+1 Wenn Sie die Curl-Erweiterung nicht installieren können, können Sie versuchen, shell_exec (oder ähnliches) mit dem Befehl curl zu verwenden. Oder Sie können es wahrscheinlich mit fsockopen "fälschen".
Bogeymin
7
Diese Seite sagt kein Wort darüber, wie die Erweiterung installiert wird. Bessere Ressourcen?
Matto
Wenn Sie das Curl-Paket installiert haben, schauen Sie in die Datei php.ini (in / etc). Suche nach Locken. In meinem (OpenBSD) musste ich den Kommentar in der Zeile entfernen, in der Extension = Curl
Mark
124

In alten Versionen von Debian und Ubuntu haben Sie dieses Problem gelöst, indem Sie die Curl-Erweiterung für PHP installiert und den Webserver neu gestartet haben. Angenommen, der Webserver ist Apache 2:

sudo apt-get install php5-curl
sudo service apache2 restart

In neueren Versionen wurde der Paketname geändert:

sudo apt install php-curl

Möglicherweise müssen Sie mehr installieren:

sudo apt-get install curl libcurl3 libcurl3-dev;
Mark Stosberg
quelle
1
Ich musste mehr in Ubuntu installieren: "sudo apt-get install curl libcurl3 libcurl3-dev php5-curl; Sie werden wissen, ob es funktioniert, weil phpinfo () einen neuen Abschnitt mit Curl-Informationen erhält."
Kzqai
Ich gehe davon aus, dass sudo service apache2 restartdas genauso gut funktionieren sollte?
Tshepang
Es ist logisch anzunehmen, dass Neustart = Stopp + Start, aber mit jahrelanger Erfahrung mit Apache ist dies nicht immer der Fall. Ich habe gelernt, explizit anzuhalten und dann in Sicherheit zu kommen. Entschuldigung, ich kann mich nicht an die spezifischen potenziellen Probleme erinnern, aber Sie können sie gerne verwenden restartund prüfen, ob sie für Sie funktionieren.
Mark Stosberg
1
habe den trick für mich auch mit nur sudo apt-get install php5-curl gemacht .. danke!
Mboy
sudo service apache2 restartstartet Apache lediglich neu. Es ist erforderlich, dies [nach der CURL-Installation] auszuführen, damit Aache / PHP die hinzugefügten CURL-Pakete abrufen kann, damit sie funktionieren, wenn das mit CURL infundierte PHP-Skript das nächste Mal ausgeführt wird. Aber ich fand auch, dass ich php5-curl
einbeziehen musste
14

Ich habe noch nicht genug Ruf, um einen Kommentar abzugeben. Mit Ubuntu und einem einfachen:

sudo apt-get install php5-curl
sudo /etc/init.d/apache2 restart

Hat bei mir NICHT funktioniert.

Aus irgendeinem Grund curl.sowurde an einem Ort installiert, der nicht standardmäßig abgeholt wurde. Ich habe das extension_dirin meiner php.ini überprüft und über das curl.soin mein kopiertextension_dir

cp /usr/lib/php5/20090626/curl.so  /usr/local/lib/php/extensions/no-debug-non-zts-20090626

Hoffe das hilft jemandem, passen Sie Ihre Pfadpositionen entsprechend an.

Michael
quelle
14

Für Ubuntu

Installieren Sie die Curl-Erweiterung für PHP und starten Sie den Apache-Server neu.

sudo apt-get install php5-curl
sudo service apache2 restart

Für Windows

Das Problem tritt auf, weil die Datei lib_curl.dll nicht in PHP enthalten ist. Laden Sie auch die folgende Erweiterung, wenn sie nicht funktioniert. php.iniEntfernen Sie daher die Erweiterung in oder entfernen Sie den Kommentar, falls dieser bereits in der php.iniDatei vorhanden ist.

extension=php_bz2.dll
extension=php_curl.dll
extension=php_dba.dll

Starten Sie nun den Apache-Server neu. Wenn die Fehlermeldung "php_curl.dll kann nicht geladen werden" angezeigt wird, kopieren Sie die Bibliotheken SSLEAY32.PHP, libEAY32.dll (OpenSSL) in den Ordner System32.

Vinay
quelle
1
Die Frage betraf Ubuntu und Debian Linux. Ihre Antwort gilt nicht für diese Umgebungen.
Mark Stosberg
1
@ MarkStosberg vereinbart. Antwort aktualisiert.
Vinay
Funktioniert überhaupt nicht. Ich weiß nicht, was an diesem Befehl falsch ist, aber es funktioniert nicht. Ich benutze Ubuntu 16.04
Banty Roy
Ja hat funktioniert! Dies sollte die akzeptierte Antwort sein! Zumindest für Linux sowieso.
Zuks
4

für PHP 7.0 auf Ubuntu verwenden

sudo apt-get install php7.0-curl

Und schlussendlich,

sudo service apache2 restart 

oder

sudo service nginx restart
Mazino S Ukah
quelle
1
Finde deine Version: $ php --version version = 7.X dann installiere: $ sudo apt-get installiere php7.X-curl
Nelles
3

Ich habe dies unter Ubuntu 16.04 mit PHP 7.1.14 erlebt. Um dies zu beheben, fügen Sie dies zuerst in ein Skript ein und führen Sie es aus. Es wird true zurückgegeben, wenn curl installiert und aktiviert ist. Andernfalls wird false zurückgegeben.

<?php
    var_dump(extension_loaded('curl'));
?>

Wenn false zurückgegeben wird, führen Sie aus

sudo apt-get install php7.1-curl

Und schlussendlich,

sudo service apache2 restart

Nach dem Neustart gibt das Skript true zurück und hoffentlich sollte Ihr Fehler behoben sein.

Der Sammie
quelle
2

Es gibt eine Lösung mit allen erforderlichen Details für Windows 7 x64:

http://www.youtube.com/watch?v=7qNTi1sEfE8

Es ist auf Französisch, aber Sie können alles verstehen! Ich habe das gleiche Problem gelöst, spreche sogar kein Französisch. :-)

In vielen Antworten wird vergessen zu erwähnen, dass Sie an diesem Speicherort eine neue Version der Datei php_curl.dll hinzufügen müssen: http://www.anindya.com/php-5-4-3-and-php-5-3-13-x64 -64-Bit-für-Windows /

Ich habe eine neue Version von php_curl.dll aus dem Archiv php_curl-5.4.3-VC9-x64.zip in die Ordner C: \ wamp \ bin \ php \ php5.4.3 \ ext und C: \ Windows \ System32 hinzugefügt und alles war in Ordnung!

Nemanja Vujacic
quelle
2

mach das

sudo apt-get install php-curl

und Server neu starten

sudo service apache2 restart
jafar690
quelle
Danke Mann .. arbeitete in einem Wettbewerb und ich fühle mich nicht wohl PHP, Curl. Ihre Antwort hat mir geholfen, ein Problem zu überwinden, das mich einen halben Tag gekostet hat.
Jegadeesh
-2

Dies ist von der offiziellen Website. php.net

Nach der Installation von PHP.

Windows

Wechseln Sie in den Ordner Windows \ system32: libssh2.dll, php_curl.dll, ssleay32.dll, libeay32.dll

Linux

Wechseln Sie in den Ordner libssh2.dll von Apache24 \ bin

Dann kommentieren Sie die Erweiterung = php_curl.dll in der php.ini aus

David Majidian
quelle
-3
$ch = curl_init('http://api.imgur.com/2/upload.xml'); //initialising our url

curl_setopt($ch, CURLOPT_MUTE, 1);

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);  //used for https headers 

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);  //used for https headers

curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_POSTFIELDS, urlencode($pvars));  
//the value we post

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //waiting for reponse, default value in php is zero ie, curls normally do not wait for a response

curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0'); 

$output = curl_exec($ch); //the real execution 
curl_close($ch);

echo $output;

Versuchen Sie diesen Code. Ich bin mir nicht sicher. Aber ich habe es verwendet, um XML-Daten an eine Remote-URL zu senden.

Praveenmon
quelle
Dies ist keine Antwort auf die Frage.
Mark Stosberg