2011-09-12 1 views
1

Я не знаю, можно ли это сделать с помощью php, но это было бы здорово для меня, если бы это было так, и php довольно мощный, поэтому я думаю, что это возможно, и я просто не могу понять, как это сделать.Возможно ли, чтобы php-скрипт остановился в какой-то момент и возобновил выполнение до этого?

Я знаю, что php-файл выполняется сверху донизу, но я хотел бы знать, есть ли способ остановить выполнение в какой-то момент, чтобы затем возобновить его позже или есть способ достичь определенную его часть, а затем возобновить часть, которая находится перед ней или что-то в этом роде?

Я знаю, как это сделать, если я просто поместил каждый отдельный блок кода в отдельный файл php, таким образом он остановится, потому что он достигнет конца файла, и если что-то случится, он возобновится из другого файла, поэтому он делает почти то же самое, но я хотел бы сделать php-скрипт, который будет вести себя так, но содержащийся в 1 php-файле.

Мне не нужны примеры кода. Мне просто нужен кивок в правильном направлении, например, некоторые имена функций или что-то, что может быть полезно для этой цели.

+0

Не могли бы вы привести больше примеров * почему * вы хотите использовать эту функциональность? Что вы пытаетесь с этим сделать? – Amber

+0

Я пытаюсь найти хороший чистый способ выполнения скрипта, который выполняет определенные блоки кода на основе последовательности пользовательских входных данных. это, вероятно, не помогает, и то, о чем я прошу, может быть использовано для буквально миллионов разных вещей. и, как я сказал, до того, как у меня уже есть тонкая функциональность, но в беспорядочном и довольно сложном способе, который включает в себя множество файлов и огромную головную боль для меня. – wxiiir

+0

Остановка и запуск контролируются сигналами в Unix. Я не думаю, что вы можете контролировать, где в вашем коде будет указатель выполнения. Отладчики предлагают инвазивный контроль, через точки останова и т. Д .; но мне нелегко видеть, как вождение вашего кода от drbugger сделало бы что-нибудь более простым. Вероятно, вы не очень хорошо объяснили, чего хотите достичь. – tripleee

ответ

3

Если вы пытаетесь сделать что-то на основе пользовательского ввода, вы должны, вероятно, либо:

  1. Структура вашей программы как веб-приложение, таким образом, что каждый бит пользовательского ввода порождает новый запрос на странице с блоком кода, который должен выполнить ввод, или ...
  2. Используйте другой язык, кроме PHP.

Предполагая, что вы делаете # 1, это не все, что трудно иметь определенный параметр GET, который определяет, что такое «шаг» вы на во взаимодействии - например, у вас есть последовательность "A <user input> B or C <user input> D or E". Вы могли бы иметь схему URL, который выглядит следующим образом:

/app/code.php - this runs the code block A 
/app/code.php?step=B or /app/code.php?step=C - this runs either code block B or C 
/app/code.php?step=D or /app/code.php?step=E - this runs either code block D or E 

где ссылки/Javascript/что на обслуживаемом страницах позволяют выбирать, какие страницы нагрузки следующий. Ваш файл PHP будет выглядеть примерно так:

if(!isset($_GET['step'])) { 
    // code block A 
} elseif($_GET['step'] == 'B') { 
    // code block B 
} elseif($_GET['step'] == 'C') { 
    // code block C 
} elseif($_GET['step'] == 'D') { 
    // code block C 
} elseif($_GET['step'] == 'E') { 
    // code block C 
} else { 
    // error, invalid step specified 
} 

Вы также можете просто разбить этапы на разные PHP-файлы. Какой подход лучше всего, вероятно, зависит от того, насколько функциональность распределяется между различными параметрами, и насколько отличается - если лоты разделены, один файл может быть проще; если большинство отличается, отдельные файлы, вероятно, проще.

+0

Я думал об этом методе раньше и исключил его из-за того, что он был не идеальным, и на php обычно есть функция для всего, но этот ответ заставлял меня переосмыслить мои варианты, потому что я ищу часы для чего-то полезного, и на самом деле это единственный способ Я нашел, что было лучше.спасибо за это – wxiiir

+0

Не беспокойтесь о том, что «идеально», беспокоиться о том, что «эффективно». Выполняет ли это задачу таким образом, чтобы она была пригодна для обслуживания? Тогда все в порядке. – Amber

Смежные вопросы