Подтвердить что ты не робот

Опубликовать на другой странице в PHP скрипт

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

4b9b3361

Ответ 1

Возможно, самый простой способ заставить 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 или без него.

Ответ 2

Предполагая, что ваша установка 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

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

Ответ 5

Для тех, кто использует cURL, обратите внимание, что опция CURLOPT_POST берется как логическое значение, поэтому на самом деле нет необходимости устанавливать ее в число полей, которые вы отправляете POST.
Установка 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));

Ответ 6

Решение находится в 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:

    <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>

Ответ 7

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

Ответ 8

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

Ответ 9

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