Как запустить файл php linux

Озимый Блог

всего по чуть-чуть

PHP через консоль в Linux / Ubuntu

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

после чего можно просто прописывать путь к скрипту

и получать в консоли результат его выполнения. Так скрипт

выведет вот такое

такое, конечно же, не очень удобно читать, поэтому мы приведем его к такому виду

символы переноса строки делают свое дело, и мы получаем вполне читабельный вариант

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

которые затем можно получить, разобрав массив $argv

что выведет нам вот такой

т.е., если нам нужно получить чисто параметры, то разбор массива начинаем не с нуля, как обычно, а с 1, т.к. в нуле мы получим имя скрипта.

Как по мне, для полноценной отладки скриптов такое чудо не годится, но для каких то други задач, ну и просто мелочи какие то тестировать — вполне ничего.

Источник

Как запустить 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 скрипту в командной строке

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

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

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

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

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

Содержимое файла test.php:

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

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

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

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

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

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

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

Читайте также:  Как загрузить windows live

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

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

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

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

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

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

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

Источник

Интерактивное консольное приложение на PHP

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

Как запустить php-скрипт из командной строки?

Независимо от используемой операционной системы, для запуска скрипта необходимо набрать в консоли следующую команду:

Ваша ОС может выдать сообщение о том, что команда php ей неизвестна. В таком случае, и если вы уверены, что сам интерпретатор PHP установлен корректно, поможет указание полного пути к интерпретатору во время запуска скрипта.

Для UNIX-подобных систем:

Обратите внимание, что путь к интерпретатору PHP на вашей системе может быть другим, поэтому это тоже надо учесть. Например, для пользователей популярного пакета WampServer путь может быть таким:

Ну и наконец, чтобы не вводить полный путь каждый раз, следует добавить путь к интерпретатору в переменную окружения PATH вашей операционной системы.

Пишем простой скрипт для проверки кода ответа сервера

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

Сразу после запуска скрипт выбирает все файлы с расширением *.txt из папки files . Затем выводит данный список пользователю в формате номер => имя и ждет от пользователя ввода номера интересующего его файла.

Получение всех файлов по маске делается просто, для этого воспользуемся стандартной функцией glob , а вот с чтением данных из консоли всё немного интересней. Дело в том, что после запуска скрипта из командной строки в нем открываются три стандартных потока: для вывода (STDOUT), ввода (STDIN) и ошибок (STDERR). Указатели на эти потоки доступны для скрипта в виде одноименных констант и работать с ними можно так же как, например, с обычными файлами. Таким образом, чтобы прочитать данные из консоли достаточно просто прочитать строку из потока ввода: fgets(STDIN) .

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

С помощью цикла while начинаем перебирать все строки в файле. Строки должны быть корректными url-адресами иначе мы не сможем определить правильный код ответа сервера. Заголовки для каждого адреса получаем с помощью стандартной функции get_headers , а код ответа находится обычно в первой строке заголовка.

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

Результатом работы такого приложения может быть, например, такой вывод:

Выводы

Вот и всё, простое и интерактивное консольное приложение на PHP готово. Мне не хотелось писать какую-нибудь совершенно бесполезную программу, поэтому этот скрипт подходит не только для изучения, но и для использования. Например, если сохранить в текстовый файл карту сайта, то скрипт поможет определить возможные ошибки с ссылками, а если его немного доработать, то даже укажет с какими именно :).

Источник

Как запустить файл php linux

Начиная с версии 4.3, РНР поддерживает новый SAPI -тип (Server Application Programming Interface) под названием CLI , что означает Command Line Interface . Как следует из названия, главной задачей этого SAPI -типа является разработка оболочки/shell (или рабочего стола) приложений с помощью РНР. Имеются весьма небольшие отличия CLI SAPI от других SAPI , которые будут далее рассмотрены в этой главе.

