CURL альтернатива встроенной функции «file_get_contents()»

#php #curl

#php #curl

Вопрос:

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

после перехода с file get contents на cURL приведенный ниже код не выводит

     //$data = @file_get_contents("http://www.city-data.com/city/".$cityActualURL."-".$stateActualURL.".html");
//$data = file_get_contents("http://www.city-data.com/city/Geneva-Illinois.html");

//Initialize the Curl session
$ch = curl_init();
$url= "http://www.city-data.com/city/".$cityActualURL."-".$stateActualURL.".html";
//echo "$url<br>";
 $ch = curl_init();
  $timeout = 5;
  curl_setopt($ch,CURLOPT_URL,$url);
  curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
  curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
  $data = curl_exec($ch);
  curl_close($ch);
//echo $data;

$details = str_replace("n", "", $data);
$details = str_replace("r", "", $details);


$detailsBlock = <<<HTML
~<div style='clear:both;'></div><br/><b>(.*?) on our <a href='http://www.city-data.com/top2/toplists2.html'>top lists</a>: </b><ul style='margin:10px;'>(.*?)<div style='bp_bindex'>~
HTML;

$detailsBlock2 = <<<HTML
~<br/><br/><b>(.*?) on our <a href='http://www.city-data.com/top2/toplists2.html'>top lists</a>: </b><ul style='margin:10px;'>(.*?)</ul></td>~
HTML;

$detailsBlock3 = <<<HTML
~<div style='clear:both;'></div><br/><b>(.*?) on our <a href='http://www.city-data.com/top2/toplists2.html'>top lists</a>: </b><ul style='margin:10px;'>(.*?)</ul></td>~
HTML;

preg_match($detailsBlock, $details, $matches);
preg_match($detailsBlock2, $details, $matches2);
preg_match($detailsBlock3, $details, $matches3);

if (isset($matches[2]))
{
    $facts = "<ul style='margin:10px;'>".$matches[2];
}

elseif (isset($matches2[2]))
{
    $facts = "<ul style='margin:10px;'>".$matches2[2];
}

elseif (isset($matches3[2]))
{
    $facts = "<ul style='margin:10px;'>".$matches3[2];
}

else
{
    $facts = "More Information to Come...";
}
  

Комментарии:

1. Почему вы хотите использовать cURL вместо file_get_contents?

2. @Frits van Campen, поскольку рекомендуется использовать Curl. Многие хосты веб-серверов отключают возможность использования file_get_contents();

3. Итак, вы меняете код без необходимости его изменения на самом деле? Получайте удовольствие!

4. Раньше это работало нормально, пока хост не отключил удаленные file_get_contents

5. после перехода с file get contents на cURL приведенный ниже код не выводит

Ответ №1:

Если у вас возникла проблема с вашим скриптом, вам необходимо его отладить. Например:

 $data = curl_exec($ch);
var_dump($data); die();
  

Затем вы получите вывод, который $data есть. В зависимости от выходных данных вы можете дополнительно решить, где искать причину неисправности дальше.

Комментарии:

1. Я получаю bool (false), используя var_dump. Если я повторяю переменную, я получаю всю страницу, но чего она не будет делать, так это выводить массивы

2. Хорошо, тогда неудивительно, что вы не получаете никаких данных, потому что ваш запрос не удался. Чтобы узнать, что означает возвращаемое значение false, ознакомьтесь с руководством по PHP: curl_exec

3. curl_exec возвращает false при ошибке. Вы можете получить сообщение об ошибке с помощью curl_error($ch) .

Ответ №2:

Следующая функция отлично работает, просто передайте ей URL.

 function file_get_data($url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //Set curl to return the data instead of printing it to the browser.
    curl_setopt($ch, CURLOPT_URL, $url);
    $data = curl_exec($ch);
    curl_close($ch);
    return $data;
}
  

СОВЕТ: Новые строки и возврат каретки могут быть заменены одной строкой кода.

  $details = str_replace(array("rn","r","n"), '', $data);