2015-05-26 5 views
0

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

<?php 
$URL = 'http://www.site1.com'; 
$URL = 'http://www.site2.com'; 
$URL = 'http://www.site3.com'; 

$handlerr = curl_init($URL); 
curl_setopt($handlerr, CURLOPT_RETURNTRANSFER, TRUE); 
$resp = curl_exec($handlerr); 
$ht = curl_getinfo($handlerr, CURLINFO_HTTP_CODE); 

if ($ht == '404') 
{ echo "Sorry the website is down atm, please come back later!";} 
else { header('Location: '. $URL);} 
?> 

ответ

1

У вас есть несколько проблем в коде. Для 1 ваш $ URL-адрес перезапишет сам, в результате получится всего 1 URL-адрес. Он должен быть массивом:

array('http://www.site1.com', 'http://www.site2.com', 'http://www.site3.com'); 

Вы можете получить много ответов, а не только 404, так что вы должны сказать Curl следовать редиректов. Если URL-адрес был перенаправлен, может получить 301, который перенаправляет на 200. Таким образом, мы хотим следовать этому.

Попробуйте:

<?php 

function curlGet($url) 
{ 
    $ch = curl_init($url); 
    curl_setopt($ch, CURLOPT_HEADER, true); 
    curl_setopt($ch, CURLOPT_NOBODY, true); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 10); 
    $output = curl_exec($ch); 
    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
    if ($httpcode == 200) { 
     return true; 
    } 
    return false; 
} 

$urlArray = array('http://www.site1.com', 'http://www.site2.com', 'http://www.site3.com'); 

foreach ($urlArray as $url) { 

    if ($result = curlGet($url)) { 
     header('Location: ' . $url); 
     exit; 
    } 

} 

// if we made it here, we looped through every url 
// and none of them worked 
echo "No valid URLs found..."; 
+0

Спасибо Wade он работает как шарм, вы только что сделали опечатку в строке 21, это «{», а не «}», отлично! –

+0

опечатка фиксированная .. не имеет очков: D –

0

http://php.net/manual/en/function.file-exists.php#74469

<?php 
function url_exists($url) { 
    if (!$fp = curl_init($url)) return false; 
    return true; 
} 
?> 

Это даст вам URL существует чек.

проверить несколько адресов, хотя, вам нужен массив:

<? 
$url_array = []; 
$url_array[] = 'http://www.site1.com'; 
$url_array[] = 'http://www.site2.com'; 
$url_array[] = 'http://www.site3.com'; 

foreach ($url_array as $url) { 
    if url_exists($url){ 
     // do what you need; 
     break; 
    } 
} 

?> 

PS - это совершенно не проверялось, но теоретически должна делать то, что вам нужно.

2

Вы переписав $URL переменную ..

$URL = 'http://www.site1.com'; 
$URL = 'http://www.site2.com'; 
$URL = 'http://www.site3.com'; 

Поместите эти адреса в массиве и пройти через него с for each цикла.

Смежные вопросы