Intereting Posts
Как рассматривать одиночную новую строку как реальный разрыв строки в PHP Markdown? Формула для нахождения простых чисел в цикле Mailgun Отправлено письмо С приложением Блокировать прямой доступ к файлу PHP за исключением запроса AJAX? Laravel Hash :: check () allways возвращает false Есть ли сайт, который просто выводит последние стабильные номера версий php и mysql? Проблема дублирования электронной почты PHPmailer – условная заявка с помощью $ mail-> Отправить () Незаконный строковый корректор Как создать страницу 404 на сервере WAMP PHP getimagesize () не работает PHP: получить версию протокола HTTP (HTTP / 1.1 vs HTTP / 2) Добавление собственной суммы на кнопку оплаты Визуальный Composer пользовательский шаблон короткого кода – custom_markup отображение пользовательского ввода QuickBooks обнаружил ошибку при анализе предоставленного текстового потока XML Отправить личное сообщение для JQuery

Можно ли использовать curl с относительным путем в PHP?

У меня две страницы php. Я хочу получить b.php в a.php.

В моем a.php:

$ch = curl_init("b.php"); echo(curl_exec($ch)); curl_close($ch); 

Не работает;

Но:

 $ch = curl_init("www.site.com/b.php"); echo(curl_exec($ch)); curl_close($ch); 

это нормально. Я уверен, что a.php находится на www.site.com.

Почему завиток не может работать с относительным путем? Есть ли обходной путь?

Curl – это отдельная библиотека, которая на самом деле ничего не знает о веб-серверах и где она исходит или (философски), почему она существует. Таким образом, вы можете «подделывать» относительные URL-адреса, используя одну из двух переменных _SERVER:

 $_SERVER['SERVER_NAME'] 

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

 $_SERVER['HTTP_HOST'] 

Содержимое заголовка Host: из текущего запроса, если таковой имеется.

См .: http://php.net/manual/en/reserved.variables.server.php

Изменить обновление: я подумал еще немного об этом: вам действительно нужно забрать его с помощью завитка? Обычно вы также можете получить любой вывод другого сценария, подобный этому, и сохранить накладные расходы на загрузку через новый HTTP-запрос:

 ob_start(); require "b.php"; $output = ob_get_clean(); 

Как насчет приема домена из HTTP_HOST?

 $domain = $_SERVER['HTTP_HOST']; $prefix = $_SERVER['HTTPS'] ? 'https://' : 'http://'; $relative = '/b.php' $ch = curl_init($prefix.$domain.$relative) 

Для работы cUrl необходим абсолютный URI.

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

Однако, если у вас есть базовый URI и относительный URI, создайте абсолютный URI относительного URI и используйте его с cUrl.

См. 12.4.1 Разрешение относительных URI .

Класс PHP, который может создавать абсолютный URI, основанный на относительном URI и его базе, представляет собой пакет Net_URL2 в Pear.

cURL в первую очередь будет использоваться для извлечения данных из внешних доменов, поэтому не будет иметь слишком большого смысла, чтобы допускать относительные пути. Самое простое – просто добавить свой текущий домен в URL.

 $domain = $_SERVER['HTTP_HOST'] . "/"; $ch = curl_init($domain . "b.php"); echo(curl_exec($ch)); curl_close($ch); 

CURL абсолютно не знает о своей операционной среде. Невозможно узнать, где находится «b.php». Должно ли это превратить это в example.org/b.php или some.wonky.multi.level.domain.co.uk/b.php ?

Даже рассматривать его как локальную ссылку на файл было бы бесполезно … CURL не знал бы, что .php файл на самом деле является скриптом PHP. Даже если он сделал локальную выборку файла, вы просто получите источник PHP, а не вывод скрипта после запуска PHP. Что делать, если у вас есть сайт, такой как arstechnica.com где все его страницы на самом деле .ars скриптами .ars ? Это .asp? .aspx? .html? PHP-скрипт? Perl? Рубин?

Итак .. простой ответ: вы должны всегда указывать полный URL-адрес, с протоколом, для работы CURL.