2017-01-21 1 views
2

Мой скрипт, который запускается из командной строки, выполняет множество вызовов DB и API внутри цикла, но для проверки я должен изменить условия и поместить die() и запускать сценарий снова и снова.Точки останова с PHP

Есть ли способ продвинуть итерацию только при нажатии Return, завершить выполнение скрипта при нажатии Esc, иначе просто подождите, пока не произойдет одно из перечисленных событий ввода?

$arr = range(0, 10000); 

foreach ($arr as $n) { 
    // if ENTER 
    echo $n; 
    // elseif ESC 
    die() 
    // else 
    // wait for ENTER or ESC 
} 
+0

Вы можете поместить error_log() в цикл или попробовать исключения catch и log, чтобы увидеть, что происходит. Если это то, чего вы пытаетесь добиться, приостановив код, если произойдет событие. Другим способом может быть использование среды IDE, такой как XDebug, где вы могли бы разместить точку останова в своем коде и пройти через нее по строкам. – mrjamesmyers

+0

@mrjamesmyers Нет, не ошибки, просто исполнение. Поэтому каждую итерацию мне нужно проверить, все ли в порядке, нажмите ENTER, перейдите к следующему ... и так далее. – 3zzy

+0

Вы можете добиться этого с помощью XDebug, который может быть настроен для работы с NetBeans, Notepad ++ и многими другими IDE/редакторами (или PHPStorm или Zend Studio, но им придется заплатить за них). Другие мудрые могли бы сделать цикл foreach в JavaScript, а затем прослушать Enter Key и индекс инкремента, а затем использовать Ajax для публикации на PHP – mrjamesmyers

ответ

0

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

<?php 

$arr = range(0, 10000); 
$handle = fopen ("php://stdin","r"); 

foreach ($arr as $n) { 
    $line = fgets($handle); 

    // if user types "exit" and ENTER 
    if (trim($line) == "exit") { 
     die(); 
    } 

    echo $n; 

    // Do DB and API calls here 

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