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?

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


+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;

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.


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.


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

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.


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!


2

mach das

sudo apt-get install php-curl

und Server neu starten

sudo service apache2 restart

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


-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.


Dies ist keine Antwort auf die Frage.
Mark Stosberg
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.