Как зациклить скрипт в PHP?

Ссылка скопирована
PHP
1 ответ

Написал примитивный скрипт 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.
Возникнут конкретные трудности - зададите вопросы, сейчас больше помочь нечем.

  • В комментарии Сергей delphinpro все четко расписано, но как мне показалось упущен еще один пункт про готовый код:
    Чтобы получить готовый код разместите этот вопрос на https://freelance.habr.com/ там можно быстрей получить результат с такой постановкой вопроса.
  • Сергей delphinpro, стоит уточнить, что "Для выполнения задержки можно использовать функцию sleep." - это не совсем про пхп. Можно, но не рекомендуется. Хотя, если я ошибаюсь - поправьте
  • maksam07, так себе вариант, конечно, топорный. Но ведь и задача четко не обозначена. Может вполне подойдет.
  • maksam07, а почему не про пхп? https://www.php.net/manual/ru/function.sleep.php
  • Сергей delphinpro, я в принципе о задержках для пхп. Он же больше предназначен для быстрого ответа, без лишних ожиданий. Конечно, можно их использовать, но множественные sleep'ы я расцениваю примерно так же, как и написание десктопных программ на пхп - можно, если ты любитель совать палки в колеса)
    Это если не говорить о php-cli, с этим я не работал, может там это приемлемее
  • maksam07, согласен. Но задача скорее всего утилитарная - обработать ссылки, может спарсить их. Такое в консоли обычно запускается. Запустил - пошел пить кофе, пока оно крутится.
  • Сергей delphinpro,

    Такое в консоли обычно запускается.

    тоже соглашусь, что такой вариант более подходящий, но мне редко встречались люди, которые работают с пхп в консоли. Поэтому смею предположить, что когда автор сделает скрипт с задержкой, то его следующий вопрос будет по типу "страница выдает ошибку через 30-60 секунд".

    Для консоли я бы порекомендовал автору изучить азы питона и там, в такие же 10 строк, сделать более подходящий скрипт. Я делал уже различные парсеры и прочую лабуду на несколько тысяч строк (данных из файла(ов)) с выполнением в несколько часов, питон отлично с этим справляется. Ну или на пхп в консоли, но я так не работал с ним, поэтому и не говорю ничего об этом методе)

  • maksam07, да любой язык подойдет.тот который лучше знаешь. Я пишу разные небольшие утилитки для консоли на пыхе или на джаваскрипт.
  • maksam07, Сергей delphinpro, совершенно верно. Нет неправильного инструментария - есть некорректное его использование. PHP так же прекрасен в консольном применении, как и Python, и Perl, и BASH и т.д. Просто мода сейчас другая, да-да-да.
  • maksam07, парсеры, какие-то локальные манипуляции с файлами, обработка данных в базе, да много еще чего, проще запускать в консоли.
    Самая типичная задача это cron, ну и конечно скрипты для деплоя...
    Функционал PHP не ограничивается просто выводом в браузер, я ради интереса написал нечто похожее на нейросеть с возможностью обучения, и это работает как в консоли, так и с выводом в браузер...
  • Сергей delphinpro,
    Спасибо за подсказку.
    Долго мне пришлось повозиться, но уже что-то получилось!
    <?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 мб.

    Нашел такой вариант чтения файла построчно. Как бы для моего случая.

    &lt;?php $file = fopen('mylink.txt', 'r'); while (!feof($file)) {     echo fgets($file);     echo '&lt;br&gt;'; } fclose($file); ?&gt;

    &lt;?php $file = fopen('mylink.txt', 'r'); while (!feof($file)) { echo fgets($file); echo '&lt;br&gt;'; } fclose($file); ?&gt;

    Теперь осталось только соединить эти кода. Для меня это пока непонятно.

  • Скорее все это примитивно, но все же состряпал вот такой скрипт, и он работает!
    &lt;?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}&amp;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); ?&gt;

    &lt;?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}&amp;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); ?&gt;

    Единственное прошу помочь зациклить процесс. Чтобы все ссылки из файла mylink.txt были обработаны.

  • Вопрос решен!
    Всем спасибо за помощь, особенно Сергей delphinpro

    &lt;?php function handle_url($url) {     $file = 'result.txt';     $long_url = urlencode($url);     $api_token = '0123456789';     $api_url = "https://mysite.com/api?api={$api_token}&amp;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); } ?&gt;

    &lt;?php function handle_url($url) { $file = 'result.txt'; $long_url = urlencode($url); $api_token = '0123456789'; $api_url = "https://mysite.com/api?api={$api_token}&amp;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); } ?&gt;

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Анна SEO Ответ

    Для зацикливания скрипта в PHP можно использовать различные конструкции, такие как циклы while, do-while, for или foreach. В зависимости от конкретной задачи можно выбрать наиболее подходящий тип цикла.

    Пример зацикливания скрипта с помощью цикла while:

    $i = 0;
    while($i &lt; 10) {
        // ваш код, который нужно выполнить в цикле
        echo &quot;Итерация номер: &quot; . $i . &quot;<br>";
        $i++;
    }

    $i = 0; while($i &lt; 10) { // ваш код, который нужно выполнить в цикле echo &quot;Итерация номер: &quot; . $i . &quot;<br>"; $i++; }

    Пример зацикливания скрипта с помощью цикла for:

    for($i = 0; $i &lt; 10; $i++) {
        // ваш код, который нужно выполнить в цикле
        echo &quot;Итерация номер: &quot; . $i . &quot;<br>";
    }

    for($i = 0; $i &lt; 10; $i++) { // ваш код, который нужно выполнить в цикле echo &quot;Итерация номер: &quot; . $i . &quot;<br>"; }

    Если вам нужно выполнить какой-то код хотя бы один раз перед проверкой условия, то можно воспользоваться циклом do-while:

    $i = 0;
    do {
        // ваш код, который нужно выполнить в цикле
        echo "Итерация номер: " . $i . "<br>";
        $i++;
    } while ($i &lt; 10);

    $i = 0; do { // ваш код, который нужно выполнить в цикле echo "Итерация номер: " . $i . "<br>"; $i++; } while ($i &lt; 10);

    Также можно использовать цикл foreach для перебора элементов массива или объекта:

    $colors = array("red", "green", "blue");
    foreach($colors as $color) {
        // ваш код, который нужно выполнить в цикле
        echo $color . "<br>";
    }

    $colors = array("red", "green", "blue"); foreach($colors as $color) { // ваш код, который нужно выполнить в цикле echo $color . "<br>"; }

    Выбор конкретного типа цикла зависит от задачи, которую вы пытаетесь решить. Например, если вам нужно выполнить цикл определенное количество раз, то лучше использовать цикл for. Если условие выполнения цикла неизвестно заранее, то цикл while будет более уместным выбором.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно