как открыть php скрипт
Выполнение PHP-файлов
Указывание конкретного файла для запуска.
Передать PHP-код напрямую в командной строке.
Необходимо быть особо осторожным при использовании этого способа, так как может произойти подстановка переменных оболочки при использовании двойных кавычек.
Передать запускаемый PHP-код через стандартный поток ввода (stdin).
Это дает мощную возможность создавать PHP-код и скармливать его запускаемому файлу, как показано в этом (вымышленном) примере:
Если передаваемые аргументы не начинаются с символа —, то особых проблем быть не должно. Передаваемый в скрипт аргумент, который начинается с — создаст проблемы, так как PHP решит, что он сам должен его обработать. Для предотвращения подобного поведения используйте разделитель списка аргументов —. После того как этот разделитель будет прочитан PHP, все последующие аргументы будут переданы в скрипт нетронутыми.
Пример #1 Запуск PHP-скрипта как консольного
Подразумевая что этот файл называется test и находится в текущей директории, можно сделать следующее:
Как можно увидеть, в этом случае не нужно заботиться о передаче параметров, которые начинаются с —.
Исполняемый PHP-файл может использоваться для запуска PHP-скриптов независимо от веб-сервера. В случае, работы в Unix-подобной системе, необходимо добавить ко всем скриптам особую строку #! (называемую также «shebang») в начало файла и сделать их исполняемыми, чтобы указать, какая из программ должна обрабатывать эти скрипты. На Windows-платформах можно назначить обработчик php.exe для файлов с расширениями .php либо создать пакетный (.bat) файл для запуска скриптов посредством PHP. Строка, добавляемая в начале скрипта для Unix-систем, не влияет на их работу в ОС Windows, таким образом можно создавать кроссплатформенные скрипты. Ниже приведен простой пример скрипта, выполняемого из командной строки:
Пример #2 Скрипт, предназначенный для запуска из командной строки (script.php)
Пример #3 Пакетный файл для запуска PHP-скрипта из командной строки (script.bat)
Также можно ознакомиться с расширением Readline, которое можно использовать для усовершенствования консольного PHP-скрипта.
Синтаксис PHP
Как работают PHP скрипты
PHP работает точно также. Ты пишешь команды одну за другой, а PHP последовательно их исполняет.
Что такое PHP скрипт
Но есть одно важное отличие:
Скрипты запускаются только через http-запросы в браузере. Это значит, что для запуска скрипта script.php необходимо в адресной строке браузера написать site.ru/script.php
Веб-серверы чаще всего настроены так, что при заходе на главную страницу (например site.ru ) автоматически запускается файл index.php или index.html, лежащий в корне сайта.
Создай в корневой папке сайта файл с названием index.php и открой его в своём текстовом редакторе. При наличии файла index.html его нужно удалить.
Обязательно следи за кодировкой скриптов. Кодировка должна быть либо UTF-8 без BOM (если такая доступна в твоём редакторе), либо просто UTF-8.
Вывод чисел и строк в PHP
Команда echo отвечает за вывод информации на экран. После оператора указывается значение, которое нужно вывести.
Чтобы вывести текст, его нужно указать в одинарных или двойных кавычках:
Команды в PHP разделяются точкой с запятой. Для удобства чтения каждую команду принято писать с новой строки:
Результат в браузере:
Вывод HTML кода в PHP
HTML-код можно перемешивать с командами PHP:
Также HTML код можно подставить в PHPшную строку:
Результат в браузере:
Мы можем как угодно совмещать PHP код и HTML теги:
Функции в PHP
Функция phpinfo() выводит на экран информацию с текущими настройками PHP.
Некоторые функции ожидают, что им передадут какое-нибудь значение. Например, функция округления ceil() ожидает число, которое она округлит:
Функции будут подробно рассмотрены в отдельном уроке.
Необходимость закрывающего тега в PHP
Сокращённый синтаксис открывающего тега в PHP
Кроме этого, мы можем заменить тег на более короткую версию :
Использование тега вызывало множество споров в среде PHP разработчиков. Точку в этом вопросе поставили создатели языка PHP: начиная с PHP 7.4 короткий тег объявлен устаревшим, а в PHP 8 его уже не будет.
Комментарии в PHP
Однострочные комментарии в PHP пишутся после символа # или // и действуют до конца строки:
Многострочные комментарии размещаются между /* и */ :
Обратите внимание, многострочные комментарии нельзя вкладывать друг в друга:
Итого
Важно следить за кодировкой скриптов и выбирать либо UTF-8 без BOM, либо просто UTF-8.
Для вывода каких-либо значений в браузер используется команда echo, либо сокращённый синтаксис :
Функции в PHP указываются с круглыми скобками в конце:
Также в PHP можно добавлять однострочные и многострочные комментарии:
Как запустить php через denwer (чем открыть php)
Многие часто спрашивают как запустить php через denwer или чем открыть php? Ну для начала нужен сам денвер конечно при условии, что вы запускаете его на вашем обычном компьютере. Сам же denwer пока ещё бесплатный! Для обычных людей первые пять пунктов написаны специально для вас:
После того, как установили denwer — настройки лучше не трогать, т.к. с полнейшим «фаршем» — PHP и так прекрасно работает в 99% процентах режимах. Есть модули и GD и Magic, XML, XLS, FDPF и прочие — уже включены. Был случай: казалось бы прописал, также как и на серваке модуль so библиотечку dll в винде — и всё завалилось — пришлось делать назад (как было) хотя в httpd.conf Apache она выключена, а работает оказывается из php5! PHP и MySQL самые предпоследние на момент публикации этой статьи. Поддерживают всё и вся! На этом ДЕНВЕРЕ я обкатывал самые извращенческие сайты и пардон — всё работало. Хочу отметить, что прежде чем писать: у меня не работает php, прочитайте ещё раз эту статью — всё просто, нажатием пары кнопок делается. Удачи в программировании друзья 🙂 DENWER хороший инструмент для web разработчиков и web программистов, хочу сказать — СПАСИБО ЕГО РАЗРАБОТЧИКАМ!
Часто спрашивают: можно ли запускать php программы на iPhone или Android? Ответ Сисадмина — да можно, при наличии обычного браузера, но вам надо «расшарить» ваш домашний комп или прописать проброс локального адреса http:// (точно также, вы просматриваете обычные web-странички)
При добавлении ваших новых доменов в home — не забываем делать restart денвера — каждый раз после добавления новых!
ВНИМАНИЕ — ваши ошибки:
А вот, то что КАК РАЗ «вводит в заблуждение » вас, пользователей и начинающих программистов (читаем — ФАЙЛ НЕ НАЙДЕН) — все, хватаются за голову и орут: Не работает, не работает, не работает… читаем 5 пункт ещё раз.
Not Found
The requested URL /111/index.php was not found on this server.
Подсказка Денвера
Вы ошиблись при наборе URL в браузере. Вероятнее всего, сервер пытается найти файл R:/home/localhost/www/111/index.php, которого не существует.
В случае использования CGI-скриптов, корректные пути к CGI-директориям следующие:
URL | Куда указывает |
http://***/cgi-glob/script.cgi | /home/cgi-glob/script.cgi |
http://***/cgi/script.cgi | /home/***/cgi/script.cgi |
http://***/cgi-bin/script.cgi | /home/***/cgi-bin/script.cgi |
Not Found
The requested URL /111/index.php was not found on this server.
Это вводит вас в заблуждение, читаем пункты 1-5. и по-мимо дупацких подсказок ещё и включаем свою умненькую голову 🙂
Подсказка Денвера
Вы ошиблись при наборе URL в браузере. Вероятнее всего, сервер пытается найти файл R:/home/localhost/www/111/index.php, которого не существует.
В случае использования CGI-скриптов, корректные пути к CGI-директориям следующие:
URL | Куда указывает |
http://***/cgi-glob/script.cgi | /home/cgi-glob/script.cgi |
http://***/cgi/script.cgi | /home/***/cgi/script.cgi |
http://***/cgi-bin/script.cgi | /home/***/cgi-bin/script.cgi |
Ну и на последок: DENWER работает как с Windows 32-битной, так и 64-битной прекрасно, не затрагивая 2 оболочки ядра 64-битного процессора! Ну это для тех, кто сомневается. А программы php, я тестировал вот эти — и всё работает.
Файл формата PHP: чем открыть, описание, особенности
Файлы такого формата содержат в себе язык программирования php. Открыть php файл можно специальным П.
Файлы такого формата содержат в себе язык программирования php. Открыть php файл можно специальным ПО, либо в окне браузера. Помимо файлов для программирования сайтов есть три разновидности php-расширения, которые применяются в отдельных нераспространенных сервисах. Это слайд-шоу программы Callisto PhotoParade, рабочий файл CreataCard, содержащий автосохранения и файл издательской программы Microsoft Picture It! Они не так распространены, поэтому вероятность встретить их невелика. Как открыть php файл для веб-программирования, расскажем ниже.
Общее описание формата PHP
Язык программирования PHP в 1995 году разработал датский программист Расмус Релдорф. Спустя два года после выхода первой версии Релдорф выпустил улучшенный вариант. Его стал использовать каждый сотый домен в интернете. В 1998 году документ переделали израильские программисты, которые в дальнейшем продолжили заниматься проектом. Их версия получила название PHP 3.0. На сегодняшний день используется 7.0.0 версия, выпущенная в 2015 году. Язык PHP находится на 6 месте по популярности, на нем написаны интернет-гиганты Facebook и Wikipedia.
У расширения язык без конкретного назначения. Он наиболее распространен при разработке веб-приложений и динамических сайтов. Своей популярностью язык обязан широким выбором встроенных и внешних инструментов для разработки, совместимости с системами управления баз через дополнительные модули, взаимодействию с куками и сессиями и так далее.
Как и чем открыть файл php расширения
Файл php открыть не так просто, как html. Есть два способа: программный и браузерный. В двух случаях нужен интерпретатор, либо специальное ПО, причем важно отметить, что запустить php и открыть – не одно и то же.
Открыть php в браузере
Чтобы понять, как открыть файл php в браузере, важно понять отличие php от html. Последний открывается на стороне клиента – то есть в браузере, а php – на сервере. Чтобы запустить php, нужно либо приобрести домен и работать с php на нем, либо установить локальный сервер на компьютере. Последний способ предпочтительнее, поскольку бесплатный и позволяет создавать безграничное количество сайтов, которые хранятся на вашем ПК.
Есть три основных вида локальных серверов:
После установки локального сервера на компьютере необходимо создать сайт.
Затем в папке сервера необходимо найти папку под названием «home», в ней создаете еще одну и называете ее как домен будущего сайта. Далее создаем еще одну папку и называем «www», в нее перетаскиваем нужные документы.
Далее запускаем браузер и в адресной строке пишем название сайта/название файла php. После нажатия на «Enter», php запускается в виде приложения, а не текстового кода. Это позволяет тестировать интерактивные возможности получившейся страницы.
Открыть php на компьютере
Способов, чем открыть файл php на компьютере достаточно много. Так как они открываются в текстовом формате, специализированные редакторы программного кода смогут работать с php.
Чем открыть php:
Некоторые программы из перечисленных работают только на Windows, поэтому в случае использования на других ОС проверьте совместимость перед установкой.
Запускаем PHP-скриптики через php-fpm без web-сервера. Или свой FastCGI-клиент (под капотом)
Приветствую всех читателей «Хабра».
Дисклеймер
Статья получилась довольно длинная и тем кто не хочет читать предысторию, а хочет перейти сразу к сути прошу прямиком к главе «Решение».
Вступление
В данной статье хотелось бы рассказать о решении довольно нестандартной задачи, с которой пришлось столкнуться во время рабочего процесса. А именно, нам понадобилось запускать в цикле кучу php скриптов. О причинах и о спорности подобного архитектурного решения в данной статье распространяться не буду, т.к. собственно она и не про это вовсе, просто была задача, ее нужно было решить и решение показалось мне достаточно интересным чтобы им поделиться с Вами, тем более манов по данному вопросу в интернете я не нашел совсем (ну разумеется кроме официальных спецификаций). Спеки конечно это хорошо и в них конечно все есть, но думаю вы согласитесь, что если вы не особо знакомы с темой, да и еще и ограничены по времени то разбираться в них то еще удовольствие.
Для кого эта статья
Для всех кто работает с web-ом и о протоколе FastCgi знает лишь что это протокол в соответствии с котороым web-сервер запускает php скриптики, но хочет более детально его изучить и заглянуть под капот.
Обоснование (зачем эта статья)
Но при запуске каждого скрипта, будет создаваться окружение, запускаться отдельный процесс, в общем как то затратно по ресурсам нам показалось. Данную реализацию отвергли. Второе что пришло на ум это конечно же php-fpm, он ведь такой крутой, всего один раз запускает окружение, следит за памятью, все там логирует, корректно запускает и останавливает скрипты, в общем все делает круто, и нам конечно же этот путь понравился больше.
Но вот незадача, в теории то мы знали как это работает, в общих чертах (как оказалось в очень общих), но вот реализовать этот протокол на практике без участия web-сервера оказалось довольно трудно. Чтение спецификаций и пару часов безуспешных попыток показали что для реализации потребуется время, которого у нас на тот момент не было. Манов по реализации данной затеи, в которых было бы просто и понятно описано данное взаимодействие не нашлось, спеки наскоком взять тоже не удалось, из готовых решений нашли питоновский скрипт и пыховскую либу на гитхабе, которую в итоге не захотели тащить к себе в проект (может это и не правлиьно но не особо мы любим всякие сторонние библиотеки да еще и не очень то и популярные, а значит и не проверенные). В общем по итогу от этой идеи мы отказались и реализовали все это через старых добрый rabbitmq.
Хоть задачу в итоге и решили, но разобраться в FastCgi детально я все таки решил, и в добавок решил написать об этом статью, в которой будет просто и подробно описано как заставить php-fpm запустить php скрипт без web-сервера, а точнее в качестве web-сервера будет другой скрипт, далее его буду называть Fcgi клиент. В общем надеюсь что данная статья поможет тем кто столкнулся с такой же задачей как и мы и прочитав ее сможет быстро все написать как ему надо.
Творческий поиск (ложный путь)
Итак проблема обозначена, надо приступать к решению. Естественно как любой «нормальный» программист для решения задачи, про которую ни где не написано что делать и что вводить в консоль, я не стал читать и переводить спецификацию, а сразу же придумал свое «гениальное» решение. Суть его в следующем, я знаю что nginx (мы используем nginx и чтобы не писать далее дурацкое — web-сервер, буду писать nginx, так как то посимпатичнее) что то передает в php-fpm, это что то php-fpm обрабатывает и на основе него запускает скрипт, что ж вроде все просто, возьму да залогирую то что передает nginx и передам то же самое.
Тут поможет великолепный netcat (UNIX-утилита для работы с сетевым трафиком, которая по моему может практически все). Итак ставим netcat на прослушивание локального порта, а nginx настраиваем на работу с php файлами через сокет (естественно сокет на том же порту который слушает netcat)
Проверить что все ок, можно обратившись через браузер на адрес 127.0.0.1:9000 должна быть следующая картина
настраиваем nginx чтобы он php скрипты обрабатывал через сокет на 9000 порту (в настройках ‘/etc/nginx/sites-available/default’, конечно могут отличаться)
После этих манипуляций проверим что же получилось, обратившись к php скрипту через браузер
Видно что nginx отправил переменные окружения, а также непечатаемые символы, то есть данные были переданы в двоичной кодировке, а это значит что так просто их нельзя скопировать и послать в сокет php-fpm. Если сохранить их в файл например то они сохраняться в 16-ричной кодировке, выглядеть это будет примено так
Но это тоже мало что нам дает, наверное чисто теоретически их можно перевести в двоичную кодировку, каким то образом (даже не представляю каким) их отправить в сокет fpm, и даже есть вероятность что весь этот велосипед как то сработает, и даже запустит какой то скрипт, но уж как то все это страшненько и кривенько.
Стало ясно что данный путь совершенно неверный, сами видите насколько все это убого выглядит, и тем более все эти действия не позволят нам управлять соединением, и ни как не приблизят к пониманию взаимодействия между php-fpm и nginx.
Все пропало, изучения спецификации не миновать!
Решение (тут собственно начинается вся соль данной статьи)
Теоретическая подготовка
Давайте теперь рассмотрим как же все таки происходит соединение и обмен данными между nginx и php-fpm. Немного теории, все общение происходит как уже понятно через сокеты, далее будем рассматривать конкретно соединение через TCP сокет.
Единицей информации в протоколе FastCgi является cgi запись. Такие записи сервер отправляет приложению и точно такие же записи получает в ответ.
Немного теории (структуры)
Далее рассмотрим структуру записи. Для понимания из чего состоит запись нужно понимать что из себя представляют Си подобные структуры и понимать их обозначения. Для тех кто не знает далее это будет кратко (но достаточно для понимания) описано. Описать постараюсь как можно проще, в детали углубляться тут нет смысла, да и боюсь что в деталях запутаюсь, главное чтобы было общее понимание.
Структуры представляют собой просто напросто набор байтов, и нотацию к ним позволяющую их интерпретировать. То есть у вас есть просто последовательность нулей и единиц, и в этой последовательности зашифрованы какие то данные, но пока у вас к этой последовательности нет аннотации то эти данные для вас не представляют никакой ценности, т.к. интерпретировать их вы не можете.
Что тут видно, у нас есть некоторые биты, что это за биты мы понятия не имеем. Ну давайте попробуем например их разделить на байты и представить в десятичной системе
Отлично мы интерпретировали их и получили какие то результаты, допустим что эти данные отвечают за то сколько определенная квартира должна за электроэнергию. Получается что в доме 222 квартира номер 2 должна заплатить 88 рублей. А что еще за две цифры, что с ними делать просто отбросить? Конечно нет! дело в том что мы не имели нотации (формата) которая подсказала бы нам как интерпретировать данные, и интерпретировали их по своему, в связи с этим получили не только бесполезный, но и вредный результат. В итоге квартира 2 заплатила совершенно не то что должна была. (примеры конечно надуманные и служат лишь для того чтобы более понятно объяснить ситуацию)
Теперь посмотрим как же мы должны были интерпретировать правильно эти данные, имея нотацию (формат). Далее буду называть вещи своими именами, а именно нотация = формат (вот тут форматы).
Теперь все сходиться в доме №222 квартира 600 за электричество должна 1000 рублей Думаю теперь ясна важность формата, и теперь понятно как примерно выглядит условно Си подобная структура. (прошу обратить внимания, тут цель не детально объяснить что такое эти структуры, а дать общее понимание что это такое и как это работает)
Условное обозначение данной структуры будет такое
Еще немного теории (FastCgi записи)
Как я уже сказал выше единицей информации в протоколе FastCgi являются записи. Записи сервер отправляет приложению и такие же записи получает в ответ. Запись состоит из заголовка и тела с данными.
Далее идет само тело записи:
Вот пример самой простой FastCgi записи в двоичном виде с форматом
Практика
Скрипт клиент и передающий сокет
Для передачи данных будем использовать стандартное php расширение socket. И первое что нужно будет сделать — это настроить php-fpm на прослушивание порта на локальном хосте, например 9000. Это делается в большинстве случаем в файле ‘/etc/php/7.3/fpm/pool.d/www.conf’, путь конечно зависит от настроек вашей системы. Там нужно прописать примерно следующее (всю портянку привожу чтобы можно было сориентироваться, главная секция здесь listen)
После настройки fpm, следующим этапом будет подключение к сокету
Начало запроса FCGI_BEGIN_REQUEST
Для открытия соединения мы должны отправить запись с типом FCGI_BEGIN_REQUEST = 1 Заголовок записи будет такой (для приведения числовых значений к бинарной строке с заданным форматом будет использована php функция pack())
Тело записи для открытия соединения должно содержать роль записи и флаг управляющий соединением
Итак запись для открытия соединения успешно отправлена, php-fpm ее примет и далее будет ожидать от нас дальнейшей записи в которой нужно передать данные для разворачивания окружения и запуска скрипта.
Передача параметров окружения FCGI_PARAMS
В данной записи мы будем передавать все параметры которые нужны для разворачивания окружения, а так же имя скрипта который нам надо будет запустить.
Минимальные необходимые параметры окружения
Первое что нам тут нужно сделать — это подготовить необходимые переменные, то есть пары имя => значение, которые мы передадим приложению.
Структура пар имя значение будет такая
Идет сначала 1 байт — длинна имени, потом 1 байт значение
В нашем случае и имя и значения короткие и подходят под первый вариант, по этому его и будем рассматривать.
Закодируем наши переменные в соответствии форматом
Получение ответа FCGI_PARAMS
Собственно после того как все предыдущее проделано, и приложению отправлено все что оно ожидает, оно начинает работу и нам остается только забрать результат этой работы из сокета.
Помним что в ответ мы получаем такие же записи и нам их тоже нужно интерпретировать.
Получаем заголовок, он всегда равен 8 байт (получать данные будем по байту)
Теперь в соответствии с полученной длинной тела ответа сделаем еще одно чтение из сокета
Ура все сработало! Наконец то!
Что мы имеем в ответе, если например в этом файле
то в ответе получим в итоге
Итоги
Много тут не буду писать итак статья длинная получилась. Надеюсь она кому то поможет. И приведу сам итоговый скрипт, он получился совсем небольшой. Конечно он в таком виде довольно мало может, и в нем нет обработки ошибок и всего этого, но ему это и не надо, он нужен как пример, чтобы показать основы.