Выбор читателей
Популярные статьи
Данную статью я решил посветить всем начинающим изучать PHP , потому что у всех возникает одна и та же ошибка. Почему её допускают, не знаю, но допускают постоянно. Я без преувеличений скажу, что получил уже около сотни вопросов, на которые ответ будет дан в этой статье. Эта ошибка связана с неправильным запуском в PHP .
Как делают практически все новички:
Результат, браузер код открывает, но исполнять его не торопится. А просто выводит какие-то куски кода обычным текстом, либо вообще ничего не выводит.
Ошибка данного подхода состоит в том, что ученик не понимает, что PHP - это серверный язык , а не клиентский. Это HTML или JavaScript клиентские языки, они, конечно, обрабатываются браузером. Но для PHP нужен интерпритатор . И вот данный интерпритатор запускается сервером.
Вывод: запускать PHP-код надо через сервер . Если у Вас Denwer , значит, через него.
Теперь, как запускать PHP-код через Denwer . Большинство новичков вновь делают ошибку. Они вроде бы всё делают правильно, создают нужные папки, перезапускают Denwer и вроде бы, осталось только правильно вызвать файл. Но тут снова ошибка: они вновь открывают файл просто в браузере (либо перетаскиванием файла в браузер, либо двойным кликом). Это легко можно заметить по адресу в адресной строке. Там будет что-то наподобие: file:///Z:\home\mysite.local\www\script.php .
А правильно запускать надо, вводя адрес виртуального хоста . То есть прямо в адресной строке браузера вводите: http://mysite.local/script.php - всё, теперь скрипт запустится и выведет свой результат.
Надеюсь, данная статья поможет многим новичкам, только начинающим изучать PHP .
В CLI SAPI есть три различных способа запуска PHP-кода:
Указывание конкретного файла для запуска.
$ php my_script.php $ php -f my_script.php
Оба способа (с указыванием опции -f или без) запустят файл my_script.php . Вы можете выбрать любой файл для запуска, и ваши PHP-скрипты не обязаны иметь расширение .php и могут иметь любое имя и расширение, какое вы пожелаете.
Замечание :
Если вам нужно передать аргументы вашим скриптам, то при использовании опции -f первым аргументом должен быть -- .
Передать PHP-код напрямую в командной строке.
$ php -r "print_r(get_defined_constants());"
Необходимо быть особо осторожным при использовании этого способа, так как может произойти подстановка переменных оболочки при использовании двойных кавычек.
Замечание :
Внимательно прочтите пример, в нем нет открывающих и закрывающих тегов! Опция -r просто в них не нуждается. Их использование приведет к ошибке парсера.
Передать запускаемый 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]
Однако, в 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"
,
"-?"
))) { Использование: } else { В приведенном примере мы используем специальную первую строку
для указания на то, что этот скрипт необходимо запускать при помощи
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-скрипта. В CLI SAPI есть три различных способа запуска PHP-кода: Указывание конкретного файла для запуска. $ php my_script.php
$ php -f my_script.php Оба способа (с указыванием опции -f
или без) запустят
файл my_script.php . Нет ограничений, какой
файл запускать, и PHP-скрипты не обязаны иметь
расширение .php
. Замечание
: Если необходимо передать аргументы в скрипт,
то при использовании опции -f
первым аргументом должен быть --
. Передать PHP-код напрямую в командной строке. $ php -r "print_r(get_defined_constants());" Необходимо быть особо осторожным при использовании этого способа,
так как может произойти подстановка переменных оболочки при использовании
двойных кавычек. Замечание
: Внимательно прочтите пример: в нем нет открывающих и закрывающих тегов!
Опция -r
просто в них не нуждается. Их использование
приведет к ошибке парсера. Передать запускаемый 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] Однако, в Unix-системах есть еще один способ использования
PHP для консольных скриптов. Можно написать скрипт,
первая строка которого будет начинаться с
#!/usr/bin/php
(или же другой
корректный путь к бинарному файлу PHP CLI).
После этой строки можно поместить обычный PHP-код, заключенный
в открывающие и закрывающие теги PHP. Как только будут установлены
корректные атрибуты запуска на файл (например,
chmod +x test
), скрипт может быть
запущен как обычный консольный или perl-скрипт: Пример #1 Запуск PHP-скрипта как консольного
#!/usr/bin/php Подразумевая что этот файл называется test
и находится в текущей директории, можно сделать следующее: $ chmod +x test
$ ./test -h -- foo
array(4) {
=>
string(6) "./test"
=>
string(2) "-h"
=>
string(2) "--"
=>
string(3) "foo"
} Как можно увидеть, в этом случае не нужно заботиться о
передаче параметров, которые начинаются с -
. Исполняемый PHP-файл может использоваться для запуска PHP-скриптов
независимо от веб-сервера. В случае, работы в Unix-подобной системе,
необходимо добавить ко всем скриптам особую строку
#!
(называемую также "shebang") в начало файла
и сделать их исполняемыми, чтобы указать, какая из программ должна
обрабатывать эти скрипты. На 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"
,
"-?"
))) { Использование: } else { Скрипт приведенный выше включается в себя специальную Unix строку,
указывающую на его запуск с помощью PHP. Работа ведется с CLI -версией,
поэтому не будет выведено ни одного HTTP -заголовка. Также приведенный пример проверяет количество переданных аргументов.
В случае, если их больше или меньше одного, а также в случае, если переданный
аргумент был --help
, -help
,
-h
или -?
, выводится
справочное сообщение с использованием $argv , которое содержит
имя выполняемого скрипта. В противном случае просто выводится полученный аргумент. Для запуска приведенного примера в 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
для совместной работы с HTTP-сервером Apache
на Windows
. Эта процедура была протестирована как на Windows XP
и Vista
. Предполагается, что вы уже завершили установку Apache
. Прежде чем приступать к работе, скачайте копию PHP 5
со страницы загрузки
. Загрузите защищенный пакет VC6
из раздела «Windows Binaries
» — то есть не скачивайте установщик. Например, выберите пакет с пометкой «PHP 5.2.5 zip package
», если на данный момент текущая версия — 5.2.5
. Примечание
: обратите внимание, что я не тестировал описанную ниже процедуру с версиями PHP 5.3
, только с 5.2.5
, которая была последней версией на момент написания статьи. Теоретически, те же действия должны выполняться и для установки PHP 7
.
Создайте на жестком диске папку для PHP
. Я предлагаю c:php
, хотя вы можете использовать другое название и расположение папки. Лично я предпочитаю не использовать имена с пробелами. Извлеките все файлы из загруженного архива в эту папку. Для этого просто дважды кликните по zip-файлу
. А затем перетащите все файлы в папку c:php
. Если вы переходите на PHP 5
с более старой версии, перейдите в каталог Windows
, (обычно это c:windows
), и удалите все файлы php.ini
, которые вы ранее там размещали. Перейдите в папку c:php
и создайте копию файла php.ini-recommended
. Назовите новый файл php.ini
. Теперь у вас должен быть файл c:phpphp.in
с содержимым, идентичным файлу c:phpphp.ini-recommended
. Примечание
. Если вы используете Apache 1
нужно либо перенести файл php.ini
в каталог Windows
(c:windows
), либо настроить переменную среды PATH
, чтобы включить в нее c:php
. Если вы не знаете, как это сделать, просто переместите файл php.ini
в папку c:windows
. Не нужно этого делать, если используете Apache 2
, так как позже мы укажем в файле конфигурации Apache 2
директиву с расположением файла php.ini
. Для установки PHP на Windows 7
c помощью текстового редактора (например, такого как «Блокнот», который можно найти в разделе «Служебные» меню «Пуск»
)? откройте файл php.ini
. Возможно, придется внести следующие изменения в файл: а) Включение коротких открывающих тегов
Найдите следующую строку: short_open_tag = Off Если для short_open_tag
задано значение off
, теги типа «» не будут считаться открывающими тегами для PHP-кода
. В таком случае, чтобы начать PHP-скрипт
, нужно будет скомпоновать скрипт с открывающим тегом типа "
Поскольку многие сторонние PHP-скрипты
используют формат «», установка для этого параметра значения off
создаст больше проблем, чем принесет пользы. Особенно, если учесть тот факт, что большинство, коммерческих хостингов, поддерживающих PHP
, без проблем обрабатывают скрипты, использующие «< ?», в качестве открывающего тега. Чтобы изменить эту установку, отредактируйте данную строку следующим образом: short_open_tag = On b) Волшебные кавычки
При установке Apache PHP
по умолчанию входящие данные автоматически не экранируются с помощью слэша. Если вы хотите, чтобы входные данные имели префикс обратной косой черты («»), например, чтобы воспроизводить настройки хостинга, найдите следующую строку: magic_quotes_gpc = Off и замените ее на: magic_quotes_gpc = On Не рекомендуется делать это, если на хостинге не задан данный параметр. Даже при установленном значении Off
вы все равно можете использовать в PHP функцию addslashes()
, чтобы добавлять слэши для конкретных частей данных,. c) Использование глобальных переменных
Ряд старых скриптов при выполнении исходят из того, что все данные, отправляемые через форму, будут автоматически иметь переменную PHP
с тем же именем. Например, если в форме есть поле для ввода с именем «something
«, старые скрипты PHP
исходят из того, что PHP-процессор
автоматически создаст переменную с именем $something
, которая содержит значение, заданное через это поле. Если вы используете такие скрипты, нужно найти следующую строку: register_globals = Off и изменить ее на: register_globals = On Предупреждение
: при установке PHP на Windows
не делайте этого, если у вас нет сторонних скриптов, для работы которых это необходимо. При написании новых скриптов лучше всегда исходить из того, что для элемента register_globals
установлено значение «Off
«. d) Отображение ошибок
На «живом
» сайте ошибки в скрипте обычно регистрируются без отображения в файле ошибок PHP
. Но на локальной машине, пока вы тестируете и отлаживаете PHP-скрипт
более удобно отправлять сообщения об ошибках при их выявлении прямо в окно браузера. Так вы не пропустите ошибки, даже если забудете проверить файл журнала ошибок. Чтобы PHP
отображал сообщения об ошибках прямо в окне браузера, найдите следующую строку: display_errors = Off и измените ее на: display_errors = On Для этого параметра на работающем сайте всегда должно быть установлено значение Off
. e) Путь сессии
Если скрипт использует сессии, найдите следующую строку: ;session.save_path = "/tmp" session.save_path
задает папку, в которой PHP
сохраняет файлы сессии. Поскольку папка /tmp
в Windows
не существует, то нужно установить другую папку. Один из способов — создать папку с именем c:tmp
(как ранее мы создали c:php
) и указать для этого параметра данную папку. Если сделаете это, измените данную строку следующим образом: session.save_path = "c:tmp" Обратите внимание, что в дополнение к изменению пути я также удалил из строки префикс точки с запятой («;»)
. Также можно использовать текущую папку TEMP
на своем компьютере. Или создайте папку tmp
в каталоге PHP
, например c:phptmp
и соответствующим образом настройте файл конфигурации. Возможных вариантов может быть много. Если вы не можете решить, какой из них выбрать, просто создайте c:php
и сделайте, как я сказал выше. f) Сервер SMTP
При установке PHP 5 5
если скрипт использует функцию mail()
, и нужно, чтобы функция успешно отправляла почту на локальном компьютере, найдите следующий раздел:
; For Win32 only.
SMTP = localhost
smtp_port = 25
; For Win32 only.
;sendmail_from = [email protected] Измените его, указав адрес вашего SMTP-сервера
и учетную запись электронной почты. Например, если ваш SMTP-сервер mail.example.com
, а адрес электронной почты [email protected]
, измените код так: SMTP = mail.example.com
smtp_port = 25
sendmail_from = [email protected] Обратите внимание, что после этого, когда скрипт попытается использовать функцию mail()
, для ее успешной работы нужно будет подключиться к своему интернет-провайдеру. Если вы не измените приведенные выше строки и попытаетесь использовать в скрипте функцию mail()
, функция вернет код сбоя и отобразит сообщение об ошибке. Существует два способа установки Apache PHP
. Первый: настроить его на загрузку PHP-интерпретатора
в качестве модуля Apache
. Второй: настроить его для запуска интерпретатора как бинарного CGI
. Нужно применять только один из них. Выберите метод модуля, если на хостинге PHP
также установлен, как модуль Apache
, или используйте метод CGI
, если он реализован на хостинге. a) Запуск PHP 5 в качестве модуля Apache
Чтобы настроить Apache
для загрузки PHP
в качестве модуля для анализа PHP-скриптов
, используйте текстовый редактор ASCII
, чтобы открыть файл конфигурации Apache
, httpd.conf
. Если вы используете Apache 1.x
, файл находится в папке c:Program FilesApache GroupApacheconf
. Пользователи Apache 2.0.x
могут найти его в папке C:Program FilesApache GroupApache2conf
, а пользователи Apache 2.2.x
— в папке C:Program FilesApache Software FoundationApache2.2conf
. Как правило, он находится в папке conf
каталога, где установлен Apache
. Найдите раздел файла с операторами LoadModule
. Объявления, перед которыми стоит символ хэша «#»
, считаются закомментированными. Если используете Apache 1.x
, добавьте следующую строку после всех операторов LoadModule
: LoadModule php5_module "c:/php/php5apache.dll" Если вы используете Apache 2.0.x
, добавьте следующую строку после всех операторов LoadModule
: LoadModule php5_module "c:/php/php5apache2.dll" Если вы используете Apache 2.2.x
, добавьте следующую строку: LoadModule php5_module "c:/php/php5apache2_2.dll" Обратите внимание, что в этом примере установки PHP
используется символ прямой косой черты («/»
) вместо традиционной обратной косой черты Windows («»)
. Это не опечатка. Если вы используете Apache 1.x
, найдите серию операторов «AddModule
» и добавьте после всех строк следующую. AddModule mod_php5.c Затем найдите в файле блок AddType
и добавьте приведенную ниже строку после последнего оператора AddType
. Это нужно сделать независимо от того, какую версию Apache
вы используете. Для Apache 2.2.x
нужно найти строки AddType
в разделе Если необходима поддержка других типов файлов, например «.phtml
», добавьте их в список, например, так: Тем, кто использует одну из версий Apache 2
, нужно указать местоположение ini-файла PHP
. Добавьте следующую строку в конец httpd.conf
. PHPIniDir "c:/php" Если вы использовали другой каталог, нужно будет изменить c:/php
на правильный путь. Не забудьте применить косую черту («/»
). Если используете Apache 1
, вы уже разместили файл php.ini
в папке Windows
или где-нибудь в PATH
. Поэтому PHP
должен будет найти его самостоятельно. Если вы настроили для PHP 5
загрузку в качестве модуля Apache
, можете пропустить данный раздел. Он предназначен для тех, кто хочет настроить для PHP
запуск в качестве бинарного CGI
. Процедура для этого при установке PHP 7
одинаковая как для Apache 1.x
, так и для всех версий серии 2.x
. Найдите часть конфигурационного файла Apache
, в которой находится раздел ScriptAlias
. Добавьте приведенную ниже строку сразу после строки ScriptAlias
для «cgi-bin
». Если используете Apache 2.2.x
, убедитесь, что строка расположена до закрытия IfModule> для раздела Обратите внимание
ScriptAlias /php/ "c:/php/" Apache
нужно настроить MIME
тип PHP
. Найдите блок комментариев AddType
, поясняющий его использование, и добавьте следующую строку ниже него. Для Apache 2.2.x
найдите строки AddType
в разделе AddType application/x-httpd-php .php Как и в случае установки PHP
в качестве модуля Apache
, можно добавить любые расширения, чтобы Apache
распознавал их как скрипты PHP
, например: AddType application/x-httpd-php .phtml Затем вам нужно указать серверу выполнять исполняемый файл PHP
каждый раз, когда он встречает скрипт PHP
. Добавьте в файл следующий код, например, после блока комментариев, поясняющих «Action
«. Если вы используете Apache 2.2.x
, то добавьте код сразу после инструкции AddType
, описанной выше; в Apache 2.2.x
нет блока комментариев «Action
«. Action application/x-httpd-php "/php/php-cgi.exe" Примечание
: часть «/php/»
будет распознана как ScriptAlias
, своего рода макрос, который будет расширен Apache
до «c:/php/»
(или «c:/Program Files/php/»
, если вы установили PHP
там
). Другими словами, не помещайте в эту директиву путь «c:/php/php.exe»
или «c:/Program Files/php/php.exe»
, а используйте «/php/php-cgi.exe»
. Если используете Apache 2.2.x
, найдите следующий раздел в файле httpd.conf
: Добавьте приведенные ниже строки сразу после раздела, который только что нашли. c) Настройка индексной страницы по умолчанию
Этот раздел относится к варианту установки PHP на Windows
в качестве модуля Apache
, так и двоичного CGI
. Если вы создаете файл index.php
и хотите, чтобы Apache
загружал его как главную страницу сайта, придется добавить еще одну строку в файл httpd.conf
. Найдите строку, которая начинается с «DirectoryIndex
», и добавьте «index.php
» в список файлов. Например, если у вас был такой код: DirectoryIndex index.html измените его на: DirectoryIndex index.php index.html При следующем входе на веб-сервер через имя каталога, например «localhost
» или «localhost/directory/
», Apache
отправит все скрипты из index.php
или содержимое файла index.html
, если index.php
недоступен. Перезагрузите сервер Apache
. Это необходимо, чтобы Apache
считал новые директивы конфигурации PHP
, которые вы поместили в файл httpd.conf
. Сервер Apache 2.2
можно перезапустить, дважды кликнув по иконке Apache
Service Monitor
в панели задач и нажав в появившемся окне кнопку «Перезапустить
». После установки PHP 5 5
или другой версии языка создайте php-файл
со следующей строкой: Сохраните в каталог Apache htdocs
файл с именем test.php
. Если используете «Блокнот
», не забудьте сохранить имя «test.php
» с кавычками. Иначе программа самостоятельно добавит расширение .txt
. Откройте данный файл в браузере, введя в адресную строку «localhost / test.php
» (без кавычек
). Не открывайте файл напрямую через проводник — вы увидите только код, введенный ранее. Вам нужно использовать указанный выше URL-адрес
, чтобы браузер попытался получить доступ к веб-серверу Apache
, который запускает PHP
для интерпретации скрипта. Если все пройдет успешно, вы увидите страницу с информацией о настройке PHP
. Поздравляю — вы успешно установили PHP
и настроили Apache
для работы с ним. Вы можете загрузить этот же файл test.php
на свой хостинг и запустить его там, чтобы узнать, как хостинг настроил PHP
у себя, и попытаться воспроизвести эти настройки на своей машине. Если это не сработает, проверьте, не выдает ли установка PHP
или установка Apache
ошибок. Для этого откройте окно командной строки и запустите php-cgi.exe
для файла test.php
, например, c:phpphp-cgi test.php
. Если вы вызвали PHP
из командной строки и увидели большой HTML-файл
со всей информацией о конфигурации PHP
, значит, PHP
настроен правильно. Вероятно, проблема связана с конфигурацией Apache
. Убедитесь, что вы перезапустили Apache
после внесения изменений в конфигурацию и что вы правильно настроили веб-сервер. Сразу оговорюсь, что всё, о чём будет идти речь в этой статье, применимо лишь для Unix-подобных операционных систем, и не будет работать под Windows. Речь идёт именно об альтернативе крону
. Несчастным любителям Windows придётся колдовать с "Планировщиком заданий"
- Чёрная Магия останется недоступна для них:) Кроме того, потребуется ssh доступ, а в идеале - доступ php скриптов к командной строке. Применимо к PHP, это скрипт, который может работать самостоятельно, без остановок и без участия пользователя. Как получить такой скрипт? На самом деле, очень просто, нужно лишь нарушить одно из первых правил программирования, которому учат в школе, и создать бесконечный цикл:
// Чтобы программа работала постоянно, она просто должна постоянно работать;)
while(1) {
// Тут будет располагаться код Демона
// ...
// Время сна Демона между итерациями (зависит от потребностей системы)
sleep(1);
}
Простой до невозможности код вызывает, всё же, несколько вопросов. Как его запустить? Как отслеживать его выполнение? Как его остановить? А как вообще запускают php-скрипты? Если это веб-приложение, то при помощи браузера и веб-сервера. Но этот вариант не подходит, ведь мы имеем дело с бесконечным скриптом, а время выполнения скриптов ограничены директивой max_execution_time
в php.ini
. Следовательно, бесконечный скрипт необходимо запускать через консоль, ведь тогда максимальное время его выполнения не учитывается
. Примерно так выглядит команда запуска демона: Php -f /path/to/your/daemon.php &
Для ручного запуска её нужно ввести в ssh терминале (putty, WinSCP и т.д.), а для запуска системой при загрузке - в соответствующий файл автозагрузки (положение и название файла зависит от операционной системы). Обратите внимание, что консольный скрипт демона запускается в фоновом режиме
, не вовлекая пользователя в ожидание его завершения (ведь скрипт бесконечен). Именно в наличии возможности запустить процесс в фоновом режиме и лежит причина того, что описываемый мной способ не подходит для Windows-серверов. После запуска в консоли должен отобразиться идентификатор процесса
нашего демона, так называемый PID. Проверить, запущен ли процесс демона можно просто открыв список процессов в системе: Ps -aux
Найти демона в списке процессов несложно, как по команде запуска, так и по PID: USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
...
root 22193 0.1 0.2 393180 72132 ? S Apr24 5:05 php -f /path/to/your/daemon.php &
Остановить процесс демона
можно так же, как и любой другой процесс: Kill xxxx
В приведённом примере xxxx - это и есть PID, идентификатор процесса. Стоит отметить, что это не остановка, а именно "убийство" процесса демона. Дело в том, что работа скрипта будет прервана где попало, что не всегда и не всем подходит. По идее, в таком случае демона нужно останавливать где-то между его итерациями и уже не из консоли. К примеру, мы можем создать в базе данных или в каком-то файле на сервере заявку на остановку скрипта, а между итерациями демона проверять, нет ли такой заявки. Если заявка будет обнаружена, остановить цикл оператором break
.
А что, если требуется создать и отслеживать сразу много демонов? К примеру, в упомянутом выше сервисе CheckTrust обработкой данных и проектов пользователей занимаются > 30 таких скриптов. Создавать и следить за ними из консоли очень неудобно - нужен более дружественный интерфейс. Круто, да? :) Как раз для создания подобной системы было бы неплохо иметь доступ к командной строке из php. Каждый демон - запись в базе данных, напротив которой можно проставить команду его запуска, а так же PID процесса. Следовательно, появляется возможность запускать, останавливать и отслеживать статус демонов прямо из веб-интерфейса. В итоге сами демоны у меня получились частью консольного приложения, а система управления ими - частью веб-приложения. Поскольку система, показанная выше, заточена строго под CheckTrust, её код показывать я не буду. Зато скопирую сюда код php класса для управления процессами
, который я использовал при её создании:
<?php
/*
* Process.php
* An easy way to keep in track of external processes.
* Ever wanted to execute a process in php, but you still wanted to have somewhat controll of the process ? Well.. This is a way of doing it.
* @compability: Linux only. (Windows does not work).
* @author: Peec
*/
class Process{
private $pid;
private $command;
public function __construct($cl=false){
if ($cl != false){
$this->command = $cl;
$this->runCom();
}
}
private function runCom(){
$command = "nohup ".$this->command." > /dev/null 2>&1 & echo $!";
exec($command ,$op);
$this->pid = (int)$op;
}
public function setPid($pid){
$this->pid = $pid;
}
public function getPid(){
return $this->pid;
}
public function status(){
$command = "ps -p ".$this->pid;
exec($command,$op);
if (!isset($op))return false;
else return true;
}
public function start(){
if ($this->command != "")$this->runCom();
else return true;
}
public function stop(){
$command = "kill ".$this->pid;
exec($command);
if ($this->status() == false)return true;
else return false;
}
}
?>
Единственный недостаток этого класса - то, что я уже описывал ваше - он останавливает процессы методом kill, но мне пока что этого достаточно:) А вот и пример его использования:
// Запуск демона и получение PID (предполагается, что pid где-то сохраняется после запуска)
$command = "";
$process = new Process($command);
$processId = $process->getPid();
// Проверка статуса демона
$process = new Process();
$process->setPid($processId);
$status = $process->status(); // возвращает true или false
// Остановка демона
$process = new Process();
$process->setPid($processId);
$stopped = $process->stop(); // возвращает true или false
Подводя итог, хочу сказать, что это не единственно возможная и, вполне возможно, не самая оптимальная реализация демонов на php. К примеру, для многопроцессовых демонов существует крутое расширение PHP PCNTL . Кто-то, возможно, даже скажет, что для консольных приложений существуют совсем другие языки программирования. Но, как ни крути, у данной реализации есть неоспоримые преимущества:
Спасибо за внимание:) Если у кого-нибудь возникнут вопросы или идеи, с удовольствием отвечу на них в комментариях.
?>
Это консольный PHP-скрипт, принимающий один аргумент.
echo
$argv
[
1
];
}
?>
Вы не можете комбинировать любой из этих трех способов запуска кода.
var_dump
($argv
);
?>
?>
Это консольный PHP-скрипт, принимающий один аргумент.
echo
$argv
[
1
];
}
?>
Этапы настройки PHP 5
1. Загрузите PHP 5
2. Установите PHP 5
3. Тем, кто обновляет пакет: Удалите старый файл PHP.INI из каталога Windows
4. Настройка PHP
Как настроить Apache для PHP 5
Запуск PHP 5 в качестве бинарного файла CGI
Перезапустите веб-сервер Apache
Тестирование установки PHP
Что есть программа-демон и как написать демона на PHP
Де́мон
(daemon, dæmon, др.-греч. δαίμων божество) - компьютерная программа в системах класса UNIX, запускаемая самой системой и работающая в фоновом режиме без прямого взаимодействия с пользователем. Демоны обычно запускаются во время загрузки системы.
Как запустить php-демона
Отслеживание и остановка демонов
Система управления демонами
Статьи по теме: | |
Обзор аккумулятора Xiaomi Mi Power Bank Pro с быстрой зарядкой Гарантийный ремонт не производится, если
Бренд Xiaomi знаменит на отечественном рынке в первую очередь благодаря... Удаление всех твитов сразу в твиттере
Привет, ЖЖНаверное, многие из вас сталкивались с проблемой чистки... Сбрасываем счетчик "папмерса" в принтере Epson l110
Одно из требований, предъявляемых к чернилам струйных принтеров, состоит... |