How can I make a post request to a different php page within a php script? I have one front end computer as the html page server, but when the user clicks a button, I want a backend server to do the processing and then send the information back to the front end server to show the user. I was saying that I can have a php page on the back end computer and it will send the information back to the front end. So once again, how can I do a POST request to another php page, from a php page?
9 Answers
Possibly the easiest way to make PHP perform a POST request is to use cURL, either as an extension or simply shelling out to another process. Here's a post sample:
// where are we posting to?
$url = 'http://foo.com/script.php';
// what post fields?
$fields = array(
'field1' => $field1,
'field2' => $field2,
);
// build the urlencoded data
$postvars = http_build_query($fields);
// open connection
$ch = curl_init();
// set the url, number of POST vars, POST data
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, count($fields));
curl_setopt($ch, CURLOPT_POSTFIELDS, $postvars);
// execute post
$result = curl_exec($ch);
// close connection
curl_close($ch);
Also check out Zend_Http set of classes in the Zend framework, which provides a pretty capable HTTP client written directly in PHP (no extensions required).
2014 EDIT - well, it's been a while since I wrote that. These days it's worth checking Guzzle which again can work with or without the curl extension.

- 295,876
- 54
- 310
- 348
-
you are correct, I'm in the habit of choosing URL-safe keys though, but will modify the sample... – Paul Dixon Aug 02 '09 at 09:04
-
If you don't own your server, theres a chance you may run into the issue that PHP, and thus cURL, are not allowed to leave the local network. – Alex S Sep 12 '09 at 14:18
-
1@Paul Is this answer still up-to-date? – Wanjia Jun 11 '18 at 09:26
-
@Wanjia Using it in 2022, works perfectly on a hosting provider that I have no control of to relay the information to my own server (https -> http). No additional tools needed, works standalone. – Fusseldieb Apr 19 '22 at 18:09
Assuming your php install has the CURL extension, it is probably the easiest way (and most complete, if you wish).
Sample snippet:
//set POST variables
$url = 'http://domain.com/get-post.php';
$fields = array(
'lname'=>urlencode($last_name),
'fname'=>urlencode($first_name),
'email'=>urlencode($email)
);
//url-ify the data for the POST
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
rtrim($fields_string,'&');
//open connection
$ch = curl_init();
//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_POST, count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);
//execute post
$result = curl_exec($ch);
//close connection
curl_close($ch);
Credits go to http://php.dzone.com. Also, don't forget to visit the appropriate page(s) in the PHP Manual

- 4,442
- 2
- 22
- 25
index.php
$url = 'http://[host]/test.php';
$json = json_encode(['name' => 'Jhonn', 'phone' => '128000000000']);
$options = ['http' => [
'method' => 'POST',
'header' => 'Content-type:application/json',
'content' => $json
]];
$context = stream_context_create($options);
$response = file_get_contents($url, false, $context);
test.php
$raw = file_get_contents('php://input');
$data = json_decode($raw, true);
echo $data['name']; // Jhonn

- 83
- 10
For PHP processing, look into cURL. It will allow you to call pages on your back end and retrieve data from it. Basically you would do something like this:
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_URL,$fetch_url);
curl_setopt ($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt ($ch,CURLOPT_USERAGENT, $user_agent;
curl_setopt ($ch,CURLOPT_CONNECTTIMEOUT,60);
$response = curl_exec ( $ch );
curl_close($ch);
You can also look into the PHP HTTP Extension.

- 60,743
- 20
- 130
- 150
-
I know about ajax. My page is using ajax, but I want in other words, inner network communication between my front end server and my back end. I don't want to user to be able to directly communicate with the back end server. So how would I let the front end talk with the back end using php? – QAH Aug 02 '09 at 00:10
-
I downvoted as the OP wasn't asking how to achieve this on the client side, but on the server side. – Paul Dixon Aug 02 '09 at 00:12
-
He said press a button, process, and then show the data. In almost every other question, people immediately look to AJAX. – Tyler Carter Aug 02 '09 at 00:12
-
1Ok, jQuery is completely removed, and instead cURL is in place. Sorry for the misunderstanding – Tyler Carter Aug 02 '09 at 00:15
Like the rest of the users say it is easiest to do this with CURL.
If curl isn't available for you then maybe http://netevil.org/blog/2006/nov/http-post-from-php-without-curl
If that isn't possible you could write sockets yourself http://petewarden.typepad.com/searchbrowser/2008/06/how-to-post-an.html

- 60,935
- 33
- 147
- 186
For those using cURL, note that CURLOPT_POST option is taken as a boolean value, so there's actually no need to set it to the number of fields you are POSTing.
Setting CURLOPT_POST to TRUE (i.e. any integer except zero) will just tell cURL to encode the data as application/x-www-form-urlencoded, although I bet this is not strictly necessary when you're passing a urlencoded string as CURLOPT_POSTFIELDS, since cURL should already tell the encoding by the type of the value (string vs array) which this latter option is set to.
Also note that, since PHP 5, you can use the http_build_query function to make PHP urlencode the fields array for you, like this:
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($fields));

- 1,969
- 1
- 19
- 36
Solution is in target="_blank" like this:
http://www.ozzu.com/website-design-forum/multiple-form-submit-actions-t25024.html
edit form like this:
<form method="post" action="../booking/step1.php" onsubmit="doubleSubmit(this)">
And use this script:
<script type="text/javascript">
<!--
function doubleSubmit(f)
{
// submit to action in form
f.submit();
// set second action and submit
f.target="_blank";
f.action="../booking/vytvor.php";
f.submit();
return false;
}
//-->
</script>

- 5
- 3
Although not ideal, if the cURL option doesn't do it for you, may be try using shell_exec();

- 1
- 1
- 2
CURL method is very popular so yes it is good to use it. You could also explain more those codes with some extra comments because starters could understand them.

- 1
-
1Being popular doesn't justify it as being good to use it, sorry. – Oliver M Grech Oct 06 '16 at 14:49