PHP cURL из входного файла - PullRequest
0 голосов
/ 04 октября 2018

Я пытаюсь получить 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
 -

Ответы [ 3 ]

0 голосов
/ 04 октября 2018

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

Используйте

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

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

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

0 голосов
/ 04 октября 2018

Из-за функции 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";
}
?>
0 голосов
/ 04 октября 2018

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

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

foreach ($file_lines as $line) {
    $s = get_headers(trim($line), 1);
    $g = $s[0];
    echo $line . " - " . $g . "\n";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...