Добавить php в консоль

PHP и консоль

Работа с PHP в консоли. Создание встроенного "веб-сервера". Передача аргументов скрипту.

Всем привет! Сегодня я решил рассказать про работу с PHP в консоли. Данное применение PHP встречается редко, но, иногда, и оно может пригодится. В любом случае лишним умение работать в консоли не будет.

Hello World!

Начнем с простого: Запустим php скрипт, который будет выводить нам «Hello World!». Рассмотрим варианты, которые нам доступны:

Интерактивная консоль

Для начала посмотрим на интерактивную консоль. Данный метод не очень удобный, но без него никуда. Интерактивная консоль позволяет выполнять PHP-код сразу после его ввода в консоль. Вызывается он с помощью команды

Для работы интерактивной консоли необходимо скомпилировать PHP с опцией

Запуск кода в консоли

В этой команде мы говорим, что нам нужен PHP. В качестве команды для него мы передаем параметр -r, который говорит интерпретатору, что нам необходимо запустить код, который находится после него. Чтобы не было каких-либо проблема, код мы записываем в кавычках. Данным способ так же устанавливается и composer.

Запуск кода из файла

Самый популярный из данных методов. Его суть заключается в запуске текстового файла, в котором содержится PHP код. Создадим для начала файл hello.php в котором запишем следующий код:

Читайте также:  Python model object filter

Теперь откроем директорию с данным файлом в консоли и запустим его:

Запуск встроенного веб-сервера

Все эти методы позволят запустить код в консоли, но что же нам сделать, чтобы увидеть результат в браузере? Для этого можно воспользоваться, например, встроенным веб-сервером(рассматривать Apache, Nginx и т.д. в данной статье нет смысла). Запустим в папке с предыдущим нашим скриптом(hello.php) следующую команду:

Тут мы указываем нашему PHP, что ему необходимо прослушивать 8000 порт localhost’а. Давайте зайдем на localhost:8000/hello.php и посмотрим, что напишет наш браузер. Если всё нормально и вам вывелось

То всё хорошо и можно заглянуть в консоль. Там нам описывают куда шли запросы, полезно же ? Чтобы выключить данный веб-сервер необходимо нажать сочетание клавиш ctrl+c.

Аргументы

Чуть не забыл про аргументы. В случае запуска скрипта из консоли без веб-сервера, мы не можем передавать ему GET и POST запросы. На этот случай в PHP передаются такие переменные, как $argv. Данная переменная является массивом и содержит в себе имя запущенного скрипта и всё, что содержится далее. Давайте проверим, что же там находится. Для начала создадим скрипт arg.php с таким содержимым:

Тут мы просто проходимся по массиву $argv, передавая значения его ключей в переменную $a, а дальше выводим это значение. Запустим наш скрипт:

Если всё хорошо, то нам выведится название файла. Теперь добавим некоторые аргументы, например test и arguments:

php -f arg.php test arguments

Теперь наш скрипт должен вывести название файла, test и arguments. Вроде просто. Кстати, $argv[0] всегда содержит название файла, не забывайте об этом ✌

0 комментариев

Новый комментарий

  • О проекте
  • Отправить публикацию
  • Реклама на сайте
  • Условия пользования

Источник

Как запустить PHP скрипт в командной строке (без веб-сервера)

Как запустить PHP скрипт в командной строке Windows

Для запуска PHP в командной строке необязательно устанавливать веб-сервер, достаточно скачать и распаковать архив с PHP интерпретатором. О том, где скачать PHP с официального сайта и как разобраться с версиями, смотрите эту статью.

Если вы часто будете запускать PHP скрипты из командной строки Windows, то настоятельно рекомендуется Добавить путь до PHP в переменную окружения PATH в Windows. Благодаря этому не придётся каждый раз указывать полный путь до файла php.exe.

Теперь, когда PHP установлен и путь до php.exe добавлен в переменную окружения Windows, открываем командную строку, для этого нажмите сочетание клавиш Win+x и выберите Windows PowerShell.

Для проверки, что нормально установилось, посмотрим справку по PHP:

На самом деле, мы запускаем файл php.exe, но расширение можно отбросить. То есть предыдущая запись эквивалентна

Как запустить .php скрипт в командной строке Windows и Linux

Для запуска .php файла в консоли Windows используется следующая команда:

Опцию -f можно отбросить, то есть предыдущая и следующая команды равнозначны:

Я создал тестовый файл, который расположен по пути C:\Users\Alex\Documents\PHP\test.php тогда я могу запустить его в PHP так:

php -f C:\Users\Alex\Documents\PHP\test.php
php C:\Users\Alex\Documents\PHP\test.php

Как передать аргументы PHP скрипту в командной строке

Для передачи скрипту аргументов, перечислите их после имени файла, разделяя пробелом. Если сами аргументы содержат пробелы или другие символы, которые имеют особое значение для оболочки командной строки, то поместите эти аргументы и одинарные или двойные кавычки.

php путь\до\файла.php 'аргумент1' 'аргумент2' 'аргумент3' 'аргумент_n'

Пример запуска PHP скрипта с тремя аргументами:

php C:\Users\Alex\Documents\PHP\test.php 'Alex' 'hackware.ru' 'Admin'

Как в PHP скрипте обратиться к аргументам

Переданные аргументы содержаться в массиве $argv. Причём, порядковый номер аргумента соответствует номеру в массиве. То есть первый аргумент будет помещён в $argv[1], второй в $argv[2] и так далее.

