[Обновлено внизу] Всем привет.
Начните с коротких URL-адресов: Представьте, что у вас есть коллекция из 5 коротких URL-адресов (например, http://bit.ly) в массиве php, например:
$shortUrlArray = array("http://bit.ly/123",
"http://bit.ly/123",
"http://bit.ly/123",
"http://bit.ly/123",
"http://bit.ly/123");
Конец с конечными, перенаправленными URL-адресами: Как я могу получить окончательный URL этих коротких URL с помощью php?Вот так:
http://www.example.com/some-directory/some-page.html
http://www.example.com/some-directory/some-page.html
http://www.example.com/some-directory/some-page.html
http://www.example.com/some-directory/some-page.html
http://www.example.com/some-directory/some-page.html
У меня есть один метод (найденный в сети), который хорошо работает с одним URL, но при циклическом перемещении по нескольким URL он работает только с последним URL в массиве.Для справки, метод таков:
function get_web_page( $url )
{
$options = array(
CURLOPT_RETURNTRANSFER => true, // return web page
CURLOPT_HEADER => true, // return headers
CURLOPT_FOLLOWLOCATION => true, // follow redirects
CURLOPT_ENCODING => "", // handle all encodings
CURLOPT_USERAGENT => "spider", // who am i
CURLOPT_AUTOREFERER => true, // set referer on redirect
CURLOPT_CONNECTTIMEOUT => 120, // timeout on connect
CURLOPT_TIMEOUT => 120, // timeout on response
CURLOPT_MAXREDIRS => 10, // stop after 10 redirects
);
$ch = curl_init( $url );
curl_setopt_array( $ch, $options );
$content = curl_exec( $ch );
$err = curl_errno( $ch );
$errmsg = curl_error( $ch );
$header = curl_getinfo( $ch );
curl_close( $ch );
//$header['errno'] = $err;
//$header['errmsg'] = $errmsg;
//$header['content'] = $content;
print($header[0]);
return $header;
}
//Using the above method in a for loop
$finalURLs = array();
$lineCount = count($shortUrlArray);
for($i = 0; $i <= $lineCount; $i++){
$singleShortURL = $shortUrlArray[$i];
$myUrlInfo = get_web_page( $singleShortURL );
$rawURL = $myUrlInfo["url"];
array_push($finalURLs, $rawURL);
}
Закрыть, но недостаточно Этот метод работает, но только с одним URL.Я не могу использовать его в цикле for, что я и хочу сделать.При использовании в приведенном выше примере в цикле for первые четыре элемента возвращаются без изменений, и только последний элемент преобразуется в его окончательный URL-адрес.Это происходит независимо от того, содержит ли ваш массив 5 элементов или 500 элементов.
Требуемое решение: Пожалуйста, дайте мне подсказку о том, как бы вы изменили этот метод для работы при использовании внутри цикла for с коллекцией URL-адресов (а не только с одним).
-OR-
Если вам известен код, который лучше подходит для этой задачи, включите его в свой ответ.
Заранее спасибо.
Обновление: После некоторых дальнейших попыток я обнаружил, что проблема заключается не в приведенном выше методе (который, в конце концов, кажется, работает нормально для циклов), а, возможно, в кодировании.Когда я жестко кодирую массив коротких URL, цикл работает нормально.Но когда я передаю блок разделенных символом новой строки URL-адресов из HTML-формы, используя GET или POST, возникает вышеупомянутая проблема.Изменяются ли URL-адреса каким-либо образом в формат, несовместимый с методом, когда я отправляю форму ????
Новое обновление: Вы, ребята, я обнаружил, что моя проблема была связана с чем-то, не связанным с вышеуказанным методом.Моя проблема заключалась в том, что кодировка URL моих коротких URL-адресов преобразовывала то, что я считал просто символами новой строки (разделяя URL-адреса), в следующее:% 0D% 0A, которое является символом перевода строки или возврата ...У окончательного URL в коллекции к хвосту был добавлен символ-призрак, что делало невозможным получение окончательных URL-адресов только для них.Я опознал призрачного персонажа, исправил взрыв php и теперь все работает нормально.Извините и спасибо.