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

Могу ли я сделать запрос CURL на тот же сервер?

Мне нужно реализовать способ сделать 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....)

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

172.190.1.120 mydomain.com

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

Ответ 3

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