发布到 PHP 脚本中的另一个页面
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/1217824/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Post to another page within a PHP script
提问by QAH
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?
如何在 php 脚本中向不同的 php 页面发出 post 请求?我有一台前端计算机作为html页面服务器,但是当用户单击按钮时,我希望后端服务器进行处理,然后将信息发送回前端服务器以显示给用户。我是说我可以在后端计算机上有一个 php 页面,它会将信息发送回前端。那么再一次,如何从一个 php 页面向另一个 php 页面发出 POST 请求?
回答by Paul Dixon
Possibly the easiest way to make PHP perform a POST request is to use cURL, either as an extensionor simply shelling out to another process. Here's a post sample:
可能让 PHP 执行 POST 请求的最简单方法是使用cURL,作为扩展或简单地壳出到另一个进程。这是一个帖子示例:
// 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_Httpset of classes in the Zend framework, which provides a pretty capable HTTP client written directly in PHP (no extensions required).
还可以查看Zend 框架中的Zend_Http类集,它提供了一个直接用 PHP 编写的非常强大的 HTTP 客户端(不需要扩展)。
2014 EDIT- well, it's been a while since I wrote that. These days it's worth checking Guzzlewhich again can work with or without the curl extension.
2014 年编辑- 好吧,我写那个已经有一段时间了。这些天来检查Guzzle是值得的,它可以在有或没有 curl 扩展的情况下工作。
回答by J.C. Inacio
Assuming your php install has the CURL extension, it is probably the easiest way (and most complete, if you wish).
假设您的 php 安装具有 CURL 扩展名,这可能是最简单的方法(如果您愿意,也是最完整的)。
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
积分转到http://php.dzone.com。另外,不要忘记访问PHP 手册中的相应页面
回答by Tyler Carter
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:
对于 PHP 处理,请查看cURL。它将允许您调用后端的页面并从中检索数据。基本上你会做这样的事情:
$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.
您还可以查看PHP HTTP 扩展。
回答by Alfred
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
就像其他用户所说的那样,使用 CURL 最容易做到这一点。
如果 curl 对您不可用,那么也许 http://netevil.org/blog/2006/nov/http-post-from-php-without-curl
如果这是不可能的,你可以自己编写套接字 http://petewarden.typepad.com/searchbrowser/2008/06/how-to-post-an.html
回答by 43oi5uo34iu5
index.php
索引.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
回答by matpop
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.
对于那些使用 cURL 的人,请注意 CURLOPT_POST 选项被视为布尔值,因此实际上无需将其设置为您要发布的字段数。
将 CURLOPT_POST 设置为 TRUE(即除零之外的任何整数)只会告诉 cURL 将数据编码为 application/x-www-form-urlencoded,尽管我敢打赌,当您将 urlencoded 字符串作为 CURLOPT_POSTFIELDS 传递时,这不是绝对必要的,因为cURL 应该已经通过后一个选项设置的值类型(字符串与数组)告诉编码。
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:
另请注意,自 PHP 5 起,您可以使用 http_build_query 函数使 PHP 为您对字段数组进行 urlencode,如下所示:
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($fields));
回答by Martin T?ma
Solution is in target="_blank" like this:
解决方案在 target="_blank" 中,如下所示:
http://www.ozzu.com/website-design-forum/multiple-form-submit-actions-t25024.html
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)">
<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>
回答by user3150875
Although not ideal, if the cURL option doesn't do it for you, may be try using shell_exec();
虽然不理想,但如果 cURL 选项不适合您,可以尝试使用 shell_exec();
回答by Pico RG
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.
CURL 方法非常流行,所以使用它是很好的。您还可以通过一些额外的注释来解释更多这些代码,因为初学者可以理解它们。

