Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP cURL required only to send and not wait for response

Tags:

I need a PHP cURL configuration so that my script is able to send requests and ignore the answers sent by the API.

curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_POST,count($fields)); curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string); // curl_setopt($ch, CURLOPT_RETURNTRANSFER, false); //curl_setopt($ch, CURLOPT_TIMEOUT_MS, 100); $result = curl_exec($ch); echo $result; curl_close ($ch); 

I tried adding: // curl_setopt($ch, CURLOPT_RETURNTRANSFER, false); //curl_setopt($ch, CURLOPT_TIMEOUT_MS, 100);

But its not working properly and the API webserver is not receiving the requests.

The reason for this is I am sending large amount of requests to the API therefore my script is very slow because it waits for each and every request.

Any help is appreciated.

like image 986
Reza Avatar asked Nov 06 '11 02:11

Reza


People also ask

Does PHP cURL wait for response?

AFAIK, it will wait for a response before continuing running the script. Try adding if ($ret===false) echo curl_error($curl); after the $ret = curl_exec...

Is PHP cURL asynchronous?

Short answer is no it isn't asynchronous.

What is the use of Curl_init in PHP?

Uses of cURL in PHP cURL is a PHP extension that allows you to use the URL syntax to receive and submit data. cURL makes it simple to connect between various websites and domains. Obtaining a copy of a website's material. Submission of forms automatically, authentication and cookie use.

What is curl_ setopt in PHP?

curl_setopt — Set an option for a cURL transfer.


1 Answers

Sender file example ./ajax/sender.php

Below we trying just make ping to php script without waiting on answer

    $url = 'https://127.0.0.1/ajax/received.php';     $curl = curl_init();                     $post['test'] = 'examples daata'; // our data todo in received     curl_setopt($curl, CURLOPT_URL, $url);     curl_setopt ($curl, CURLOPT_POST, TRUE);     curl_setopt ($curl, CURLOPT_POSTFIELDS, $post);           curl_setopt($curl, CURLOPT_USERAGENT, 'api');      //curl_setopt($curl, CURLOPT_TIMEOUT, 1); //if your connect is longer than 1s it lose data in POST better is finish script in recevie     curl_setopt($curl, CURLOPT_HEADER, 0);     curl_setopt($curl,  CURLOPT_RETURNTRANSFER, false);     curl_setopt($curl, CURLOPT_FORBID_REUSE, true);     curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 1);     curl_setopt($curl, CURLOPT_DNS_CACHE_TIMEOUT, 10);           curl_setopt($curl, CURLOPT_FRESH_CONNECT, true);          curl_exec($curl);             curl_close($curl);   

Received file example ./ajax/received.php

EDIT 2019 if you using fastcgi just finish fastcgi and browser close connection but script still will be working up to end.

How finish script: PHP mod_fcgi with fastcgi_finish_request();

For Apache2:

ob_end_flush(); flush(); 

For php-fpm

fastcgi_finish_request(); $this->db->query('UPDATE new_hook_memory SET new=new+1 WHERE id=1'); 

Old version:

ob_end_clean(); //if our framework have turn on ob_start() we don't need bufering respond up to this script will be finish      header("Connection: close\r\n"); //send information to curl is close     header("Content-Encoding: none\r\n"); //extra information      header("Content-Length: 1"); //extra information     ignore_user_abort(true); //script will be exisits up to finish below query even web browser will be close before sender get respond      //we doing here what we would like do     $this->db->query('UPDATE new_hook_memory SET new=new+1 WHERE id=1');        
like image 125
Kamil Dąbrowski Avatar answered Sep 20 '22 16:09

Kamil Dąbrowski