Могу ли я сделать запрос CURL на тот же сервер? - PullRequest
25 голосов
/ 24 марта 2011

Мне нужно реализовать способ делать POST-вызовы на страницы, расположенные на том же сервере или на другом сервере.Мы не можем использовать include, потому что файлы, которые мы вызываем, обычно вызывают разные базы данных или имеют функции с одинаковыми именами.

Я пытался реализовать это с помощью curl, и, хотя он отлично работает при вызове файлов с другого сервера, я абсолютно ничего не получаю при обращении к тому же серверу, где находится файл.

РЕДАКТИРОВАТЬ ДОБАВИТЬ НЕКОТОРЫЙ КОД: упрощенная версия того, что я делаю:

File1.php

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "www.myserver.com/File2.php");
curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_VERBOSE, true);
$result = curl_exec($ch);
curl_close($ch);
echo $result;
?>

File2.php

<?php
echo "I'M IN!!";
?>

После вызова File1.php я ничего не получаю, но если File2.php находится на другом сервере, я получаю результат.Любая помощь?

Я пытался использовать как URL сервера (http ...), так и общий адрес файлов (/home/wwww....)

Ответы [ 3 ]

51 голосов
/ 24 марта 2011

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

Обработчик сеанса по умолчанию блокирует файл сеанса на время запроса страницы.Когда вы пытаетесь запросить другую страницу, используя тот же сеанс, этот последующий запрос будет зависать, пока не истечет время ожидания запроса или файл сеанса не станет доступным.Поскольку вы выполняете внутренний CURL, скрипт, выполняющий CURL, будет удерживать блокировку файла сеанса, и запрос CURL никогда не может быть выполнен, поскольку целевая страница никогда не сможет загрузить сеанс.

4 голосов
/ 15 сентября 2014

Потому что, когда вы пытались сделать запрос к локальному серверу с публичным ip, apache не смог разрешить его локальный домен.Поэтому вы должны проверить, какой локальный ip apache использует для этого домена.Затем вам нужно отредактировать файл / etc / hosts и добавить новую строку с локальным ip плюс ваш домен.Например:

Мой локальный ip для этого домена в виртуальном хосте apache: 172.190.1.120, а мой домен - mydomain.com. Поэтому я добавлю:

172.190.1.120 mydomain.com

Тогда ваш локон будет работать правильно.

1 голос
/ 24 марта 2011

Вы должны рефакторинг вашего кода.В дополнение к тому, что упомянул Марк Б, этот подход излишне замедлит ваш скрипт (потенциально с большим отрывом) и вызовет много путаницы.Без обид, но это просто невероятное исправление плохой логики.

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