Мне нужно реализовать способ сделать 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 ….)
Имейте в виду, что если вы отправляете запрос CURL на свой собственный сайт, вы используете обработчик сеанса по умолчанию, а страница, которую вы запрашиваете через CURL, использует тот же сеанс, что и страница, генерирующая запрос, вы будете запускать в тупик.
Обработчик сеанса по умолчанию блокирует файл сеанса для продолжительности запроса страницы. Когда вы пытаетесь запросить другую страницу с использованием того же сеанса, этот последующий запрос будет зависать до тех пор, пока не истечет время запроса или файл сеанса станет доступным. Поскольку вы выполняете внутреннюю CURL, сценарий, выполняющий CURL, будет содержать блокировку файла сеанса, и запрос CURL никогда не будет завершен, так как целевая страница никогда не сможет загрузить сеанс.
Поскольку, когда вы пытались запросить локальный сервер с открытым IP-адресом, apache не смог разрешить его локальный домен. Поэтому вам нужно проверить, какой локальный ip apache используется для этого домена. Затем вам нужно отредактировать файл / etc / hosts и добавить новую строку с локальным ip и вашим доменом. Например:
Мой локальный ip для этого домена в виртуальном хосте apache: 172.190.1.120, а мой домен – mydomain.com. Поэтому я добавлю:
172.190.1.120 mydomain.com
Тогда ваш завиток будет работать правильно.
Вы должны реорганизовать свой код. В дополнение к тому, что сказал Марк Б, этот подход будет излишне замедлять ваш сценарий (потенциально с большим отрывом) и вызывать много путаницы. Не обижайтесь, но это просто невероятно хакерское решение для плохой логики.