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

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

<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 на клиенте. Суть проблемы и решений одинакова для любой пары языков при работе на клиенте, а другая на сервере. Пожалуйста, примите это во внимание, когда увидите ответы о конкретных языках.

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

      | ----------> 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 не file_put_contents ни к чему, он просто написал «+ foo +» в файл. <?php echo 42; ?> <?php echo 42; ?> вызвал вывод «42», который теперь находится на том месте, где раньше был этот код.

    Этот итоговый код HTML / JavaScript теперь отправляется клиенту, где он получает оценку. Звонок работает, а переменная foo нигде не используется.

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

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

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

    Вот более подробный изложение этого метода

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

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

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

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

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

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

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

    Поэтому, когда вы делаете HTTP- запрос на сервере, чем сервер, сначала внимательно читает файл PHP, чтобы узнать, есть ли какие-либо задачи, которые необходимо выполнить, и отправить ответ на клиентскую сторону и снова, как @deceze сказал * Как только PHP завершит вывод ответа , сценарий заканчивается, и на сервере ничего не произойдет, пока не появится новый HTTP- запрос. *

    Графическое представление

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

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

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

    Хорошо для чтения:

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

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

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

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

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

    Программирование на стороне клиента – это html-код с Java-скриптом и его фреймворками, библиотеки выполняются в Internet Explorer, Mozilla, Chrome-браузерах. В сценарии java серверные серверные сервлеты выполняются в Tomcat, web-логике, j боссе, WebSphere severs