CLI SAPI был выпущен в первый раз с PHP 4.2.0 , но тогда это был эксперимент, и нужно было явно включать его командой —enable-cli при запуске ./configure . Начиная с PHP 4.3.0 , CLI SAPI больше не является экспериментальным и всегда встроен и устанавливается как двоичный исполняемый файл php (называется php.exe в Windows).

Существенные отличия CLI SAPI от других SAPI :


В отличие от CGI SAPI , никакие шапки/headers не записываются в вывод.

Хотя в CGI SAPI имеется способ подавления HTTP-шапок, эквивалентного переключателя для их включения в CLI SAPI нет.

Имеются определённые директивы php.ini , которые переопределены в CLI SAPI , поскольку они не имеют смысла в среде окружения оболочки:

Читайте также:  Minecraft windows mobile free

Таблица 24-1. Переопределение php.ini -директив

Директива CLI SAPI- значение по умолчанию Комментарий
html_errors FALSE Бывает довольно сложно прочитать в оболочке сообщение об ошибке, наполненное всеми этими бессмысленными HTML -тэгами, поэтому по умолчанию значение этой директивы FALSE .
implicit_flush TRUE Желательно, чтобы любой вывод из print() , echo() и компании немедленно записывался в вывод, а не отправлялся в какой-нибудь буфер. Вы всё ещё можете пользоваться буферизацией вывода, если хотите поработать со стандартным выводом.
max_execution_time 0 (unlimited) Из-за бесконечно больших возможностей использования PHP в среде окружения оболочки, максимальное время выполнения не ограничено. В то время как приложения, написанные для web, выполняются в течение долей секунды, приложения оболочки пытаются занять для своего выполнения максимальное время.
register_argc_argv TRUE Глобальные переменные PHP $argc (количество аргументов, передаваемых приложению) и $argv (массив текущих аргументов) всегда регистрируются и заполняются соответствующими значениями при использовании CLI SAPI .

Примечание: Эти директивы не могут быть инициализированы другим значением из файла конфигурации php.ini или специального файла (если специфицирован). Это является некоторым ограничением, поскольку эти значения по умолчанию применяются после разбора всех файлов конфигурации. Однако их значение может быть изменено на этапе прогона программы (что не имеет смысла для всех других директив, например, для register_argc_argv).

Легче работать в среде оболочки, когда определены следующие константы:

Таблица 24-2. Специфические CLI-константы

Константа Описание
STDIN Уже открытый поток в stdin . Она хранит открывшего её
STDOUT Уже открытый поток в stdout . Она хранит открывшего её
STDERR Уже открытый поток в stdout . Она хранит открывшего её

Имея всё это, вы не должны, например, самостоятельно открывать поток для stderr , а просто используете константу вместо ресурса потока:

Вам не нужно явно закрывать эти потоки, это делается РНР автоматически.

CLI SAPI не изменяет текущую директорию на директорию исполняемого скрипта!

Пример, показывающий отличие CGI SAPI :

Когда используется CGI -версия, на выходе будет:

Это ясно показывает, что PHP изменяет свою текущую директорию на директорию исполняемого скрипта.

Использование CLI SAPI даёт:

Это даёт большую гибкость при написании утилит командной строки на PHP .

Примечание: CGI SAPI поддерживает поведение CLI SAPI с помощью ключа -C при запуске из командной строки.

Список опций командной строки исполняемого файла PHP может быть получен в любое время путём запуска PHP с ключом -h :

CLI SAPI имеет три разных способа получения PHP -кода, который нужно выполнить:


Сказать PHP выполнить определённый файл.

Оба способа (с/без использования переключателя -f ) выполняют данный файл my_script.php . Вы можете выбрать для выполнения любой файл, названия ваших файлов скриптов PHP не обязаны заканчиваться расширением .php , а могут иметь любое имя или расширение.

Передать PHP код для выполнения непосредственно из командной строки.

Особого внимания требует замена переменных оболочки и использование кавычек.

