Почему PHP-скрипт не работает в веб-браузере? - PullRequest
18 голосов
/ 09 января 2010

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

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

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

как в Javascript

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

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

У меня вопрос: Где отличный ресурс, объясняющий, как работает PHP? .

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

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

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

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

Ответы [ 8 ]

28 голосов
/ 09 января 2010

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

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

против

Сценарии на стороне клиента


И в Википедии тоже есть картинки :

enter image description here

11 голосов
/ 09 января 2010

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

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

2 голосов
/ 09 января 2010

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

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

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

2 голосов
/ 09 января 2010

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

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

1 голос
/ 09 января 2010

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

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

0 голосов
/ 07 мая 2014

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

0 голосов
/ 08 октября 2013

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

<?php ... ?> 

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

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

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

<?php ... ?> 

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

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

0 голосов
/ 09 января 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...