PHP cURL из входного файла

Я пытаюсь получить HTTP-ответ какого-то веб-сайта.

Я буду проверять около 30000 из них ежедневно в течение примерно 6 месяцев, и список будет обновляться ежедневно, поэтому я хотел бы иметь возможность читать URL-адреса из файла.

Вот что работает без файла:

<?php
$url1 = 'http://www.google.com';
$url2 = 'http://www.yahoo.com';
$url3 = 'http://www.bing.com';

$s = get_headers($url1, 1);
$y = get_headers($url2, 1);
$z = get_headers($url3, 1);

$g = $s[0];
$h = $y[0];
$i = $z[0];

echo $url1 . " - " . $g . "\n";
echo $url2 . " - " . $h . "\n";
echo $url3 . " - " . $i . "\n";
?>

Пример вывода:

http://www.google.com - HTTP/1.0 200 OK
http://www.yahoo.com - HTTP/1.0 301 Moved Permanently
http://www.bing.com - HTTP/1.1 200 OK

Теперь, когда я пытаюсь запустить то же самое с файлом и для каждого цикла, я получаю вывод файла, но без ответа. Что я делаю неправильно.

Я проверил вывод массива, и все выглядит хорошо.

<?php
error_reporting(0);

$file_lines = file('urls.txt');

foreach ($file_lines as $line) {
    $s = get_headers($line, 1);
    $g = $s[0];
    echo $line . " - " . $g . "\n";
}
?>

urls.txt:

http://www.google.com
http://www.yahoo.com
http://www.bing.com

Пример вывода:

http://www.google.com
 -
http://www.yahoo.com
 -
http://www.bing.com
 -

Когда ошибки отключены, я получаю сообщение об ошибке и пробовал исправить кучу исправлений, но все еще в тупике.

Пример вывода:

PHP Warning:  get_headers(): php_network_getaddresses: getaddrinfo failed: Name or service not known in /var/www/site/testsites.php on line 23
PHP Warning:  get_headers(http://www.google.com): failed to open stream: php_network_getaddresses: getaddrinfo failed: Name or service not known in /var/www/site/testsites.php on line 23
http://www.google.com
 -
PHP Warning:  get_headers(): php_network_getaddresses: getaddrinfo failed: Name or service not known in /var/www/site/testsites.php on line 23
PHP Warning:  get_headers(http://www.yahoo.com): failed to open stream: php_network_getaddresses: getaddrinfo failed: Name or service not known in /var/www/site/testsites.php on line 23
http://www.yahoo.com
 -
PHP Warning:  get_headers(): php_network_getaddresses: getaddrinfo failed: Name or service not known in /var/www/site/testsites.php on line 23
PHP Warning:  get_headers(http://www.bing.com): failed to open stream: php_network_getaddresses: getaddrinfo failed: Name or service not known in /var/www/site/testsites.php on line 23
http://www.bing.com
 -
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
67
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Это потому, что каждая строка имеет окончание. Вы можете использовать функцию trim, чтобы удалить его.

$file_lines = file('urls.txt');

foreach ($file_lines as $line) {
    $s = get_headers(trim($line), 1);
    $g = $s[0];
    echo $line . " - " . $g . "\n";
}

Когда вы читаете строки из файла, вы также получаете символ новой строки, который включается в адрес для get_headers().

Использовать

$file_lines = file('urls.txt', FILE_IGNORE_NEW_LINES);

Чтобы убрать новые строки в ваших адресах, все должно работать.

http://php.net/manual/en/function.file.php

Ответ принят как подходящий

Поскольку функция file () считывает символ новой строки из файла urls.txt. Все URL-адреса добавят символ новой строки в конце каждой строки.

Пример: http://www.google.com => http://www.google.com/n

Решение: Добавьте FILE_IGNORE_NEW_LINES, чтобы опустить новую строку.

$file_lines = file('urls.txt', FILE_IGNORE_NEW_LINES);

<?php
error_reporting(0);

$file_lines = file('urls.txt', FILE_IGNORE_NEW_LINES);

foreach ($file_lines as $line) {
    $s = get_headers($line, 1);
    $g = $s[0];
    echo $line . " - " . $g . "\n";
}
?>

Другие вопросы по теме