У меня есть относительно простой скрипт, подобный следующему:
<?php
$url = "localhost:2222/test.html";
echo "*** URL ***\n";
echo $url . "\n";
echo "***********\n";
echo "** whoami *\n";
echo exec('whoami');
echo "* Output **\n";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
echo $output;
Когда я выполняю его в командной строке, он работает — я получаю скудные результаты из test.html.
Когда я запускаю этот скрипт, загружая встроенный сервер PHP и просматривая его, он зависает. Нет вывода на экран, ничего не записано в журналах.
Я читал, что иногда могут мешать пользовательские разрешения, поэтому я попытался сделать whoami, чтобы убедиться, что пользователь, запустивший встроенный сервер PHP, совпадает с пользователем, который выполнил сценарий в командной строке; которые они есть.
safe_mode выключен, disable_functions установлен в ноль. Я могу успешно выполнить другие команды (например, whoami).
Что еще я должен проверить? Может ли встроенный сервер PHP считаться кем-то другим, когда он выполняет запрос?
Чтобы сделать комментарий ответом: встроенный веб-сервер разработки PHP — это очень простой однопоточный тестовый сервер. Он не может обрабатывать два запроса одновременно. Вы пытаетесь извлечь файл из себя в отдельном запросе, поэтому вы попали в тупик. Первый запрос ожидает завершения второго, но второй запрос не может быть обработан, пока первый еще выполняется.
Я думаю проблема в вашем $ url. Это может выглядеть так: $ url = «HTTP: // локальный: 2222 / test.html«; или $ url =»Http: //localhost/test.htmlЯ думаю, это решит вашу проблему. Спасибо за ваш вопрос. Желаем удачи.