Используя cURL, (как) возможно ли выполнить команду PHP на удаленной странице и вернуть ее как строковую переменную? - PullRequest
2 голосов
/ 23 апреля 2011

Что я хочу сделать, используя cURL:

  1. Войдите на мой сайт Wordpress, выполните мой собственный код PHP и сохраните его в переменной:

    $ code_to_execute_remotely = wp_create_nonce ('my_form');

    $ ch = curl_init ();
    curl_setopt ($ ch, CURLOPT_URL, 'www.mywordpresssite.com');
    curl_setopt ($ ch, CURLOPT_SOMEMYSTERIOUSFUNCTION, $ code_to_execute_remotely);$ result_variable = curl_exec ($ ch);

  2. Затем используйте эту переменную во втором выполнении cURL:

    curl_setopt ($ ch, CURLOPT_MYSECONDFUNCTION, $ result_variable );
    $ second_ececution = curl_exec ($ ch);
    curl_close ($ ch);

Я использовал фиктивный код для упрощениякурс.Другие функции (вход на удаленный сайт и т. Д.) - не проблема, просто выполнение этого кода удаленно и возвращение результатов в виде используемой переменной, вот и все, что мне нужно.Так как я не очень знаком с w / cURL, возможно, я пытаюсь сделать что-то за его пределами, и в этом случае я был бы очень благодарен, чтобы узнать, какая альтернатива может достичь этого.

1 Ответ

0 голосов
/ 23 апреля 2011

На удаленном сайте используйте функцию php eval:

http://php.net/manual/en/function.eval.php

Редактировать с полным объяснением:

На локальном сервере:

$post_data['curl_function'] = 'print wp_create_nonce("my_form");'; 
$post_string = http_build_query($post_data); 
curl_setopt($ch, CURLOPT_URL, 'www.mywordpresssite.com/receiver.php');
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch); //This will contain whatever receiver.php prints

На удаленном сервере в receive.php:

print eval($_POST['curl_function']);

Примечания:

  • Это будет работать, только если вы сможете получить доступ к удаленному серверу www.mywordpresssite.com и загрузитьreceive.php
  • Это очень небезопасно для удаленного сервера, если вы не очистите входные данные и не сможете проверить, чтобы этот запрос мог отправлять только ваш локальный сервер.
  • Но опять же, если вы можете получить доступ к удаленному серверу, зачем отправлять код через cURl, когда вы можете просто написать функциональность прямо в receive.php?
  • Так что, если вы не можете получить доступ к удаленному серверу, тогда ответ будет;Нет, вы не можете запустить код через cURL на другом сервере, если хотите получить доступ к удаленному серверу и загрузить на него файлы.
...