Вопрос или проблема
У меня есть .php скрипт, который я использую для создания списка моих продуктов. Я на общем хостинге, поэтому не могу делать много запросов, иначе у меня появляется пустая страница.
Вот как я сейчас использую свой скрипт:
script.php?start=0&end=500&indexOfFile=0 ->> создает файл product0.txt с первыми 500 продуктами
script.php?start=501&end=1000&indexOfFile=1 ->> файл product1.txt с еще 500 продуктами
script.php?start=1001&end=1500&indexOfFile=2 ->> файл product2.txt с последними 500 продуктами
Как я могу изменить скрипт, чтобы он автоматически создавал все эти файлы, чтобы мне не приходилось каждый раз вручную изменять ссылку?
Я хотел бы нажать кнопку, которая сделает следующее:
создает файл product0.txt
с первыми 500 продуктами
ждет 5 секунд
создает файл product1.txt
с еще 500 продуктами
ждет 5 секунд
создает файл product2.txt
с последними 500 продуктами
используйте:
sleep(ЧИСЛО_СЕКУНД);
перед началом ваших действий используйте
sleep(5);
или:
usleep(ЧИСЛО_МИКРОСЕКУНД);
В январе 2018 года единственное решение, которое работало для меня:
<?php
if (ob_get_level() == 0) ob_start();
for ($i = 0; $i<10; $i++){
echo "<br> Строка для отображения.";
echo str_pad('',4096)."\n";
ob_flush();
flush();
sleep(2);
}
echo "Готово.";
ob_end_flush();
?>
я использую это
$i = 1;
$last_time = $_SERVER['REQUEST_TIME'];
while($i > 0){
$total = $_SERVER['REQUEST_TIME'] - $last_time;
if($total >= 2){
// Код здесь
$i = -1;
}
}
вы можете использовать
function WaitForSec($sec){
$i = 1;
$last_time = $_SERVER['REQUEST_TIME'];
while($i > 0){
$total = $_SERVER['REQUEST_TIME'] - $last_time;
if($total >= 2){
return 1;
$i = -1;
}
}
}
и выполнять код =>
WaitForSec(ваше_время);
Пример :
WaitForSec(5);
ИЛИ
вы можете использовать sleep
Пример :
sleep(5);
Я на общем хостинге, поэтому не могу делать много запросов, иначе у меня появляется пустая страница.
Это звучит очень странно. Я нашел самый дешевый пакет PHP хостинга для своего последнего проекта – и он так себя не ведет. Я бы не платил за услугу, которая так себя ведет. На самом деле, я не понимаю, как можно настроить сервер для воспроизведения такого поведения.
Независимо от того, почему он так себя ведет, добавление задержки в середину скрипта не может решить проблему.
Поскольку, предположительно, вы контролируете свой каталог продуктов, новые продукты должны появляться относительно редко (или вы пытаетесь получить отчеты о запасах?). Если вы контролируете, когда вы изменяете данные, зачем запускать скрипты автоматически? Или вы имеете в виду, что вы уже имеете эти URL-адреса и получаете ожидаемые файлы, когда выполняете их по одному?
На https://www.php.net/manual/es/function.usleep.php
<?php
// Ждать 2 секунды
usleep(2000000);
// если вам нужно 5 секунд
usleep(5000000);
?>
.
Ответ или решение
Использование PHP для автоматизации задач может значительно упростить рабочий процесс, особенно когда речь идет о создании файлов с данными продуктов. Если у вас есть скрипт script.php
, который уже успешно генерирует .txt
файлы с данными ваших товаров, и вы хотите автоматизировать этот процесс с задержками между генерациями, вы на правильном пути.
Проблема
Как указано в вашем вопросе, вы находитесь на совместном хостинге и сталкиваетесь с проблемами при больших запросах к серверу, что может привести к отображению пустой страницы. Это может произойти из-за ограничения на время выполнения скрипта или количества запросов, обрабатываемых за один раз.
Для решения вашей задачи вам нужно будет использовать функции sleep()
или usleep()
, чтобы добавить задержку между вызовами вашего скрипта.
Решение
Ниже представлена примерная реализация вашего скрипта с учетом необходимых задержек:
<?php
function createProductsFiles() {
$files = [
['start' => 0, 'end' => 500, 'index' => 0],
['start' => 501, 'end' => 1000, 'index' => 1],
['start' => 1001, 'end' => 1500, 'index' => 2]
];
foreach ($files as $file) {
$start = $file['start'];
$end = $file['end'];
$index = $file['index'];
// Формируем URL для вызова скрипта
$url = "script.php?start=$start&end=$end&indexOfFile=$index";
// Выполняем запрос к вашему php скрипту
file_get_contents($url); // или curl для большей гибкости
// Пауза в 5 секунд
sleep(5);
}
echo "Все файлы успешно созданы.";
}
// Запуск функции
createProductsFiles();
?>
Объяснение кода
-
Массив файлов: В этом коде мы создаем массив, содержащий параметры для каждого файла, который мы хотим сгенерировать. Каждый элемент массива содержит начальный и конечный индексы, а также индекс файла.
-
Цикл по массиву: Мы перебираем массив с файлами и формируем URL с параметрами для вашего скрипта.
-
Отправка запросов: Мы используем
file_get_contents()
, чтобы отправить запрос вашему скрипту, который создаст нужные файлы. Если вам нужно больше контроля над HTTP-запросами, рассмотрите использование cURL. -
Задержка: После каждого запроса мы ожидаем 5 секунд, используя функцию
sleep(5)
. -
Сообщение об окончании: После завершения всех операций выводится сообщение о том, что все файлы были успешно созданы.
Вывод
Данное решение автоматизирует процесс создания ваших файлов, минимизируя необходимость вручную изменять URL и запускайте их один за другим. Однако, важно учитывать ограничения вашего хостинга. Если выполнение скрипта все еще приводит к ошибкам, возможно, вам стоит рассмотреть другие варианты, такие как разделение операций на более мелкие части или переход на более мощный тарифный план хостинга, который бы не накладывал подобных ограничений.
Процесс автоматизации должен существенно упростить вашу работу и уменьшить количество ошибок, связанных с ручными операциями.