Разместить на другой странице в PHP-скрипте - PullRequest
27 голосов
/ 02 августа 2009

Как я могу сделать запрос на другую php-страницу в php-скрипте? У меня есть один компьютер переднего плана в качестве сервера страниц html, но когда пользователь нажимает кнопку, я хочу, чтобы внутренний сервер выполнил обработку, а затем отправил информацию обратно на сервер переднего плана, чтобы показать пользователю. Я говорил, что у меня может быть php-страница на внутреннем компьютере, и она отправит информацию обратно на передний конец. Итак, еще раз, как я могу сделать запрос POST к другой странице php, со страницы php?

Ответы [ 8 ]

45 голосов
/ 02 августа 2009

Возможно, самый простой способ заставить 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 - ну, прошло много времени с тех пор, как я это написал. В эти дни стоит проверить Guzzle , которое снова может работать с расширением скручивания или без него.

6 голосов
/ 02 августа 2009

Если ваша установка 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

3 голосов
/ 02 августа 2009

Для обработки 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 * 1007 *.

2 голосов
/ 02 августа 2009
  1. Как и остальные пользователи, это проще всего сделать с помощью CURL.

  2. Если скручивание для вас недоступно, возможно, http://netevil.org/blog/2006/nov/http-post-from-php-without-curl

  3. Если это невозможно, вы можете написать сокеты самостоятельно http://petewarden.typepad.com/searchbrowser/2008/06/how-to-post-an.html

0 голосов
/ 15 февраля 2019

Хотя это и не идеально, если опция cURL не делает этого за вас, попробуйте использовать shell_exec ();

0 голосов
/ 27 августа 2016

Решение находится в 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>
0 голосов
/ 13 мая 2013

Для тех, кто использует cURL, обратите внимание, что параметр CURLOPT_POST принимается как логическое значение, поэтому на самом деле нет необходимости устанавливать его в число полей, которые вы POSTing.
Установка CURLOPT_POST в TRUE (т. Е. Любое целое число, кроме нуля) просто скажет cURL кодировать данные как application / x-www-form-urlencoded, хотя я держу пари, что это не является строго обязательным, когда вы передаете строку с urlencoded как CURLOPT_POSTFIELDS, поскольку cURL уже должен указывать кодировку по типу значения (строка против массива), для которого установлена ​​последняя опция.

Также обратите внимание, что, начиная с PHP 5, вы можете использовать функцию http_build_query, чтобы заставить PHP urlencode массив полей для вас, например так:

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($fields));
0 голосов
/ 06 ноября 2009

CURL метод очень популярен, так что да, это хорошо, чтобы использовать его. Вы могли бы также объяснить больше этих кодов с некоторыми дополнительными комментариями, потому что начинающие могли понять их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...