Я должен создать сценарий на языке PHP, который выполняет перестановку чисел. Но PHP имеет предельный набор времени выполнения к 60 секундам. Как я могу запустить скрипт так, чтобы, если необходимо выполнить больше чем 60 sesunde, не прерванный сервером. Я знаю, что могу изменить максимальный предел времени выполнения в php, но я хочу услышать другую версию, которая не требует для знания заранее времени выполнения сценария.
Друг предложил, чтобы я регистрировался и часто вышел из системы сервера, но я понятия не имею, как сделать это.
Любой совет приветствуется. Пример кода был бы полезен.
Спасибо.
Сначала я должен ввести номер, позволяет, говорят 25. После этого сценарий является запуском, и он должен сделать следующее: для каждого числа <=, чем 25 это создаст файл с числами, сгенерированными на текущем этапе; для следующего числа это откроется, previuos создал файл и заложит другую основу файла на строках открытого файла и так далее. Поскольку это взятие к длинному, я должен избежать сценария, прерываемого сервером.
@emanuel:
Я думаю, когда твой друг сказал вам: «Друг предложил мне войти в систему и часто выходить из сервера, но я понятия не имею, как это сделать»., Он / она, должно быть, должен означать «Разделите свой сценарий на вычисление в х куски работы и запустите его отдельно»
, например, с этим скриптом, вы можете выполнить его 150 раз, чтобы достичь 150! (Факторизация) и показать результат:
// Название скрипта: Calc.php
<?php
session_start();
if(!isset($_SESSION['times'])){
$_SESSION['times'] = 1;
$_SESSION['result'] = 0;
}elseif($_SESSION['times'] < 150){
$_SESSION['times']++;
$_SESSION['result'] = $_SESSION['result'] * $_SESSION['times'];
header('Location: calc.php');
}elseif($_SESSION['times'] == 150){
echo "The Result is: " . $_SESSION['result'];
die();
}
?>
BTW (@Davmuz), вы можете использовать функцию set_time_limit () на серверах Apache, это не допустимая функция на серверах Microsoft IIS.
Вы можете попытаться поставить звонки, которые вы хотите сделать в очереди, которые вы сериализуете в файл (или кэш памяти?) Когда выполняется операция. Затем вы можете использовать демон CRON, чтобы выполнить эту очередь каждые шестьдесят секунд, поэтому он продолжает делать работу и заканчивает задачу.
Недостатки этого подхода - это проблемы с добавлением в очередь, с блокировкой файлов и такими, и если вам нужны результаты немедленно, это может оказаться неприятностями. Если вы добавляете вещи в БД, это может потренироваться. Кроме того, это не очень эффективно.
Используйте set_time_limit (0), но вы должны отключить Safe_Mode: http://php.net/manual/en/function.set-time-limit.php Предлагаю использовать фиксированное время (SET_TIME_LIMIT (300)), потому что если в скрипте есть проблема (бесконечные петли или утечки памяти), это не может быть источником проблем.
Веб-сервер, например, Apache, также имеет максимальный ограничение по времени 300 секунд, поэтому вы должны изменить его. Если вы хотите сделать приложение COMET, может быть лучше выбрать другой веб-сервер, чем Apache, который может иметь длительные запросы времена.
Если вам нужно длительное время выполнения для тяжелого алгоритма, вы также можете реализовать параллельную обработку: http://www.google.com/#q=phpphertparallellel5processing Или хранить входные данные и компьютер с другим внешним сценарием с помощью крона или что-то еще.