Linux выполнение php скрипта

Running PHP script from the command line

How can I run a PHP script from the command line using the PHP interpreter which is used to parse web scripts? I have a phpinfo.php file which is accessed from the web shows that German is installed. However, if I run the phpinfo.php from the command line using — php phpinfo.php and grep for German , I don’t find it. So both PHP files are different. I need to run a script which the php on which German is installed. How can I do this?

Please add more details about installed web server software, for example add output from phpinfo(); to your question. Also updated my answer.

3 Answers 3

You should check your server configuration files. Look for lines that start with LoadModule php . There probably are configuration files/directories named mods or something like that. Start from there.

You could also check output from php -r ‘phpinfo();’ | grep php and compare lines to phpinfo(); from web server.

To run php interactively:

(So you can paste/write code in the console.)

To make it parse a file and output to the console:

Parse a file and output to another file:

php -f file.php > results.html 

Do you need something else?

To run only a small part, one line or like, you can use:

php -r '$x = "Hello World"; echo "$x\n";' 

If you are running Linux then do man php at the console.

If you need/want to run PHP through fpm (FastCGI Process Manager), use cli fcgi:

SCRIPT_NAME="file.php" SCRIP_FILENAME="file.php" REQUEST_METHOD="GET" cgi-fcgi -bind -connect "/var/run/php-fpm/php-fpm.sock" 

Where /var/run/php-fpm/php-fpm.sock is your php-fpm socket file.

No. The problem is that there are multiple phps on the system. I need to find out which php is used to parse web scripts. If I run php from the console then it can’t find a class — but if I call that script from the web then that problem isn’t there. So it means that the PHP which is used are different, isn’t it?

Читайте также:  Linux install driver module

@Siddharth You should check that from your server s/w configuration. Add your server details to question.

In linux, you can use which php to tell you which executable you are running by default. To use another executable, you must specify the full path to the executable you wish to use: /path/to/specific/php -f file.php > results.html

nice detail, +1 for explanation. Just here to comment, be watch with the environment vars, maybe you need to use the complete directory path even when the script is in the same directory that php.exe

On SUSE Linux, there are two different configuration files for PHP: one for Apache, and one for CLI (command line interface). In the /etc/php5/ directory, you will find an «apache2» directory and a «cli» directory. Each has a «php.ini» file. The files are for the same purpose (PHP configuration), but apply to the two different ways of running PHP. These files, among other things, load the modules PHP uses.

If your OS is similar, then these two files are probably not the same. Your Apache php.ini is probably loading the German module, while the the CLI php.ini isn’t. When the module was installed (auto or manual), it probably only updated the Apache php.ini file.

You could simply copy the Apache php.ini file over into the cli directory to make the CLI environment exactly like the Apache environment.

Or, you could find the line that loads the German module in the Apache file and copy/paste just it to the CLI file.

Источник

Выполнение PHP-файлов

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

$ php my_script.php $ php -f my_script.php

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

Замечание: Если необходимо передать аргументы в скрипт, то при использовании опции -f первым аргументом должен быть .

$ php -r 'print_r(get_defined_constants());'

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

Замечание: Внимательно прочтите пример: в нем нет открывающих и закрывающих тегов! Опция -r просто в них не нуждается. Их использование приведет к ошибке парсера.

$ some_application | some_filter | php | sort -u > final_output.txt

Как и любое другое консольное приложение, бинарный файл PHP принимает аргументы, но PHP-скрипт также может получать аргументы. PHP не ограничивает количество аргументов, передаваемых в скрипт (оболочка консоли устанавливает некоторый порог количества символов, которые могут быть переданы; обычно этого лимита хватает). Переданные аргументы доступны в глобальном массиве $argv . Первый индекс (ноль) всегда содержит имя вызываемого скрипта из командной строки. Учтите, что если код вызывается на лету из командной строки с помощью опции -r , значением $argv[0] будет просто дефис (). То же самое верно и для кода, переданного через конвейер из STDIN.

Вторая зарегистрированная глобальная переменная — это $argc , содержащая количество элементов в массиве $argv ( (а не количество аргументов, переданных скрипту).

Читайте также:  Linux create desktop file

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

# Эта команда не запустит данный код, но покажет информацию об использовании PHP $ php -r 'var_dump($argv);' -h Usage: php [options] [-f] [args. ] [. ] # Эта команда передаст аргумент '-h' в скрипт, предотвратив показ справки PHP $ php -r 'var_dump($argv);' -- -h array(2) < [0]=>string(1) "-" [1]=> string(2) "-h" >

Однако, в Unix-системах есть еще один способ использования PHP для консольных скриптов. Можно написать скрипт, первая строка которого будет начинаться с #!/usr/bin/php (или же другой корректный путь к бинарному файлу PHP CLI ). После этой строки можно поместить обычный PHP-код, заключенный в открывающие и закрывающие теги PHP. Как только будут установлены корректные атрибуты запуска на файл (например, chmod +x test), скрипт может быть запущен как обычный консольный или perl-скрипт:

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

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

$ chmod +x test $ ./test -h -- foo array(4) < [0]=>string(6) "./test" [1]=> string(2) "-h" [2]=> string(2) "--" [3]=> string(3) "foo" >

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

Исполняемый PHP-файл может использоваться для запуска PHP-скриптов независимо от веб-сервера. В случае, работы в Unix-подобной системе, необходимо добавить ко всем скриптам особую строку #! (называемую также «shebang») в начало файла и сделать их исполняемыми, чтобы указать, какая из программ должна обрабатывать эти скрипты. На Windows-платформах можно назначить обработчик php.exe для файлов с расширениями .php либо создать пакетный (.bat) файл для запуска скриптов посредством PHP. Строка, добавляемая в начале скрипта для Unix-систем, не влияет на их работу в ОС Windows, таким образом можно создавать кроссплатформенные скрипты. Ниже приведен простой пример скрипта, выполняемого из командной строки:

Читайте также:  Google chrome linux mac os

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

if ( $argc != 2 || in_array ( $argv [ 1 ], array( ‘—help’ , ‘-help’ , ‘-h’ , ‘-?’ ))) ?>

Это консольный PHP-скрипт, принимающий один аргумент.

Любое слово, которое вы хотели бы
напечатать. Опции —help, -help, -h,
или -? покажут текущую справочную информацию.

Скрипт приведенный выше включается в себя специальную Unix строку, указывающую на его запуск с помощью PHP. Работа ведется с CLI -версией, поэтому не будет выведено ни одного HTTP -заголовка.

Также приведенный пример проверяет количество переданных аргументов. В случае, если их больше или меньше одного, а также в случае, если переданный аргумент был —help , -help , -h или -? , выводится справочное сообщение с использованием $argv[0] , которое содержит имя выполняемого скрипта. В противном случае просто выводится полученный аргумент.

Для запуска приведенного примера в Unix-системе, необходимо сделать его исполняемым и просто выполнить в консоли script.php echothis или script.php -h. В Windows-системе можно создать пакетный файл:

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

@echo OFF "C:\php\php.exe" script.php %*

Предполагая, что скрипт называется script.php и полный путь к CLI php.exe совпадает с C:\php\php.exe , приведенный пакетный файл запустит скрипт с переданными параметрами: script.bat echothis либо script.bat -h.

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

В Windows запуск PHP можно настроить без необходимости указывать C:\php\php.exe и расширение .php. Подробнее эта тема описана в разделе Запуск PHP из командной строки в Microsoft Windows.

Источник

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