В чем разница между клиентским и серверным программированием?

У меня есть этот код:

<script type="text/javascript">
    var foo = 'bar';
    <?php
        file_put_contents('foo.txt', ' + foo + ');
    ?>

    var baz = <?php echo 42; ?>;
    alert(baz);
</script>

почему это не записывает " бар "в мой текстовый файл, а предупреждает"42"?


NB: более ранние версии этого вопроса явно касались PHP на сервере и JavaScript на клиенте. Сущностная природа проблемы и решений одинакова для любой пара языков, когда один работает на клиенте, а другой на сервере. Пожалуйста, примите это во внимание, когда увидите ответы, говорящие о конкретный язык.

5 ответов


ваш код разделен на две совершенно отдельные части,сервер и стороне клиента.

                    |
               ---------->
              HTTP request
                    |
+--------------+    |    +--------------+
|              |    |    |              |
|    browser   |    |    |  web  server |
| (JavaScript) |    |    |  (PHP etc.)  |
|              |    |    |              |
+--------------+    |    +--------------+
                    |
  client side       |      server side
                    |
               <----------
          HTML, CSS, JavaScript
                    |

две стороны общаются через HTTP-запросы и ответы. PHP выполняется на сервере и выводит некоторый HTML и, возможно, JavaScript-код, который отправляется в ответ клиенту, где интерпретируется HTML и выполняется JavaScript. Как только PHP закончит вывод ответа, скрипт закончится, и ничего не произойдет на сервер до поступления нового HTTP-запроса.

пример кода выполняется следующим образом:

<script type="text/javascript">
    var foo = 'bar';
    <?php
        file_put_contents('foo.txt', ' + foo + ');
    ?>

    var baz = <?php echo 42; ?>;
    alert(baz);
</script>

Шаг 1, PHP выполняет весь код между <?php ?> теги. Результат таков:

<script type="text/javascript">
    var foo = 'bar';

    var baz = 42;
    alert(baz);
</script>

на file_put_contents вызов не привел ни к чему, он просто написал "+ foo + " в файл. The <?php echo 42; ?> вызов привел к выходу "42", который теперь находится в том месте, где раньше был этот код.

этот результирующий код HTML / JavaScript теперь отправляется клиенту, где его оценивают. The alert вызов работает, в то время как foo переменная нигде не используется.

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

чтобы вызвать некоторый PHP-код, клиент должен будет отправить новый HTTP-запрос на сервер. Это может произойти с помощью одного из трех возможных методов:

  1. A ссылке, которая заставляет браузер загружать новую страницу.
  2. отправка формы, которая отправляет данные на сервер и загружает новую страницу.
  3. An AJAX запрос, который является методом Javascript, чтобы сделать обычный HTTP-запрос на сервер (например, 1. и 2. will), но не покидая текущую страницу.

вот вопрос, описывающий этот метод более подробно

вы также можете использовать JavaScript для создания браузер откройте новую страницу с помощью window.location или отправить форму, эмулируя возможности 1. и 2.


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

серверные языки (PHP и т. д.): они извлекают записи из баз данных, поддерживают состояние над адресу http подключение, и сделать много вещей, которые требуют защиты. Они находятся на сервере, эти программы никогда не подвергайте их исходный код воздействию пользователя

Image from wikipedia_http://en.wikipedia.org/wiki/File:Scheme_dynamic_page_en.svg изображение attr

таким образом, вы можете легко увидеть, что серверный язык обрабатывает HTTP-запрос и обрабатывает его, и как @deceze сказал PHP выполняется на сервере и выводит некоторый HTML и, возможно, JavaScript-код, который отправляется в ответ клиенту, где интерпретируется HTML и JavaScript выполненный.

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

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

поэтому, когда вы делаете адресу http запрос на сервере, чем сервер сначала читает файл PHP тщательно, чтобы увидеть, есть ли какие-либо задачи, которые должны быть выполнены и отправить ответ на стороне клиента и снова, как @deceze сказал *Как только PHP закончил вывод ответа, скрипт заканчивается, и ничего не произойдет на сервере до Нового адресу http запрос приходит.*

Graphical representation

Источник изображения

Итак, что я могу сделать, если мне нужно вызвать PHP? Это зависит от того, как вам это нужно сделать: либо перезагрузив страницу, либо используя вызов AJAX.

  1. вы можете сделать, перезагрузив страницу и отправить адресу http запрос
  2. вы можете сделать AJAX вызов с JavaScript, и это не требует перезагрузки страницы

Читать:

  1. Википедия : серверная scripting
  2. Википедия: сценарии на стороне клиента
  3. Мадара Учиха: разница между программированием на стороне клиента и на стороне сервера

ваш Javascript будет выполняться на клиенте, а не на сервере. Это значит, что foo не вычисляется на стороне сервера, и поэтому его значение не может быть записано в файл на сервере.

лучший способ подумать об этом процессе - это динамическое создание текстового файла. Текст, который вы генерируете, становится исполняемым кодом только после его интерпретации браузером. Только то, что вы помещаете между <?php теги вычисляются на сервере.

кстати, привычка встраивать случайные фрагменты логики PHP в HTML или Javascript может привести к серьезному запутанному коду. Я говорю из болезненного опыта.


в веб-приложении каждая задача выполняется в виде запроса и ответа.

программирование на стороне клиента с html-кодом С Java-скриптом и его фреймворками, библиотеки выполняются в браузерах internet explorer, Mozilla, chrome. В сценарии java сервлеты программирования на стороне сервера выполняются в Tomcat, web-logic, J boss, WebSphere severs


Я попытаюсь объяснить это простым способом.

клиентская сторона - это то, что пользователь видит / код, который отображается в браузере.

программирование на стороне клиента включает HTML(HTML, HTML5, DHTML), CSS(CSS, CSS3) и JavaScript (JavaScript, ES5, ES6, ES7, TypeScript, JQuery, ReactJs, AngularJs, BackboneJs или любой другой JavaScript Front-end framework).

программирование на стороне клиента сосредоточено на "как будет выглядеть страница" и ее поведении броузеры.

  1. HTML-это то, что мы видим.
  2. CSS решает его проектирование (цвета, плавающие изображения, заполнение и т. д.).
  3. информация о странице монитора JavaScript. Все вызовы API и поддержание данных по DOM выполняется JavaScript.

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

программирование на стороне сервера включает язык программирования (Java, PHP, .Net, C#, C, C++, NodeJS и т. д.), база данных(SQL, Oracle, MySql, PostgreySql, No-Sql, MongoDB и т. д.), сторонний API(Rest, Soap), бизнес-логика.

программирование на стороне сервера сосредоточено на "как сделать данные доступными для клиентской стороны".

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