Ловим попутный ветер или как запустить скрипт PHP. Использование PHP из Командной Строки

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

Как делают практически все новички:

  1. Создают PHP-файл (иногда HTML-файл , но это самые новички).
  2. Записывают туда PHP-код .
  3. И двойным кликом пытаются открыть его в браузере.

Результат, браузер код открывает, но исполнять его не торопится. А просто выводит какие-то куски кода обычным текстом, либо вообще ничего не выводит.

Ошибка данного подхода состоит в том, что ученик не понимает, что PHP - это серверный язык , а не клиентский. Это HTML или JavaScript клиентские языки, они, конечно, обрабатываются браузером. Но для PHP нужен интерпритатор . И вот данный интерпритатор запускается сервером.

Вывод: запускать PHP-код надо через сервер . Если у Вас Denwer , значит, через него.

Теперь, как запускать PHP-код через Denwer . Большинство новичков вновь делают ошибку. Они вроде бы всё делают правильно, создают нужные папки, перезапускают Denwer и вроде бы, осталось только правильно вызвать файл. Но тут снова ошибка: они вновь открывают файл просто в браузере (либо перетаскиванием файла в браузер, либо двойным кликом). Это легко можно заметить по адресу в адресной строке. Там будет что-то наподобие: file:///Z:\home\mysite.local\www\script.php .

А правильно запускать надо, вводя адрес виртуального хоста . То есть прямо в адресной строке браузера вводите: http://mysite.local/script.php - всё, теперь скрипт запустится и выведет свой результат.

Надеюсь, данная статья поможет многим новичкам, только начинающим изучать PHP .

Есть у меня маленький, но очень полезный горшочек скрипт, за которым надо постоянно ходить на сервер, а тут оказалось, что он понадобился на машине, где никаких интернетов нет, а данные, которые нужно обработать — есть. Я сначала решил сделать из него экзешник, но потом оставил эту затею, ибо с компиляторами PHP под Виндовоз неожиданно образовался какой-то жуткий геморрой. HipHop от Facebook напрочь отказался собираться, сайт Roadsend PHP Compiler сдох, а опять собирать с исходников GitHub стало после шаманства с HipHop откровенно влом, ну плюс MinGW особым удобством не отличается.

Заметил, кстати, удивительную странность — на машине с 12 Гб оперативной памяти и четвероядерным процессором, но под MinGW и, соответственно, Виндой, сборка происходит медленнее, чем на компьютере с Linux, скромным двухведерным процессором и двумя же Гб ОП.

Впрочем, все эти танцы с бубном были совершенно лишними.

Запуск скрипта в консоли

Все оказалось банально и элементарно, php прекрасно работает из консоли. Формат команды:

php.exe [параметры] [параметры_скрипта]

Параметры скрипта

Скрипт может «найти» свои параметры в элементах глобального массива $_SERVER:
$_SERVER["argc"] хранит количество параметров
$_SERVER["argv"] их значения. $_SERVER["argv"] сам является индексированным массивом. В элементе 0 содержится имя файла скрипта.

Примечание:
Начиная с PHP 4.3.0, при использовании CLI SAPI переменные $argc и and $argv зарегистрированы и заполнены соответствующими значениями. В более ранних версиях создание этих переменных, так же, как и для CGI или модуля веб-сервера, требует значение on директивы register_globals. Независимо от версии PHP или статуса опции register_global они всегда доступны как элементы массива $_SERVER или $HTTP_SERVER_VARS. Например: $_SERVER[‘argv’]

Пример

Скрипт, выводящий в консоль свои параметры:

Результат работы

Если запустить скрипт, например так:

php.exe con-test.php param1 param2 param3 tramparamparamparam

Портабельный скрипт

Все это не имело бы большого смысла, если бы для запуска скрипта пришлось бы тащить с собой Web-сервер или весь дистрибьютив PHP, со всеми модулями и прочим. Для минимального запуска PHP под Windows нужно всего 2 файла: php.exe и php*ts.dll , где * — версия PHP. Например, для использованного мной PHP5, это php5ts.dll

Разные мелочи

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

— php.ini Вообще, для запуска PHP он не нужен, но тут может вкрасться чущественная гадость. Если на машине уже установлен PHP, или php.ini подложен каким-то злоумышленником в каталог по умолчанию, для многих сборок под Windows это %WINDIR% , то может случиться неприятность.
Сам PHP ищет свой php.ini сначала в каталоге с самим собой, так что можно туда его подложить.

— Расширения PHP. Можно подложить нужные DLL расширений в подкаталог в каталоге с php.exe и прописать в extension_dir в php.ini относительный путь к каналогу, а в соответствующих параметрах extension — имена DLL

— PHP я цельностянул из Denwer 🙂

Источники

1. Создание EXE приложений на PHP Копия
2. Оффлайновые лекционные тетради в клеточку.

В CLI SAPI есть три различных способа запуска PHP-кода:

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

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

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

    Замечание :

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

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

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

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

    Замечание :

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

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

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

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

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

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

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

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

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

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

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

#!/usr/bin/php
var_dump ($argv );
?>

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

$ chmod +x test $ ./test -h -- foo array(4) { => string(6) "./test" => string(2) "-h" => string(2) "--" => string(3) "foo" }

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

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

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

#!/usr/bin/php

If ($argc != 2 || in_array ($argv [ 1 ], array("--help" , "-help" , "-h" , "-?" ))) {
?>

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

Использование:

} else {
echo $argv [ 1 ];
}
?>