Примечание: Просмотрите пример внимательно, нет начальных и конечных тэгов! Переключателю -r они просто не нужны. Использование их в данном случае приведёт к ошибке разборщика.

Предоставить PHP -код для выполнения через стандартный ввод ( stdin ).

Это позволяет динамически создавать PHP -код и передавать его экзешнику, как показано в данном (надуманном) примере:

Вы не можете комбинировать эти три способа при выполнении кода.

Как и в любом приложении оболочки, не только сам PHP , но и ваши скрипты PHP также принимают аргументы. Количество передаваемых в скрипт аргументов в РНР не ограничивается (оболочка имеет ограничение на количество передаваемых символов).
Аргументы, передаваемые в ваш скрипт, доступны через глобальный массив $argv . Нулевой индекс всегда содержит имя скрипта (которое является символом — в случае, когда PHP -код приходит со стандартного ввода или с использованием ключа командной строки -r ).
Вторая регистрируемая глобальная переменная это $argc , которая содержит количество элементов в массиве $argv (а не количество аргументов, передаваемых в скрипт).

Если аргументы, которые вы хотите передать в скрипт, не начинаются с символа дефиса (-) , ничего специально наблюдать не надо. Передача в скрипт аргумента, начинающегося с — , создаст проблемы, поскольку PHP думает, что должен сам их обработать. Чтобы предотвратить это, используйте в качестве сепаратора аргументов списка — . После того как аргумент будет разобран PHP , каждый последующий аргумент передаётся в ваш скрипт без изменений/не разобранным.

Однако, вот другой способ использования PHP для скриптинга оболочки. Вы можете написать скрипт, первая строка которого начинается с #!/usr/bin/php , а затем идёт нормальный PHP -код, содержащийся между начальным и конечным тэгами PHP , и соответствующим образом устанавливаются атрибуты выполнения файла. Таким способом он может быть исполнен как нормальный скрипт оболочки или perl:

Приняв, что файл называется test и находится в текущей директории, мы можем выполнить:

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

Таблица 24-3. Опции командной строки

Отображать синтаксис в цвете.

Эта опция использует внутренний механизм разбора файла, производит его расцвеченную HTML -версию и записывает её в стандартный вывод. Заметьте, что генерируется лишь блок [. ] HTML -тэгов без HTML -header.

Примечание: Эта опция не работает вместе с опцией -r .

Отобразить исходный текст без комментариев и пробелов.

Примечание: Эта опция не работает вместе с опцией -r .

Разбирает и выполняет данный файл. Этот переключатель является необязательным и может быть опущен. Достаточно предоставить имя файла для выполнения.

Читайте также:  Google chrome вылетает windows 10

Записывает PHP, PHP SAPI и Zend-версии в стандартный вывод, например: -c

С помощью этой опции можно либо специфицировать директорию для поиска php.ini , либо специальную директорию INI -файла (который не обязательно называется php.ini ), например: -a

Запускает PHP интерактивно.

Эта опция позволяет устанавливать специальное значение для каждой директивы конфигурации, которые допускаются в php.ini . Синтаксис таков:

Примеры: -e

Генерирует расширенную информацию для debugger/profiler.

Загружает Zend-расширение. Если задано только имя файла, PHP пытается загрузить данное расширение из текущего пути по умолчанию к библиотеке в вашей системе (обычно специфицируется как /etc/ld.so.conf в Linux-системах). Передача filename с абсолютным путём не будет использовать системный путь поиска библиотеки. Относительное filename с информацией директории скажет PHP — попытаться загрузить расширение относительно текущей директории.

Эта опция предоставляет удобный способ выполнения проверки синтаксиса данного PHP -кода. В случае успеха — текст No syntax errors detected in записывается в стандартный вывод, а return-код оболочки будет 0 . При неудаче — текст Errors parsing вместе с внутренним сообщением разборщика об ошибке записывается в стандартный вывод, а return-код оболочки будет 255 .

