Что такое 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 используется для 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-архив
Предположим, что наше PHP-приложение содержится в единственном скрипте index.php. Запускаем архиватор, создаем новый архив, добавляем в него файл скрипта, а из папки с установленным PHP берем два файла — php.exe и php5ts.dll. Если в скрипте не используются функции работы с сетью, графикой и т.п., то этого набора должно хватить. В параметрах архива ставим галочку «Создать 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-файл.
Эта ошибка сообщает о том, что VS Code не может проверить php-файл на ошибки, т.к. не находит исполняемый файл php. Следовательно, нам нужно указать путь до исполняемого файла.
Раз уж вы открыли php-файл, следовательно, вероятнее всего вы используете какой-то локальный сервер. От того какой, будет зависеть путь до исполняемого файла.
Я использую Open Server, в моём случае путь будет следующим:
"D:\\_SERVER\\OSPanel\\modules\\php\\PHP-7.1-x64\\php.exe"
У вас путь возможно будет другим, зависит от того какой локальный сервер вы используете и какую версию php вы выбираете.
Теперь нам нужно указать в Visual Studio Code данный путь до файла php.exe .
Или используя горячие клавиши: CTRL + ,
Находим через поиск параметр:
php.validate.executablePath
Нажимаем карандаш чтобы изменить настройку.
Вводите свой путь до файла php.exe .
Надеюсь, вам понравилась данная информация. Если вам интересна тема web-разработки, то можете следить за выходом новых статей в Telegram.
Поделиться с друзьями:
Статьи из данной категории:
- Git SSH Windows — пошаговое руководство
- Настройка Gulp Babel
- Микроразметка сайта
- Как перенести сайт WordPress на хостинг
- Настройте показ всего текста во время загрузки веб-шрифтов
- Сниппеты в VS Code