В приведенном примере мы используем специальную первую строку для указания на то, что этот скрипт необходимо запускать при помощи PHP. Поскольку мы работаем с CLI -версией, то HTTP -заголовки выводиться не будут. При написании консольных приложений на PHP вам доступны две переменные: $argc и $argv . Первая - количество переданных аргументов плюс один (имя выполняемого скрипта). Вторая - массив переданных аргументов, начиная с имени скрипта с нулевым индексом ($argv).

Также в приведенном примере мы проверяем количество переданных аргументов. В случае, если их более или менее одного, а также в случае, если переданный аргумент был --help , -help , -h или -? , мы выводим справочное сообщение, подставляя имя выполняемого скрипта динамически. В обратном случае мы просто печатаем полученный аргумент.

Если вы хотите выполнить приведенный пример в 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-скрипта.

Всех приветствую. Сегодня я начинаю писать в новую рубрику — PHP ! В основном здесь будут основы и азы этого языка. И для начала я вам расскажу, как открыть php-файл в браузере?

Почему php не открывается так, как html?

Дело вот в чем: php — это серверный язык. Html и javascript — клиентские. Соответственно, для выполнения php-кода нужно запускать сервер, только в этом случае файл можно будет открыть. Собственно, тут только 2 пути:

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

И я всячески советую вам именно второй вариант. Соответственно, перед тем, как начать открывать php файлы, нужно поставить себе такой сервер. Только не думайте, что это тяжело — справитесь буквально за пару минут. Из самых известных локальных серверов для Windows могу выделить такие:

  1. OpenServer
  2. Denwer
  3. Xammp

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

Как открыть php файл после установки сервера?

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

Теперь вам нужно создать новый сайт для локального сервера. Опять же, я показываю только как это делать на денвере. Заходим в корневую папку сервера, тут находим папку home . В ней будут все ваши сайты. Нужно создать новую папку, ее название и будет названием нового сайта. В созданной папке обязательно нужно создать папку www , без этого ничего работать не будет. Последний этап — кидаем нужные php-файлы (которые нужно открыть) в папку www. Она является корневой для сайта.

Способ открытия php-файлов отличается от того, как открывать html. Вы не можете открыть их в браузере напрямую, в таком случае вы увидите только код. Чтобы открыть файл, нужно прописать сайт, на котором он находится, а также путь к файлу на сайте. Хочу подчеркнуть, что если ввести просто название сайта (без http:// , но со слешем), то сервер запустит index.php , если такой имеется.

Пример:
Я создал на локальном сервере папку phptest , в ней — www , а уже в нее закинул нужные файлы. Отлично, теперь нужно перезапустить денвер, если он у вас был запущен. Если нет, просто запускаем. Теперь в браузерной строке нужно набрать: phptest/

Так вы попадаете на главную страницу сайта. Этот файл нужно назвать index.php . Например, я создал на php калькулятор, поместил его в phptest под названием calc.php . Прописываю адрес до этого файла:

Отлично, открылся калькулятор. Можно тестировать приложение.

Как не нужно открывать php?

Это не нужно делать так, как html-файлы. То есть не через «Открыть с помощью» «Браузер» . Так вы увидите только исходный код файла, но ни в коем случае не результат его выполнения.

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

От автора: Если вы когда-нибудь запускали воздушного змея, то знаете, что это не так просто, хотя со стороны кажется наоборот. На самом деле нужно приловчиться, чтобы вовремя веревку натянуть или поймать воздушную «волну». Сегодня я расскажу, как запустить скрипт PHP и какие «веревочки» дергать, чтобы он не просто работал, а «летал»!

Особенности запуска

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

Обычный (удаленный) –предоставляется хостером.

Локальный – устанавливается на клиентской машине.

На стороне хостинга, чтобы увидеть результат работы скрипта, в строку браузера вводится адрес следующего формата: ваш_сайт.ru/имя_файла.php

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

Запуск скрипта в Denwer

В «апачевских» сборках все скрипты запускаются в localhost. Чтобы продемонстрировать это на практике, создадим какой-нибудь интересный пример. Вот его код:

< html >

< head >

< meta http - equiv = "refresh" content = "1" >

< / head >

< body >

< time style = "font-size:36px;color:rgb(102,255,102)" > < / time >

< / body >

< / html >

Разместите этот код в файле PHP и сохраните его на виртуальном диске, который создается после запуска локального сервера. У меня это файл test2.php.

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

Теперь разберемся, как запустить PHP скрипт на компьютере. Для этого в браузере следует указать адрес в формате: localhost/имя_файла.php

Начинаем мучиться

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

Это странно, поскольку упоминаемые библиотеки у меня присутствовали в папке ext. Оказывается, что все дело в неправильно прописанных путях в конфигурационном файле php.ini.

В нем нужно найти раздел «Paths and Directories» и исправить путь, указанный в параметре extension_dir. Измените правые слэши на левосторонние и добавьте в начале адреса букву виртуального диска.

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

Если все хорошо

В командной строке системе нужно указать путь, где находится «экзешник» интерпретатора языка PHP. В Денвере он находится по этому пути: Z:\usr\local\php5

Здесь же расположен и глобальный файл конфигурации.

Запускаем командную строку Винды. Затем указываем системе путь к исполняемому файлу PHP. После чего задаем путь к нужному скрипту: Z:\usr\local\php5\php.exe Z:\home\localhost\www\test2.php

Но в итоге вы получите не совсем ожидаемый результат:

И все потому, что командная строка «не понимает» теги . Перед тем, как запустить PHP скрипт из командной строки, немного модифицируем код, чтобы он возвращал нам только текущее время без эффекта «часов».



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: