Доработать функцию PHP?
Я только начинаю осваивать PHP. Код, которым я пользуюсь:
<?php
$file = 'result.txt';
$long_url = urlencode('mylink.com');
$api_token = '0123456789';
$api_url = "https://mysite.com/api?api={$api_token}&url={$long_url}";
$result = file_get_contents($api_url);
if( $result ){
echo $result;
}
file_put_contents($file, $long_url . PHP_EOL, FILE_APPEND);
file_put_contents($file, $result . PHP_EOL, FILE_APPEND);
fclose($file);
sleep(1);
?>
Вроде бы работает исправно. Но мне необходимо ссылку mylink.com брать из отдельного файла mylink.txt. Размер файла примерно 10-30 мб.
В нём список ссылок, каждая в отдельной строке. Надо, чтобы по очереди бралась одна ссылка, обрабатывалась с помощью функции выше и результат записывался в файл result.txt.
Есть такой вариант чтения файла:
<?php
$file = fopen('mylink.txt', 'r');
while (!feof($file)) {
echo fgets($file);
echo '<br>';
}
fclose($file);
?>
Но как соединить эти функции, я без понятия.
В результате должно произойти следующее:
- прочтена ссылка из файла mylink.txt
- ссылка обработана с помощью $api_url
- результат записан в файл result.txt в такой последовательности (в одной строке записывается $long_url, в следующей строке записывается $result
- Далее выполняется задержка 1 сек.
- Цикл продолжается, до тех пор, пока файл mylink.txt полностью не будет прочитан.
Пожалуйста, помогите доработать код.
Ответы (2 шт):
В общих чертах так: создаете функцию для обработки, в т.ч. сохранения ulr-ов, например, handle_url(). Далее - организуете цикл чтения данных из файла и каждую строку передаете в handle_url().
Не тестировал.
<?php
function handle_url($url){
$file = 'result.txt';
$long_url = urlencode($url);
$api_token = '0123456789';
$api_url = "https://mysite.com/api?api={$api_token}&url={$long_url}";
$result = file_get_contents($api_url);
if( $result ){
echo $result;
}
file_put_contents($file, $long_url . PHP_EOL, FILE_APPEND);
file_put_contents($file, $result . PHP_EOL, FILE_APPEND);
fclose($file);
sleep(1);
}
$file = fopen('mylink.txt', 'r');
if ($file){
while (!feof($file)) {
handle_url(fgets($file));
}
fclose($file);
}
?>
Вопрос решен! Спасибо @Алексей-Р за помощь!
Нужно удалить fclose($file); и в конце поставить fseek($file, 0);
<?php
function handle_url($url) {
$file = 'result.txt';
$long_url = urlencode($url);
$api_token = '0123456789';
$api_url = "https://mysite.com/api?api={$api_token}&url={$long_url}";
$result = file_get_contents($api_url);
if ($result) {
echo $result;
}
file_put_contents($file, $long_url . PHP_EOL, FILE_APPEND);
file_put_contents($file, $result . PHP_EOL, FILE_APPEND);
sleep(1);
}
$file = fopen('mylink.txt', 'r');
if ($file) {
while (($line = fgets($file)) !== false) {
handle_url($line);
}
fseek($file, 0);
}
?>