Как зациклить скрипт в PHP?
Написал примитивный скрипт PHP.
Согласен, что это не грамотно и т.д., но он работает.
<?php $file = 'result.txt'; // считывает первую строку из mylink.txt $f = fopen("mylink.txt", "r"); $str = fgets($f); fseek($f, 0); // удаляет первую строку из mylink.txt и пересохраняет его $lines = file('mylink.txt'); unset($lines[0]); file_put_contents('mylink.txt', implode('', $lines)); // обрабатывает ссылку с помощью api $long_url = urlencode($str); $api_token = 'bc3db05f576c8b99d44f65eab7970cd0dbfe9d37'; $api_url = "https://shrink.pe/api?api={$api_token}&url={$long_url}"; $result = file_get_contents($api_url); if( $result ){ echo $result; } // сохраняет результат в result.txt file_put_contents($file, $long_url . PHP_EOL, FILE_APPEND); file_put_contents($file, $result . PHP_EOL, FILE_APPEND); fclose($file); // задержка в 1 секунду sleep(1); ?> |
<?php $file = 'result.txt'; // считывает первую строку из mylink.txt $f = fopen("mylink.txt", "r"); $str = fgets($f); fseek($f, 0); // удаляет первую строку из mylink.txt и пересохраняет его $lines = file('mylink.txt'); unset($lines[0]); file_put_contents('mylink.txt', implode('', $lines)); // обрабатывает ссылку с помощью api $long_url = urlencode($str); $api_token = 'bc3db05f576c8b99d44f65eab7970cd0dbfe9d37'; $api_url = "https://shrink.pe/api?api={$api_token}&url={$long_url}"; $result = file_get_contents($api_url); if( $result ){ echo $result; } // сохраняет результат в result.txt file_put_contents($file, $long_url . PHP_EOL, FILE_APPEND); file_put_contents($file, $result . PHP_EOL, FILE_APPEND); fclose($file); // задержка в 1 секунду sleep(1); ?>
Единственное, что осталось - это зациклить данный скрипт, чтобы он мог обработать весь список ссылок из файла mylink.txt
Дополнительно:
Для получения ссылок используйте функции чтения файлов. Если файл небольшой, и поместиться в память, можно прочить его сразу весь (file, file_get_contents). Если там гигабайты, то используйте построчное чтение (функции открыть, закрыть файл, прочитать строку).
Для записи результатов в файл, используйте функции записи, целиком или с дописыванием file_put_contents, либо построчно (функции открыть, закрыть файл, записать строку).
Для выполнения задержки можно использовать функцию sleep.
Описания всех фукнций на русском языке можно найти в официальном мануале языка php.
Возникнут конкретные трудности - зададите вопросы, сейчас больше помочь нечем.
Чтобы получить готовый код разместите этот вопрос на https://freelance.habr.com/ там можно быстрей получить результат с такой постановкой вопроса.
Это если не говорить о php-cli, с этим я не работал, может там это приемлемее
Такое в консоли обычно запускается.
тоже соглашусь, что такой вариант более подходящий, но мне редко встречались люди, которые работают с пхп в консоли. Поэтому смею предположить, что когда автор сделает скрипт с задержкой, то его следующий вопрос будет по типу "страница выдает ошибку через 30-60 секунд".
Для консоли я бы порекомендовал автору изучить азы питона и там, в такие же 10 строк, сделать более подходящий скрипт. Я делал уже различные парсеры и прочую лабуду на несколько тысяч строк (данных из файла(ов)) с выполнением в несколько часов, питон отлично с этим справляется. Ну или на пхп в консоли, но я так не работал с ним, поэтому и не говорю ничего об этом методе)
Самая типичная задача это cron, ну и конечно скрипты для деплоя...
Функционал PHP не ограничивается просто выводом в браузер, я ради интереса написал нечто похожее на нейросеть с возможностью обучения, и это работает как в консоли, так и с выводом в браузер...
Спасибо за подсказку.
Долго мне пришлось повозиться, но уже что-то получилось!
<?php
$file = 'result.txt';
$long_url = urlencode('mylink.com');
$api_token = 'bc3db05f576c8b99d44f65eab7970cd0dbfe9d37';
$api_url = "https://shrink.pe/api?api={$api_token}&url={$long_url}";
$result = @file_get_contents($api_url);
if( $result ){
echo $result;
}
file_put_contents($file, $result . PHP_EOL, FILE_APPEND);
sleep(1);
?>
По крайней мере это работает.
Но как сделать, чтобы ссылки mylink.com читались из отдельного файла mylink.txt ума не приложу? Размер файла mylink.txt примерно 10-30 мб.
Нашел такой вариант чтения файла построчно. Как бы для моего случая.
<?php $file = fopen('mylink.txt', 'r'); while (!feof($file)) { echo fgets($file); echo '<br>'; } fclose($file); ?> |
<?php $file = fopen('mylink.txt', 'r'); while (!feof($file)) { echo fgets($file); echo '<br>'; } fclose($file); ?>
Теперь осталось только соединить эти кода. Для меня это пока непонятно.
<?php $file = 'result.txt'; // считывает первую строку из mylink.txt $f = fopen("mylink.txt", "r"); $str = fgets($f); fseek($f, 0); // удаляет первую строку из mylink.txt и пересохраняет его $lines = file('mylink.txt'); unset($lines[0]); file_put_contents('mylink.txt', implode('', $lines)); // обрабатывает ссылку с помощью api $long_url = urlencode($str); $api_token = 'bc3db05f576c8b99d44f65eab7970cd0dbfe9d37'; $api_url = "https://shrink.pe/api?api={$api_token}&url={$long_url}"; $result = file_get_contents($api_url); if( $result ){ echo $result; } // сохраняет результат в result.txt file_put_contents($file, $long_url . PHP_EOL, FILE_APPEND); file_put_contents($file, $result . PHP_EOL, FILE_APPEND); fclose($file); // задержка в 1 секунду sleep(1); ?> |
<?php $file = 'result.txt'; // считывает первую строку из mylink.txt $f = fopen("mylink.txt", "r"); $str = fgets($f); fseek($f, 0); // удаляет первую строку из mylink.txt и пересохраняет его $lines = file('mylink.txt'); unset($lines[0]); file_put_contents('mylink.txt', implode('', $lines)); // обрабатывает ссылку с помощью api $long_url = urlencode($str); $api_token = 'bc3db05f576c8b99d44f65eab7970cd0dbfe9d37'; $api_url = "https://shrink.pe/api?api={$api_token}&url={$long_url}"; $result = file_get_contents($api_url); if( $result ){ echo $result; } // сохраняет результат в result.txt file_put_contents($file, $long_url . PHP_EOL, FILE_APPEND); file_put_contents($file, $result . PHP_EOL, FILE_APPEND); fclose($file); // задержка в 1 секунду sleep(1); ?>
Единственное прошу помочь зациклить процесс. Чтобы все ссылки из файла mylink.txt были обработаны.
Вопрос решен!
Всем спасибо за помощь, особенно Сергей delphinpro
<?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); } ?> |
<?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); } ?>
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для зацикливания скрипта в PHP можно использовать различные конструкции, такие как циклы while, do-while, for или foreach. В зависимости от конкретной задачи можно выбрать наиболее подходящий тип цикла.
Пример зацикливания скрипта с помощью цикла while:
$i = 0; while($i < 10) { // ваш код, который нужно выполнить в цикле echo "Итерация номер: " . $i . "<br>"; $i++; }
Пример зацикливания скрипта с помощью цикла for:
for($i = 0; $i < 10; $i++) { // ваш код, который нужно выполнить в цикле echo "Итерация номер: " . $i . "<br>"; }
Если вам нужно выполнить какой-то код хотя бы один раз перед проверкой условия, то можно воспользоваться циклом do-while:
$i = 0; do { // ваш код, который нужно выполнить в цикле echo "Итерация номер: " . $i . "<br>"; $i++; } while ($i < 10);
Также можно использовать цикл foreach для перебора элементов массива или объекта:
$colors = array("red", "green", "blue"); foreach($colors as $color) { // ваш код, который нужно выполнить в цикле echo $color . "<br>"; }
Выбор конкретного типа цикла зависит от задачи, которую вы пытаетесь решить. Например, если вам нужно выполнить цикл определенное количество раз, то лучше использовать цикл for. Если условие выполнения цикла неизвестно заранее, то цикл while будет более уместным выбором.