Почему PHP-скрипт не работает в веб-браузере?

Мы все видели много вопросов о StackOverflow, которые основаны на идее, что PHP работает как Javascript. Если человек явно не понимает, что PHP является препроцессором и работает только до отправки страницы.

Ярким примером этого является следующий код, где runCommand() не запускается, когда пользователь нажимает кнопку.

 <a href="<?php runCommand(); ?>">Click Me!</a> 

как это было бы в Javascript

 <a href="javascript:runCommand();">Click Me!</a> 

Я видел много таких вопросов, которые возникают от новых людей, которые просто не понимают, как работает PHP.

Мой вопрос: где большой ресурс, который объясняет, как работает PHP? ,

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

(Это также позволяет мне быть ленивым и не нужно писать объяснение каждый раз, когда оно появляется, но никому не говори!)

Если вы не знаете места, которое описывает это, не стесняйтесь предоставлять свою собственную интерпретацию.

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

Solutions Collecting From Web of "Почему PHP-скрипт не работает в веб-браузере?"

Википедия всегда является отличным ресурсом информации. Я предлагаю:

Серверные скрипты

против

Клиентские скрипты


Кроме того, в Википедии есть фотографии :

введите описание изображения здесь

Возможно, вы тот, кто не понимает, как работает PHP. PHP является полноязычным интерпретатором, и вполне возможно запускать скрипты PHP без браузера вне веб-сервера: в командной строке или в среде IDE или другой среде GUI.

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

PHP-код интерпретируется на стороне сервера, и только вывод вашего PHP-кода будет отправлен клиенту.

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

Короче говоря, PHP принадлежит серверу, он обычно выводит HTML, но он здесь не для этого (или, по крайней мере, не только для этого). Пользовательский браузер «видит» только то, что остается после того, как php сделал свое дело.

Javascript принадлежит клиенту (aka browser): он обычно обрабатывает DOM, созданный путем разбора HTML, который (возможно) создается при выполнении PHP. Javascript может вести себя по-разному в разных браузерах (каждый, кто написал сценарии JS, знает о проблемах с кросс-браузером, помните ли вы IE6?) Javascript не может самостоятельно обрабатывать базу данных; Он должен полагаться на язык на стороне сервера (php, возможно?;) (За исключением случаев, когда речь идет о node.js)

BTW, AJAX может быть хорошей ссылкой, чтобы понять, что именно делает PHP и что делает JS.

Важным отличием является то, что JavaScript в браузере управляется событиями. Вот почему обработчик кликов не выполняется сразу, поскольку загрузка страницы, например. Javascript не мог ждать ответа на этот клик, если бы это было не для стиля программирования dom.

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

php отвечает на HTTP-запросы в типичном сценарии на стороне сервера. браузер читает этот ответ и отвечает за его рендеринг и выполнение любых дополнительных динамических скриптов, встроенных в ответ на стороне клиента. это, по сути, разделение труда в этом сценарии.

PHP – это серверный скриптовый язык, который означает, что все PHP-код выполняется до того, как страница будет отправлена ​​на клиентскую сторону. По этой причине вы никогда не увидите

 <?php ... ?> 

в источнике страницы.

На высоком уровне абстракции … Вы можете рассматривать веб-сервер (аппаратное обеспечение) как компонент из четырех разных частей. Webserver (программное обеспечение, например Apache), файловая система, база данных и плагин PHP.

Например, когда вы отправили запрос страницы (для некоторой страницы … / example.php) на веб-сервер, Apache попытается найти эту страницу в файловой системе, и если страница существует, он вызовет php-плагин для выполнения всех

 <?php ... ?> 

кода (конечно, включая запросы db). После того, как эта страница будет отправлена ​​обратно на клиентскую сторону, где вы можете манипулировать страницей через JavaScript, спроектировали ее через CSS …

Подробнее о: https://www.youtube.com/watch?v=PemsuAfc7Jw

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

И это может показаться тревожным, поэтому взгляните на спецификации HTML на веб-сайте W3C HTML 5 и HTML 4.01 (потому что в нем есть более подробные примеры). Что вы можете найти? Эти скрипты могут быть написаны на других языках, кроме JavaScript!

Ниже приведен пример документации HTML 4.01 (раздел « Указание языка сценариев» ).


(…)

Вот более интересный обработчик окон:

 <SCRIPT type="text/javascript"> function my_onload() { . . . } var win = window.open("some/other/URI") if (win) win.onload = my_onload </SCRIPT> 

В Tcl это выглядит так:

  <SCRIPT type="text/tcl"> proc my_onload {} { . . . } set win [window open "some/other/URI"] if {$win != ""} { $win onload my_onload } </SCRIPT> 

Сценарий, написанный в Tcl, отлично подходит для HTML! Как насчет PHP? Документация HTML5 гласит:

Говорят, что пользовательский агент поддерживает язык сценариев, если каждый компонент типа блока сценария является несоответствующим регистру ASCII совпадению для соответствующего компонента в строке типа MIME языка сценариев, который реализует пользовательский агент. (…) Пользовательские агенты могут поддерживать другие типы MIME для других языков , но не должны поддерживать другие типы MIME для языков в приведенном выше списке. Пользовательские агенты не обязаны поддерживать перечисленные выше языки.

Таким образом, это зависит только от веб-браузера (пользовательского агента), если он будет поддерживать PHP или нет. Например, в примере с W3C, PHP-браузер может принять что-то вроде этого.

 <script type="text/php"> function my_onload() { . . . } $win = $window->open('some/other/URI'); if ($win !== false) $win->onload = 'my_onload'; </script> 

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