Самый первый элемент массива $argv[0] содержит полный путь до запускаемого скрипта.

Запустим его и передадим в скрипт три аргумента:

php C:\Users\Alex\Documents\PHP\test.php 'Alex' 'hackware.ru' 'Admin'

Как в PHP получить данные от пользователя в консоли

Благодаря передаваемым аргументам, скрипт может выполнять действия не только с прописанными в нём данными, но и с другими значениями, указанными при запуске скрипта.

Кстати, при работе в окружении веб-сервера, то есть когда PHP скрипт выполняет задачи для веб-сайта, возможность передать ему аргументы реализована с помощью HTTP методов GET и POST. Эти аргументы передаются перед запуском скрипта, и уже после запуска PHP скрипта новые данные отправить нельзя — нужно ждать завершения работы программы, и при необходимости запустить её ещё раз с новыми данными.

Во время работы скрипта может потребоваться ввод новых данных, в консоли это достигается с помощью строки запроса, в которую пользователь может ввести значение и нажать Enter для передачи его скрипту. В контексте веб-сайта такой возможности — передать данные уже во время выполнения скрипта — нет. То есть консольный запуск PHP скриптов с аргументами не только проще (не нужно возиться с HTML формой), но и даже более гибкий.

В PHP для запроса пользователю используется функция readline.

Эта функция одинаково работает и на Windows и на Linux. Причём на Linux она имеет интерактивные возможности Bash, например, сохраняет историю ввода, к которой можно вернуться с помощью стрелок. На Windows эта возможность появилась начиная с PHP 7.1.

Если сильно надо, можно настроить автозавершение вводимых данных. Все функции GNU Readline рассмотрены здесь. Я же коснусь только readline, которая считывает введённую пользователем строку. С этой функцией можно указать один опциональный аргумент — строку, которая будет показана пользователю в приглашении.

Пример консольного PHP скрипта, которые запрашивает у пользователя данные в приглашении командной строки:

Выполнение команд PHP в интерактивном режиме

Если вам это нужно, то можно работать с интерпретатором PHP в интерактивном режиме, вводя код построчно. При этом код выполняется после нажатия кнопки Enter, но значения переменных сохраняются в рамках одной сессии. То есть вы можете присвоить значение какой-либо переменной, а затем использовать его в других строках.

Для запуска интерактивного шелла:

Запуск отдельных команд PHP

Для выполнения отдельных команд используйте опцию -r:

Источник

Добавить php в консоль

Although there exist classes for outputting PHP to browser console such as Google’s PHP Console and certain others, I was looking for a way to output PHP to browser console without including those classes in my PHP files or installing any browser plugin to do the same. Currently, I am working on Facebook application development in which you have to commit/upload the code to check certain output out of PHP unlike offline development where you check the code output before committing it up. This makes Facebook application development a longer process for a developer but you got to live with it because you don’t have a choice.

Anyways, to speed up the code output checking process a little and rather using debug_backtrace , print_r , print , echo , var_dump , etc which you need to remove/comment again, I created a function to get output of PHP on the browser console. One could use error_log function but even that makes you go to your log file and then see the output. Of course, browser needs to support/have the console so that code result is output there. Because IE less than 8 doesn’t have console, this won’t work in IE less than 8, though result won’t be affected in it. Notice that you can see console in IE=>8 by pressing F12 key and then going to Script tab where you need to make sure Console tab is selected on the right side.

 /** * Logs messages/variables/data to browser console from within php * * @param $name: message to be shown for optional data/vars * @param $data: variable (scalar/mixed) arrays/objects, etc to be logged * @param $jsEval: whether to apply JS eval() to arrays/objects * * @return none * @author Sarfraz */ function logConsole($name, $data = NULL, $jsEval = FALSE) < if (! $name) return false; $isevaled = false; $type = ($data || gettype($data)) ? 'Type: ' . gettype($data) : ''; if ($jsEval && (is_array($data) || is_object($data))) < $data = 'eval(' . preg_replace('#[\s\r\n\t\0\x0B]+#', '', json_encode($data)) . ')'; $isevaled = true; >else < $data = json_encode($data); ># sanitalize $data = $data ? $data : ''; $search_array = array("#'#", '#""#', "#''#", "#\n#", "#\r\n#"); $replace_array = array('"', '', '', '\\n', '\\n'); $data = preg_replace($search_array, $replace_array, $data); $data = ltrim(rtrim($data, '"'), '"'); $data = $isevaled ? $data : ($data[0] === "'") ? $data : "'" . $data . "'"; $js = // fallback - to deal with IE (or browsers that don't have console) if (! window.console) console = <>; console.log = console.log || function(name, data)<>; // end of fallback console.log('$name'); console.log('------------------------------------------'); console.log('$type'); console.log($data); console.log('\\n'); JSCODE; echo $js; > # end logConsole

Here is an example of how to use it:

$name = 'sarfraz'; $fruits = array("banana", "apple", "strawberry", "pineaple"); $user = new stdClass; $user->name = "Sarfraz"; $user->desig = "Sr. Software Engineer"; $user->lang = "PHP"; logConsole('$name var', $name, true); logConsole('An array of fruits', $fruits, true); logConsole('$user object', $user, true);

Although this does not prevent committing code first to see the code output if you are on facebook application development but it defintely does save some time. I have been using this function successfully so far, please let me know your ideas if any on how to improve this piece of code further.

Источник

Оцените статью