Что такое php исполняемый файл
Перейти к содержимому

Что такое php исполняемый файл

  • автор:

Что такое php исполняемый файл

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

$ php my_script.php $ php -f my_script.php
$ 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] будет «Стандартный поток» («Standard input code»); до PHP 7.2.0 это был дефис ( «-» ). То же самое верно и для кода, переданного через конвейер из STDIN .

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

Если передаваемые аргументы не начинаются с символа — , то особых проблем быть не должно. Передаваемый в скрипт аргумент, который начинается с — создаст проблемы, т.к. 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-скрипта как консольного

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

Предполагая, что этот файл назван 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, таким образом можно создавать кроссплатформенные скрипты. Ниже приведён простой пример скрипта, выполняемого из командной строки:

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

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

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

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

В приведённом выше скрипте в первой строке содержится shebang, указывающий что этот файл должен запускаться 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.

Замечание:

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

User Contributed Notes 7 notes

10 years ago

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

1: #!/usr/bin/php
2: #!/usr/bin/env php
3: #!/usr/bin/php -n
4: #!/usr/bin/php -ddisplay_errors=E_ALL
5: #!/usr/bin/php -n -ddisplay_errors=E_ALL

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

2. uses «env» to find where PHP is installed: it might be elsewhere in the $PATH, such as /usr/local/bin.

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.

5. This will not (as of 2013) work on Linux. It acts as if the whole string, «-n -ddisplay_errors=E_ALL» were a single argument. But in BSD, the shebang line can take more than 2 arguments, and so it may work as intended.

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

Что такое php исполняемый файл

Создание исполняемых приложений на PHP

Создание исполняемых приложений на PHP

Мы привыкли, что язык PHP используется для web-разработки, и в большинстве случаев это действительно так. Но при этом PHP обладает обширным арсеналом различных функций и инструментов, которые можно использовать не только в сайтостроительстве. Из PHP-скриптов можно делать полноценные приложения для Windows в виде привычных нам EXE-файлов. Для PHP4 в свое время были такие интересные штуки, как Roadsend Compiler Studio и Bambalam PHP EXE Compiler, которые делали из скриптов консольные приложения. Были даже такие инструменты, как PHP-GTK и WinBlider, позволявшие создавать на PHP программы с графическим оконным интерфейсом. Теперь, к сожалению, все эти проекты уже прекратили свое существование. Инструментов нет, но задачи никто не отменял! Значит надо искать какие-то новые решения.

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

Для запуска PHP-скрипта на выполнение используется команда

php.exe -f скрипт.php
В ней заключается суть создания исполняемых приложений на PHP. Самый простой способ сделать подобие приложения на PHP — это использовать самораспаковывающийся архив RAR.

Создаем SFX-архив

Создаем SFX-архив

Предположим, что наше PHP-приложение содержится в единственном скрипте index.php. Запускаем архиватор, создаем новый архив, добавляем в него файл скрипта, а из папки с установленным PHP берем два файла — php.exe и php5ts.dll. Если в скрипте не используются функции работы с сетью, графикой и т.п., то этого набора должно хватить. В параметрах архива ставим галочку «Создать SFX-архив».

Параметры SFX-архива

Параметры SFX-архива

На следующей вкладке открываем дополнительные параметры архива.

Настройка параметров

Настройка параметров

В окне настроек проставляем галочки, как показано на скриншотах.

Настройка параметров

Настройка параметров

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

Настройка параметров запуска

Настройка параметров запуска

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

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

[PHP]
extension_dir = «.»
extension=php_curl.dll
и упаковать его вместе с расширениями в этот же архив. Вообще, такие комплекты удобнее всего собирать в отдельной папке, там можно сразу проверять работоспособность скрипта, а главное, наличие всех зависимых библиотек и расширений. Например, указанное расширение php_curl потянет за собой паровозом еще библиотеки libeay32.dll, libssh2.dll и ssleay32.dll, которые также придется включать в архив.

Несмотря на простоту создания, у таких приложений есть существенные недостатки. Во-первых, кто угодно может открыть архив, ознакомиться с его содержимым, даже внести какие-то свои коррективы. Во-вторых, SFX-архивы не обрабатывают в чистом виде параметры командной строки, надо изворачиваться со специфическими ключами типа -spпараметры>. Поэтому приложения на базе SFX-архивов обычно могут выполнять только какие-то фиксированные действия, не предусматривающие взаимодействие с пользователем.

Более удобный вариант для создания приложений из PHP-скриптов — это коммерческая утилита MoleBox. Она упаковывает целое приложение в контейнер в виде единого exe-файла. Вместе с основным исполняемым файлом в контейнер помещаются необходимые для его работы библиотеки и прочие файлы, что нам и нужно. Несколько лет назад проект MoleBox прекратил существование, но это не значит, что его больше негде взять (пароль на архив «manhunter.ru»).

Добавление файлов в проект

Добавление файлов в проект

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

Настройки проекта

Настройки проекта

В настройках проекта в качестве главного исполняемого файла выбираем php.exe, из него же будет извлечена иконка для результирующего файла. В параметрах командной строки указываем имя запускаемого скрипта и дополнительный ключ , который означает, что кроме имени скрипта надо ретранслировать на обработку параметры, переданные файлу приложения. Для работы с параметрами командной строки в PHP предусмотрены две предустановленных переменных. В целочисленной переменной $argc содержится количество переданных параметров, а в массиве $argv хранятся сами параметры.

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

is_executable

Возвращает true , если файл существует и является исполняемым, или false в случае возникновения ошибки. В POSIX-системах файл является исполняемым, если установлен исполняемый бит прав доступа к файлу. Для Windows смотрите примечание ниже.

Ошибки

В случае неудачного завершения работы генерируется ошибка уровня E_WARNING .

Примеры

Пример #1 Пример использования функции is_executable()

if ( is_executable ( $file )) echo $file . ‘ является исполняемым’ ;
> else echo $file . ‘ не является исполняемым’ ;
>

Примечания

Замечание: Результаты этой функции кешируются. Более подробную информацию смотрите в разделе clearstatcache() .

Подсказка

Начиная с PHP 5.0.0, эта функция также может быть использована с некоторыми обёртками url. Список обёрток, поддерживаемых семейством функций stat() , смотрите в разделе Поддерживаемые протоколы и обёртки.

Замечание: В Windows файл считается исполняемым, если это по-настоящему исполняемый файл, как сообщает Win API GetBinaryType() ; Для обратной совместимости файлы с расширением .bat или .cmd также считаются исполняемыми. До PHP 7.4.0 любой непустой файл с расширением .exe или .com считался исполняемым. Обратите внимание, что PATHEXT не имеет отношения к is_executable() .

Смотрите также

  • is_file() — Определяет, является ли файл обычным файлом
  • is_link() — Определяет, является ли файл символической ссылкой

User Contributed Notes 5 notes

7 years ago

For windows users,

It will return TRUE for EXE extensions. I have checked for MSI, but it returns FALSE.

4 years ago

is_executable() does not check the PATH environment variable, so if your current working dir is /dir/ and you have /bin/ in your PATH env and the file /bin/ffmpeg exists, then you can still run shell_exec(«ffmpeg»), but is_executable(«ffmpeg») will return false.

if you’re looking for a version of is_executable that also considers the PATH environment variable, then try this:

function is_executable_pathenv ( string $filename ): bool
<
if ( is_executable ( $filename )) <
return true ;
>
if ( $filename !== basename ( $filename )) <
return false ;
>
$paths = explode ( PATH_SEPARATOR , getenv ( «PATH» ));
foreach ( $paths as $path ) <
if ( is_executable ( $path . DIRECTORY_SEPARATOR . $filename )) <
return true ;
>
>
return false ;
>

3 years ago

This function returns the value for the process PHP is executing under.

/var/somebody/files was only executable by owner (700).

It contained world-readable files, but without execute permission, PHP could not access the directory to download the files.

is_executable() returned false.

Making the dir world-executable (701) gave access to PHP. The download worked. And is_executable() returned true.

I assume that if I added PHP to the group of the folder and gave the group executable permission, that would also work.

3 years ago

Under windows, it seems to returns always false for directories.

$dir = __DIR__ ;
$result = is_executable ( $dir ) ? ‘true’ : ‘false’ ;

if( $result ) echo $result ;
>
?>

So do NOT use this to check if a folder is transversable because it will be system dependant code.

4 years ago

Find no mention of this, but is_executable returns result for owner permissions only (not for group or other).

  • Copyright © 2001-2023 The PHP Group
  • My PHP.net
  • Contact
  • Other PHP.net sites
  • Privacy policy

Не удается проверить так как не задан исполняемый PHP-файл

При сохранении php-файла в Visual Studio Code может возникнуть следующая проблема у новичков и не только.

Не удается проверить, так как не задан исполняемый PHP-файл. Используйте параметр php.validate.executablePath, чтобы настроить исполняемый PHP-файл.

Ошибка Не удается проверить так как не задан исполняемый PHP-файл

Эта ошибка сообщает о том, что VS Code не может проверить php-файл на ошибки, т.к. не находит исполняемый файл php. Следовательно, нам нужно указать путь до исполняемого файла.

Раз уж вы открыли php-файл, следовательно, вероятнее всего вы используете какой-то локальный сервер. От того какой, будет зависеть путь до исполняемого файла.

Я использую Open Server, в моём случае путь будет следующим:

"D:\\_SERVER\\OSPanel\\modules\\php\\PHP-7.1-x64\\php.exe"

У вас путь возможно будет другим, зависит от того какой локальный сервер вы используете и какую версию php вы выбираете.

Теперь нам нужно указать в Visual Studio Code данный путь до файла php.exe .

Настройки VS Code (CTRL + ,)

Или используя горячие клавиши: CTRL + ,

Находим через поиск параметр:

php.validate.executablePath

Нажимаем карандаш чтобы изменить настройку.

Поиск в найстройках VS Code

Вводите свой путь до файла php.exe .

Путь до исполняемого PHP-файла в VS Code

Надеюсь, вам понравилась данная информация. Если вам интересна тема web-разработки, то можете следить за выходом новых статей в Telegram.

Поделиться с друзьями:

Статьи из данной категории:

  • Git SSH Windows — пошаговое руководство
  • Настройка Gulp Babel
  • Микроразметка сайта
  • Как перенести сайт WordPress на хостинг
  • Настройте показ всего текста во время загрузки веб-шрифтов
  • Сниппеты в VS Code

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

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