Публикация на другой странице в PHP-скрипте

StackOverflow https://stackoverflow.com/questions/1217824

  •  10-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

Возможно, самый простой способ заставить PHP выполнить запрос POST - это использовать cURL либо в качестве extension или просто добавление в другой процесс. Вот пример поста:

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

Другие советы

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

<Ол>
  • Как и остальные пользователи, это проще всего сделать с помощью CURL.

  • Если вам не доступен curl, то, возможно, http://netevil.org/blog/2006/ ноябре / HTTP-пост-из-PHP-без завитка

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

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

    Решение находится в 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 этого не делает, попробуйте использовать shell_exec ();

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top