запуск php скрипта linux

Запуск php скрипта linux

Указание конкретного файла для запуска.

Передать PHP-код напрямую в командной строке.

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

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

Это даёт мощную возможность создавать PHP-код и передавать его запускаемому файлу, как показано в этом (вымышленном) примере:

Пример #1 Запуск PHP-скрипта как консольного

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

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

Пример #3 Пакетный файл для запуска PHP-скрипта из командной строки (script.bat)

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

В Windows рекомендуется запускать PHP под актуальной учётной записью пользователя. При работе в сетевой службе некоторые операции не будут выполнены, поскольку «сопоставление имён учётных записей и идентификаторов безопасности не выполнено».

User Contributed Notes 7 notes

On Linux, the shebang (#!) line is parsed by the kernel into at most two parts.
For example:

1. is the standard way to start a script. (compare «#!/bin/bash».)

3. if you don’t need to use env, you can pass ONE parameter here. For example, to ignore the system’s PHP.ini, and go with the defaults, use «-n». (See «man php».)

4. or, you can set exactly one configuration variable. I recommend this one, because display_errors actually takes effect if it is set here. Otherwise, the only place you can enable it is system-wide in php.ini. If you try to use ini_set() in your script itself, it’s too late: if your script has a parse error, it will silently die.

Summary: use (2) for maximum portability, and (4) for maximum debugging.

Источник

HackWare.ru

Этичный хакинг и тестирование на проникновение, информационная безопасность

Как запустить PHP скрипт без веб-сервера

Интерпретатор PHP стал неотъемлемой частью практически каждого веб-сервера. Подавляющее большинство веб-приложений написаны на PHP. Поэтому технология PHP очень стойко у многих ассоциируется именно с веб окружением, со средой веб-сервера. Но на самом деле, запускать скрипты PHP можно без веб-браузера. Речь идёт не о специально созданных как веб приложения программах, таких как WordPress, phpMyAdmin, гостевые книги, форумы и прочее. Такие скрипты специально создавались для работы в условиях веб-сервера и для вывода результатов в веб-браузер. Вряд ли удастся полноценно с ними работать в командной строке. Речь идёт о консольных программах на PHP, которые могут выполнять различные, не обязательно связанные с веб сервисами функциями. По сути, PHP является очень гибким языком с хорошим набором классов и на нём можно написать консольную программу под любые функции. Либо ядро программы (так называемый бэк-энд) к которому будер обращаться графический пользовательский интерфейс.

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

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

У вас должен быть установлен PHP, к счастью, в Linux интерпретатор PHP устанавливается очень просто, а в некоторых дистрибутивах присутствует по умолчанию. Если у вас его ещё нет, то установите его одной из следующей команд.

В Debian, Kali Linux, Linux Mint, Ubuntu:

В Arch Linux, BlackArch:

Установка полного веб-сервера в Linux Mint описана здесь, в Ubuntu здесь, в Arch Linux/BlackArch здесь, а в Kali Linux он уже установлен, про то, как его запустить здесь.

В остальном запуск скриптов в консоли, в том числе опции запуска, в Linux и Windows идентичные.

Если вы совсем новичок в Linux, то также смотрите Азы работы в командной строке.

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

Если вы знакомы с запуском консольных программ в Windows или хотя бы в Linux, то для вас всё совсем просто — везде программы запускаются примерно одинаково. Но начнём по порядку для новичков.

Если вы хотите не только возможность запускать PHP из командной строки, но и полноценный веб-сервер Apache + PHP + MySQL на Windows, то выполните установку по этой статье.

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

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

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

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

запуск php скрипта linux. php. запуск php скрипта linux фото. запуск php скрипта linux-php. картинка запуск php скрипта linux. картинка php. Указание конкретного файла для запуска.

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

Справка и опции запуска PHP скриптов в командной строке

Справка содержит опции для разнообразных вариантов запуска файлов .php в командной строке, поэтому приведу её перевод полностью.

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

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

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

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

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

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

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

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

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

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

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

запуск php скрипта linux. php 2. запуск php скрипта linux фото. запуск php скрипта linux-php 2. картинка запуск php скрипта linux. картинка php 2. Указание конкретного файла для запуска.

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

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

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

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

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

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

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

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

запуск php скрипта linux. php 3. запуск php скрипта linux фото. запуск php скрипта linux-php 3. картинка запуск php скрипта linux. картинка php 3. Указание конкретного файла для запуска.

Проверка синтаксиса скрипта PHP в командной строке

С опцией -l будет проверен синтаксис, то есть не нарушены ли правила кода PHP, но сам файл скрипт не будет выполнен:

Или если в файле есть ошибки:

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

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

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

запуск php скрипта linux. php 4. запуск php скрипта linux фото. запуск php скрипта linux-php 4. картинка запуск php скрипта linux. картинка php 4. Указание конкретного файла для запуска.

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

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

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

В PHP есть свой собственный веб-сервер! Если вам очень надо, можно вообще обойтись без сторонних серверов для каких-то определённых задач.

Допустим, в качестве прослушиваемого IP адреса я хочу установить 127.0.0.1, в качестве прослушиваемого порта — 84, корневая папка документов веб-сервера у меня расположена в C:\Users\Alex\Documents\PHP\, тогда команда запуска следующая:

В этой папке у меня файл test_2.php со следующим содержимым:

запуск php скрипта linux. php 5. запуск php скрипта linux фото. запуск php скрипта linux-php 5. картинка запуск php скрипта linux. картинка php 5. Указание конкретного файла для запуска.

запуск php скрипта linux. php 6. запуск php скрипта linux фото. запуск php скрипта linux-php 6. картинка запуск php скрипта linux. картинка php 6. Указание конкретного файла для запуска.

Можно было бы из спортивного интереса попробовать во встроенном веб-сервере запустить WordPress, но что-то лень…

Получение справки в командной строке

Для получения справки о функциях PHP прямо в командной строке используется опция —rf.

Ну как-то так… а чего вы хотели — это же консоль.

Насколько я понял, в строке Parameters в фигурных скобках пишется количество аргументов функции, строка required означает, что аргумент обязательный, а строка optional — что аргумент опциональный. О функции аргументов иногда можно догадаться по их имени, например, $filename. Информации о том, какое действие выполняет функция, видимо, нет.

Опции для разработчика

Если вы действительно пишите и отлаживаете код, в том числе для веб-сайтов, то вам пригодятся следующие опции:

Вывод информации о PHP

Для показа информации о PHP имеются следующие три опции:

Опция -i — это эквивалент phpinfo, но для консоли.

PHP не может сохранить файл даже если достаточно прав на запись

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

Такое поведение может выглядеть необъяснимым, если вы не знаете о директиве open_basedir в главном конфигурационном файле php.ini. Данная директива ограничивает все файловые операции теми папками, которые указаны с ней. Пример:

Данная запись означает, что PHP скрипт может записывать файлы в папку /srv/http/, а также в папки /etc/webapps/, /usr/share/webapps/ и /tmp/.

Причём если директива open_basedir вообще не настроена (строка с ней, например, закомментирована), то PHP может записывать в любую папку, если у текущего пользователя достаточно прав на запись.

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

Чтобы избавиться от этой ошибки есть несколько вариантов:

Чтобы запустить PHP скрипт без учёта настроек файла php.ini используйте опцию -n, например:

Кстати, чтобы узнать, какие именно файлы настроек учитываются при работе PHP, выполните следующую команду:

запуск php скрипта linux. php.ini. запуск php скрипта linux фото. запуск php скрипта linux-php.ini. картинка запуск php скрипта linux. картинка php.ini. Указание конкретного файла для запуска.

Заключение

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

Скрипт на PHP может быть альтернативой скрипту на Bash, особенно если нужно использовать СУБД (MySQL, SQLite) — с которыми через Bash работать тяжело, либо для использования возможностей PHP по работе с текстом в разметке XML, JSON — что в Bash также не очень удобно.

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

Источник

Использование PHP в командной строке

Содержание

User Contributed Notes 35 notes

?>

It behaves exactly like you’d expect with cgi-php.

Even better, instead of putting that line in every file, take advantage of PHP’s auto_prepend_file directive. Put that line in its own file and set the auto_prepend_file directive in your cli-specific php.ini like so:

It will be automatically prepended to any PHP file run from the command line.

When you’re writing one line php scripts remember that ‘php://stdin’ is your friend. Here’s a simple program I use to format PHP code for inclusion on my blog:

Just a note for people trying to use interactive mode from the commandline.

The purpose of interactive mode is to parse code snippits without actually leaving php, and it works like this:

I noticed this somehow got ommited from the docs, hope it helps someone!

If your php script doesn’t run with shebang (#!/usr/bin/php),
and it issues the beautifull and informative error message:
«Command not found.» just dos2unix yourscript.php
et voila.

If your php script doesn’t run with shebang (#/usr/bin/php),
and it issues the beautifull and informative message:
«Invalid null command.» it’s probably because the «!» is missing in the the shebang line (like what’s above) or something else in that area.

Parsing commandline argument GET String without changing the PHP script (linux shell):
URL: index.php?a=1&b=2
Result: output.html

(no need to change php.ini)

Ok, I’ve had a heck of a time with PHP > 4.3.x and whether to use CLI vs CGI. The CGI version of 4.3.2 would return (in browser):

No input file specified.

And the CLI version would return:

500 Internal Server Error

It appears that in CGI mode, PHP looks at the environment variable PATH_TRANSLATED to determine the script to execute and ignores command line. That is why in the absensce of this environment variable, you get «No input file specified.» However, in CLI mode the HTTP headers are not printed. I believe this is intended behavior for both situations but creates a problem when you have a CGI wrapper that sends environment variables but passes the actual script name on the command line.

By modifying my CGI wrapper to create this PATH_TRANSLATED environment variable, it solved my problem, and I was able to run the CGI build of 4.3.2

If you want to be interactive with the user and accept user input, all you need to do is read from stdin.

Parsing command line: optimization is evil!

One thing all contributors on this page forgotten is that you can suround an argv with single or double quotes. So the join coupled together with the preg_match_all will always break that 🙂

Here is a proposal:

$ret = array
(
‘commands’ => array(),
‘options’ => array(),
‘flags’ => array(),
‘arguments’ => array(),
);

/* vim: set expandtab tabstop=2 shiftwidth=2: */
?>

i use emacs in c-mode for editing. in 4.3, starting a cli script like so:

Just another variant of previous script that group arguments doesn’t starts with ‘-‘ or ‘—‘

If you edit a php file in windows, upload and run it on linux with command line method. You may encounter a running problem probably like that:

Or you may encounter some other strange problem.
Care the enter key. In windows environment, enter key generate two binary characters ‘0D0A’. But in Linux, enter key generate just only a ‘OA’.
I wish it can help someone if you are using windows to code php and run it as a command line program on linux.

How to change current directory in PHP script to script’s directory when running it from command line using PHP 4.3.0?
(you’ll probably need to add this to older scripts when running them under PHP 4.3.0 for backwards compatibility)

Here’s what I am using:
chdir(preg_replace(‘/\\/[^\\/]+$/’,»»,$PHP_SELF));

Note: documentation says that «PHP_SELF» is not available in command-line PHP scripts. Though, it IS available. Probably this will be changed in future version, so don’t rely on this line of code.

an another «another variant» :

[arg2] => val2
[arg3] => arg3
[arg4] => true
[arg5] => true
[arg5] => false
)

Spawning php-win.exe as a child process to handle scripting in Windows applications has a few quirks (all having to do with pipes between Windows apps and console apps).

// We will run php.exe as a child process after creating
// two pipes and attaching them to stdin and stdout
// of the child process
// Define sa struct such that child inherits our handles

SECURITY_ATTRIBUTES sa = < sizeof(SECURITY_ATTRIBUTES) >;
sa.bInheritHandle = TRUE;
sa.lpSecurityDescriptor = NULL;

// Create the handles for our two pipes (two handles per pipe, one for each end)
// We will have one pipe for stdin, and one for stdout, each with a READ and WRITE end
HANDLE hStdoutRd, hStdoutWr, hStdinRd, hStdinWr;

// Now we have two pipes, we can create the process
// First, fill out the usage structs
STARTUPINFO si = < sizeof(STARTUPINFO) >;
PROCESS_INFORMATION pi;
si.dwFlags = STARTF_USESTDHANDLES;
si.hStdOutput = hStdoutWr;
si.hStdInput = hStdinRd;

// And finally, create the process
CreateProcess (NULL, «c:\\php\\php-win.exe», NULL, NULL, TRUE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi);

// Close the handles we aren’t using
CloseHandle(hStdoutWr);
CloseHandle(hStdinRd);

// When we’re done writing to stdin, we close that pipe
CloseHandle(hStdinWr);

// Reading from stdout is only slightly more complicated
int i;

std::string processed(«»);
char buf[128];

I modified the PATHEXT environment variable in Windows XP, from the » ‘system’ control panel applet->’Advanced’ tab->’Environment Variables’ button-> ‘System variables’ text area».

Then from control panel «Folder Options» applet-> ‘File Types’ tab, I added a new file extention (php3), using the button ‘New’ and typing php3 in the window that pops up.

Then in the ‘Details for php3 extention’ area I used the ‘Change’ button to look for the Php.exe executable so that the php3 file extentions are associated with the php executable.

You have to modify also the ‘PATH’ environment variable, pointing to the folder where the php executable is installed

Hope this is useful to somebody

For those of you who want the old CGI behaviour that changes to the actual directory of the script use:
chdir(dirname($_SERVER[‘argv’][0]));

at the beginning of your scripts.

This posting is not a php-only problem, but hopefully will save someone a few hours of headaches. Running on MacOS (although this could happen on any *nix I suppose), I was unable to get the script to execute without specifically envoking php from the command line:

[macg4:valencia/jobs] tim% test.php
./test.php: Command not found.

However, it worked just fine when php was envoked on the command line:

[macg4:valencia/jobs] tim% php test.php
Well, here we are. Now what?

Was file access mode set for executable? Yup.

And you did, of course, remember to add the php command as the first line of your script, yeah? Of course.

Aaahhh. in BBEdit check how the file is being saved! Mac? Unix? or Dos? Bingo. It had been saved as Dos format. Change it to Unix:

NB: If you’re editing your php files on multiple platforms (i.e. Windows and Linux), make sure you double check the files are saved in a Unix format. those \r’s and \n’s ‘ll bite cha!

You can also call the script from the command line after chmod’ing the file (ie: chmod 755 file.php).

Adding a pause() function to PHP waiting for any user input returning it:

To hand over the GET-variables in interactive mode like in HTTP-Mode (e.g. your URI is myprog.html?hugo=bla&bla=hugo), you have to call

php myprog.html ‘&hugo=bla&bla=hugo’

dunno if this is on linux the same but on windows evertime
you send somthing to the console screen php is waiting for
the console to return. therefor if you send a lot of small
short amounts of text, the console is starting to be using
more cpu-cycles then php and thus slowing the script.

now this is just a small example but if you are writing an
app that is outputting a lot to the console, i.e. a text
based screen with frequent updates, then its much better
to first cach all output, and output is as one big chunk of
text instead of one char a the time.

ouput buffering is ideal for this. in my script i outputted
almost 4000chars of info and just by caching it first, it
speeded up by almost 400% and dropped cpu-usage.

because what is being displayed doesn’t matter, be it 2
chars or 40.0000 chars, just the call to output takes a
great deal of time. remeber that.

maybe someone can test if this is the same on unix-based
systems. it seems that the STDOUT stream just waits for
the console to report ready, before continueing execution.

In the above example, you would use: #!/usr/local/bin/php

I was looking for a way to interactively get a single character response from user. Using STDIN with fread, fgets and such will only work after pressing enter. So I came up with this instead:

For example you can do this code:

This will just output each line of the input file without doing anything to it.

Источник

Запуск php скрипта linux

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *