Как я могу сделать почтовый запрос на другой php-странице в php-скрипте? У меня есть один внешний компьютер как сервер страниц html, но когда пользователь нажимает кнопку, я хочу, чтобы сервер backend выполнял обработку, а затем отправлял информацию обратно на внешний сервер, чтобы показать пользователя. Я говорил, что у меня может быть php-страница на заднем компьютере, и она отправит информацию обратно в интерфейс. Итак, еще раз, как я могу выполнить запрос POST на другую php-страницу с php-страницы?
Возможно, самый простой способ заставить 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);
Также проверьте набор классов Zend_Http в структуре Zend, который обеспечивает довольно удобный HTTP-клиент, написанный непосредственно на PHP (никаких расширений не требуется).
2014 EDIT – ну, это было давно, так как я написал это. В эти дни стоит проверить Guzzle, который снова может работать с расширением curl или без него.
Предполагая, что ваша установка php имеет расширение CURL, это, вероятно, самый простой способ (и наиболее полный, если хотите).
Пример фрагмента:
//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);
Кредиты отправляются на сайт http://php.dzone.com . Кроме того, не забудьте посетить соответствующие страницы в Руководстве по PHP
Для обработки 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);
Вы также можете изучить PHP HTTP Extension .
Как и остальные пользователи, проще всего сделать это с помощью 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
Для тех, кто использует cURL, обратите внимание, что опция CURLOPT_POST берется как логическое значение, поэтому нет необходимости устанавливать ее в число полей, которые вы используете POSTING.
Установка CURLOPT_POST в TRUE (то есть любое целое число, кроме нуля) будет просто указывать cURL для кодирования данных как application / x-www-form-urlencoded, хотя я уверен, что это не является абсолютно необходимым, когда вы передаете строку с urlencoded как CURLOPT_POSTFIELDS, поскольку cURL уже должен указать кодировку по типу значения (строка vs array), для которого установлен этот последний параметр.
Также обратите внимание, что с PHP 5 вы можете использовать функцию http_build_query, чтобы сделать PHP urlencode массивом полей для вас, например:
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($fields));
Решение находится в target = "_ blank" следующим образом:
http://www.ozzu.com/website-design-forum/multiple-form-submit-actions-t25024.html
редактируйте форму следующим образом:
<form method="post" action="../booking/step1.php" onsubmit="doubleSubmit(this)">
И используйте этот скрипт:
<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>
Метод CURL очень популярен, поэтому да, его хорошо использовать. Вы могли бы также объяснить больше этих кодов с некоторыми дополнительными комментариями, потому что стартеры могли их понять.