Основні відмінності від інших реалізацій SAPI
Основні відмінності CLI SAPI від інших реалізацій SAPI:
-
На відміну від CGI SAPI, заголовки не пишуться до потоку виведення.
Незважаючи на те, що в CGI SAPI є спосіб придушення HTTP-заголовків, CLI SAPI немає можливості їх включити.
CLI за замовчуванням запускається в тихому режимі, проте ключі**-q** і --no-headerзбережені для зворотної сумісності, що дозволяє використовувати старі CGI-скрипти.
Поточна директорія не змінюється робочу директорію скрипта. (Ключі**-C** і --no-chdirзбережені для зворотної сумісності)
Повідомлення про помилки видаються в текстовому режимі (без HTML-форматування).
-
Деякі налаштування php.ini перевизначаються CLI SAPI, оскільки вони не мають сенсу під час роботи в командному рядку:
Перевизначені директиви php.ini
Директива Значение по умолчанию в CLI SAPI Комментарий html_errors false
По умолчанию** false
**, т.к. буває досить складно читати в консолі повідомлення про помилку, коли вони наповнені безглуздими HTML-тегами.implicit_flush true
Зазвичай в консолі бажано відображати висновок, наприклад, printecho та інших, відразу ж минаючи буфер. Тим не менш, як і раніше можна використовувати буферизацію висновку для відкладеного висновку чи маніпуляцій із ним. max_execution_time 0 (без обмежень) PHP, що виконується в консолі, зазвичай використовується для більш широкого діапазону завдань, ніж звичайні веб-скрипти. Оскільки вони можуть виконуватися дуже довго, то максимальний час виконання необмежено. register_argc_argv true
Встановлення цієї опції значення true
означає, що скрипти, що запускаються через CLI SAPI, завжди мають доступ до argc (кількість аргументів, переданих додатком) та argv (Масив поточних аргументів).При використанні CLI SAPI змінні$argc і $argvавтоматично заповнюються відповідними значеннями. Ці значення можна також знайти в масиві$_SERVER, наприклад:$_SERVER['argv']
output_buffering
false
Незважаючи на те, що ця опція php.ini жорстко встановлена в**
false
**, функції буферизації висновкувсе ще доступні.max_input_time
false
PHP CLI не підтримує GET, POST або завантаження файлів.
Зауваження :
Ці директиви не можуть бути ініціалізовані іншими значеннями конфігураційного файлу php.ini або будь-якого іншого (у разі, якщо він вказаний). Це обмеження пов'язане з тим, що значення використовуються після обробки конфігураційних файлів. Тим не менш, ці значення можуть бути змінені під час роботи скрипта (хоча це не має особливого сенсу для всіх них, наприкладregister_argc_argv
Зауваження :
Рекомендується встановити опціюignore_user_abortдля скриптів, які використовуються з командного рядка. За подробицями звертайтесь до функціїignore_user_abort()
-
Для полегшення роботи в оточенні оболонки було визначено кілька констант дляпотоків введення/виводу
-
CLI SAPIнезмінює поточну директорію на директорію скрипта.
Приклад #1 Приклад, що демонструє різницю із CGI SAPI:
Loading...Якщо використовується CGI-версія, результат роботи буде наступним:
$ pwd /tmp $ php -q another_directory/test.php /tmp/another_directory
Це наочно демонструє, що PHP змінює поточну директорію на директорію скрипта.
Використання CLI SAPI дає інший результат:
$ pwd /tmp $ php -f another_directory/test.php /tmp
Це забезпечує більшу гнучкість при написанні консольних скриптів на PHP.
Зауваження :
CGI SAPI дозволяє отримати аналогічну CLI SAPI поведінку у разі використання ключа**-C**під час запуску з командного рядка.