Эта опция не будет находить фатальные ошибки (вроде не определённых функций). Используйте -f , если хотите проверить также и наличие фатальных ошибок.

Примечание: Эта опция не работает вместе с -r .

Используя эту опцию, PHP печатает на вывод встроенные (и загруженные) модули PHP и Zend: -i Эта опция командной строки вызывает phpinfo() и печатает на вывод результаты. Если PHP не работает правильно, советуем выполнить php -i и посмотреть, выводятся ли сообщения об ошибке до или вместо таблиц информации. Имейте в виду, что вывод будет на HTML и, следовательно довольно сумбурным. -r

Эта опция позволяет выполнять PHP прямо в командной строке. Начальный и конечный тэги PHP ( и ?> ) не нужны и вызывают ошибки разборщика.

Примечание: Нужно проявлять внимание при использовании этой формы PHP , чтобы не было противоречий с заменой переменных командной строки, выполняемой оболочкой.

Пример, выводящий ошибку разборщика:

Проблема здесь в том, что sh/bash выполняет замену переменной даже при использовании двойных кавычек » . Поскольку переменная $foo вряд ли определена, она ни во что не разворачивается, что в результате даёт код, передаваемый в PHP для выполнения, фактически прочитанный:

Корректным будет использовать одинарные кавычки ‘ . Переменные в строках, заключённые в одинарные кавычки, не разворачиваются при работе sh/bash.

Если вы используете оболочку/shell иначе, чем sh/bash, у вас могут появиться новые вопросы. Отправляйте bug report или mail по адресу phpdoc@lists.php.net. Можно легко столкнуться с проблемами при попытке получить переменные оболочки в коде или использовании обратных слэшей (/) для замен/escaping.
Вы предупреждены.

-h С помощью данной опции вы можете получить информацию о действующем списке опций командной строки и небольшое описание их работы.

Исполняемый файл PHP может быть использован для запуска PHP-скриптов абсолютно независимо от web-сервера.
Если вы работаете под Unix, вы должны добавлять специальную первую строчку в ваши PHP-скрипты и делать их исполняемыми, чтобы система знала, какая программа должна выполнять эти скрипты.
Под Windows вы можете ассоциировать php.exe с опцией двойного щелчка по файлам .php либо сделать batch-файл (.bat) для запуска скрипта через PHP. Строка, добавленная в начало скрипта для работы под Unix, не помешает под Windows, поэтому вы можете писать таким образом межплатформенные программы. Ниже дан пример простой РНР-программы для выполнения из командной строки.

Пример 24-1. Скрипт, предназначенный для запуска из командной строки (script.php)

Здесь мы используем специальную первую строку для указания на то, что этот файл должен быть запущен в PHP. Здесь мы работаем с CLI-версией, поэтому не выполняется вывод HTTP-шапок/header. Имеются две переменные, которые вы можете использовать при написании РНР-приложений для командной строки: $argc и $argv . Первая — это количество аргументов плюс 1 (имя запущенного скрипта). Вторая — это массив аргументов, начиная с имени скрипта с индексом ноль ( $argv[0] ).

Мы проверяем, имеется ли менее или более одного аргумента. Также, если аргумент был —help , -help , -h или -? , мы печатаем help-сообщение, выводя имя скрипта динамически. Если мы получили какой-либо другой аргумент, мы выводим его (echo).

Если вы хотите выполнить вышеприведённый скрипт под Unix, вам необходимо сделать его executable и просто вызвать как script.php echothis или script.php -h . Под Windows вы можете создать batch-файл для выполнения этой задачи:

Пример 24-2. Пакетный/Batch-файл для запуска PHP-скрипта в командной строке (script.bat)

Приняв, что вы назвали программу script.php и что ваш php.exe находится в c:\php\php.exe , этот batch-файл запустит её с добавленными вами опциями: script.bat echothis или script.bat -h .

См. также в документации по расширению Readline о функциях, которые можно использовать для усовершенствования вашего РНР-приложения для командной строки.

Источник

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